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);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章