Mybatis调用存储过程
2016-12-11 16:47
369 查看
调用存储过程
准备工作:下面是存储过程的代码和数据库代码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) BEGIN IF sex_id=0 THEN SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count; ELSE SELECT 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 + "]"; } }
映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mybatis.bean.puserMapper"> <!-- 调用存储过程 --> <select id="getUserCount" parameterMap="getMap" statementType="CALLABLE"> CALL mybatis.get_user_count(?, ?); </select> <!-- 调用存储过程时的参数为一个Map,他具体的参数通过下面的方式来指定 --> <parameterMap type="java.util.Map" id="getMap"> <!-- 指定参数映射到指定的property并且 mode设置为IN 或OUT 作为调用存储过程的输入和输出 --> <parameter property="id" mode="IN" jdbcType="INTEGER" /> <parameter property="user_count" mode="OUT" jdbcType="INTEGER" /> </parameterMap> </mapper>
同样的,映射文件需要在配置文件中去注册,此处不再赘述,参考我其他关于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<String, Integer> pMap = new HashMap<String, Integer>(); 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" 还有关于参数的配置写法 <!-- 调用存储过程时的参数为一个Map,他具体的参数通过下面的方式来指定 --> <parameterMap type="java.util.Map" id="getMap"> <!-- 指定参数映射到指定的property并且 mode设置为IN 或OUT 作为调用存储过程的输入和输出 --> <parameter property="id" mode="IN" jdbcType="INTEGER" /> <parameter property="user_count" mode="OUT" jdbcType="INTEGER" /> 里面的property必须和下面的Map中的Key一致 Map<String, Integer> pMap = new HashMap<String, Integer>(); pMap.put("id", 0); //传入参数为0 pMap.put("user_count", -1); // 给user_count一个初始值为-1 </parameterMap>
另外关于映射中的配置的额外说明
相关文章推荐
- mybatis调用存储过程
- mybatis调用存储过程
- MyBatis学习总结(六)——调用存储过程
- 关于用mybatis调用存储过程时的入参和出参的传递方法
- MyBatis调用存储过程,含有返回结果集、return参数和output参数
- MyBatis调用存储过程
- MyBatis学习总结(六)——调用存储过程
- Mybatis调用mysql存储过程
- MyBatis调用存储过程
- MyBatis学习总结(六)——调用存储过程
- mybatis调用orcale存储过程-传入多个参数返回单个字符
- MyBatis调用存储过程
- mybatis调用存储过程
- Mybatis调用sqlserver2008存储过程
- MyBatis学习 ——调用存储过程
- MyBatis系列之(七):调用存储过程
- mybatis 调用存储过程,处理返回2个不同类型的结果集
- MyBatis调用存储过程
- Mybatis调用MySQL存储过程
- mybatis 调用存储过程(procedure)