mybatis调用存储过程,带in、out参数问题
作者:猎人在吃肉
这篇文章主要介绍了mybatis调用存储过程,带in、out参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
1、需求
统计男性、女性的数量,如果传入的是0,就统计女性的数量,否则统计男性的数量。
2、准备数据库表、存储过程
2.1、创建表,导入数据
create table p_user(
id int primary key auto_increment,
name varchar(10),
sex char(2)
) engine=innodb default charset=utf8 ;
insert into p_user(name,sex) values('A',"男");
insert into p_user(name,sex) values('B',"女");
insert into p_user(name,sex) values('C',"男");
2.2、创建存储过程
delimiter $ drop procedure if exists get_user_count; create procedure get_user_count(in sex_id int, out user_count int) begin if sex_id=0 then select count(*) from p_user where p_user.sex='女' into user_count; else select count(*) from p_user where p_user.sex='男' into user_count; end if; end $ delimiter ;
2.3、测试存储过程
call get_user_count(1, @user_count); ## 0:统计女性的,1:统计男性的 select @user_count;
结果:

3、 Mapper 接口
package com.test;
public interface UserMapper{
public Integer getCount(Map map);
}
4、UserMapper.xml
统计男性、女性的数量, 如果传入的是0,就统计女性的数量,否则统计男性。
<mapper namespace="com.test.UserMapper">
<!--
统计男性、女性的数量, 如果传入的是0,就统计女性的数量,否则统计男性
call get_user_count(1, @user_count);
-->
<select id="getCount" statementType="CALLABLE" parameterMap="getCountMap">
call get_user_count(?,?)
</select>
<parameterMap type="java.util.Map" id="getCountMap">
<parameter property="sex_id" mode="IN" jdbcType="INTEGER"/>
<parameter property="user_count" mode="OUT" jdbcType="INTEGER"/>
</parameterMap>
</mapper>
5、 测试调用
public class UserTest {
public static void main(String[] args) throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
Map<String, Integer> paramMap = new HashMap<>();
paramMap.put("sex_id", 0);
session.selectOne(statement, paramMap);
Integer userCount = paramMap.get("user_count");
System.out.println(userCount);
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
