调用存储过程
调用存储过程,当然我们得了解 mysql 的 存储过程,不了解读者们,请查看MySQL存储过程详解 mysql 存储过程。
需要用到的实体类:
public class User {
private Integer id;
private String name;
private int age;
private String sex;
//省略其它必要的基本方法
......
}
步骤:
1.先在数据库创建需要的表和创建存储过程
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.ges_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
$
2.在实体类映射文件中加入:
<select id="getUserCount" parameterMap="getCountParamMap" statementType="CALLABLE">
Call mybatis.ges_user_count(?,?)
</select>
<!-- 存储过程的传入和传出参数 -->
<parameterMap type="java.util.Map" id="getCountParamMap">
<parameter property="sex_id" mode="IN" jdbcType="INTEGER"/>
<parameter property="user_count" mode="OUT" jdbcType="INTEGER"/>
</parameterMap>
3.测试:
@Test
public void testSelect3(){
//MyBatisUtil 是本人自己写的获取 SqlFactory 的工具类
SqlSession session = MyBatisUtil.getFactory().openSession();
String statement = "com.wsb.mybatis.beans.userMapper.getUserCount";
//用于存放存储过程的传入出参数
Map<String, Object> parameterMap = new HashMap<>();
//放入参数
parameterMap.put("sex_id", 0);
session.selectOne(statement, parameterMap);
//取出存储过程中的"user_connt"参数
Integer userCount = (Integer) parameterMap.get("user_count");
session.commit();
System.out.println(userCount);
session.close();
}