java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatis调用存储过程

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);
	}
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文