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); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。