Mybatis调用存储过程
发布日期:2021-11-14 22:18:51
浏览次数:13
分类:技术文章
本文共 3070 字,大约阅读时间需要 10 分钟。
调用存储过程
准备工作:下面是存储过程的代码和数据库代码
CREATE TABLE p_user(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),sex CHAR(2));INSERT INTO p_user(NAME,sex) VALUES('A',"男");INSERT INTO p_user(NAME,sex) VALUES('B',"女");INSERT INTO p_user(NAME,sex) VALUES('C',"男");#创建存储过程( 查询得到男性或女性的数量, 如果传入的是 0 就女性否则是男性)DELIMITER $CREATE PROCEDURE mybatis.get_user_count(IN sex_id INT, OUT user_count INT)BEGINIF sex_id=0 THENSELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count;ELSESELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='男' INTO user_count;END IF;END$#调用存储过程SET @user_count = 0;CALL mybatis.get_user_count(1, @user_count);SELECT @user_count;
下面是数据库的截图
实体类
package com.mybatis.bean;public class PUser { private String id; private String name; private String sex; public PUser() { } public PUser(String id, String name, String sex) { super(); this.id = id; this.name = name; this.sex = sex; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "PUser [id=" + id + ", name=" + name + ", sex=" + sex + "]"; }}
映射文件
同样的,映射文件需要在配置文件中去注册,此处不再赘述,参考我其他关于Mybatis的文章即可。
测试
package com.mybatis.test;import java.util.HashMap;import java.util.Map;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import com.mybatis.utils.MybatisUtils;public class Test8 { @Test public void test() { SqlSession session = MybatisUtils.getSession(); String statement = "com.mybatis.bean.puserMapper.getUserCount"; MappMap = new HashMap (); pMap.put("id", 0); //传入参数为0 pMap.put("user_count", -1); // 给user_count一个初始值为-1 session.selectOne(statement, pMap); Integer rs = pMap.get("user_count"); System.out.println(rs); session.close(); }}
测试结果
2016-12-11 16:31:37,241 [main] DEBUG [com.mybatis.bean.puserMapper.getUserCount] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@71eb195f]2016-12-11 16:31:37,242 [main] DEBUG [com.mybatis.bean.puserMapper.getUserCount] - ==> Preparing: CALL mybatis.get_user_count(?, ?); 2016-12-11 16:31:37,367 [main] DEBUG [com.mybatis.bean.puserMapper.getUserCount] - ==> Parameters: 0(Integer)1
讨论及说明
显然,调用存储过程的核心在于两个方面:
- 编写存储过程
- 编写映射关联文件 2.1 编写映射文件时重点又在于如何处理输入输出参数
特别注意
在映射文件中statementType必须改写为下面的,默认的为STATEMENT statementType="CALLABLE" 还有关于参数的配置写法里面的property必须和下面的Map中的Key一致Map pMap = new HashMap (); pMap.put("id", 0); //传入参数为0 pMap.put("user_count", -1); // 给user_count一个初始值为-1
另外关于映射中的配置的额外说明
转载地址:https://blog.csdn.net/qq_18538781/article/details/53573915 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月29日 02时12分06秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
svn提交的一个坑
2019-04-27
eclipse识别不了模拟器解决办法
2019-04-27
unity mesh合并
2019-04-27
谈谈类之间的关联关系与依赖关系
2019-04-27
unity5.x assetbundle打包和加载
2019-04-27
C#用正则表达式去匹配被双引号包起来的中文
2019-04-27
lua table排序
2019-04-27
Unity发布的ios包在iphone上声音是从听筒里出来的问题
2019-04-27
UIScrollView复用节点示例
2019-04-27
Unity 5 AudioMixer
2019-04-27
Unity 代码混淆: CodeGuard的使用
2019-04-27
UGUI 列表循环使用
2019-04-27
使用命令行运行unity并执行某个静态函数(运用于命令行打包和批量打包)
2019-04-27
web.py框架
2019-04-27
web.py学习笔记
2019-04-27
python的代码缩进
2019-04-27
A* Pathfinding Project (Unity A*寻路插件) 使用教程
2019-04-27
bash学习笔记
2019-04-27
sqlite学习
2019-04-27