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";        Map
pMap = 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

讨论及说明

显然,调用存储过程的核心在于两个方面:

  1. 编写存储过程
  2. 编写映射关联文件
    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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SVN介绍+安装+配置+命令行操作
下一篇:Mybatis之动态SQL 模糊查询

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月29日 02时12分06秒