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