mybatis调用带 IN 和 OUT的数据库存储过程

这是我的表:
在这里插入图片描述
这是存储过程:

delimiter $$
create procedure getSexCount(in sex_id int,out sex_count int)
begin
	IF sex_id = 0 then
		select count(*) from tbl_employee where gender = '女' INTO sex_count;
	else
		select count(*) from tbl_employee where gender = '男' INTO sex_count;
	END IF;
end $$

在这里插入图片描述

这是dao接口中的方法:

// 对于带OUT返回值的存储过程,我们在java中传参一定要是map,
// 且方法返回值不能是int,long这些基本类型,只能使用引用类型。
    public Integer getGenderCount(Map<String,Integer> param); 
 // sid = 0,查女生;否则 查 男生,使用MySQL的存储过程getSexCount。

这是mapper配置文件:

<!--    
	没必要指定resultType,因为返回值封装在了map里,
	我们只需指定好map的泛型即可。
-->
    <select id="getGenderCount" parameterType="java.util.Map" statementType="CALLABLE" >
        {call getSexCount(
            #{sid,mode=IN,jdbcType=INTEGER},
            #{sexCount,mode=OUT,jdbcType=INTEGER}
        )}
    </select>

测试代码:

@Test
    public void testPro02(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployeeDao mapper = sqlSession.getMapper(EmployeeDao.class);
        Map<String,Integer> map = new HashMap<>();
        map.put("sid",0);
        //map.put("sexCount",-1);
        // 就算hashMap中没有添加sexCount这个key,mybatis在处理结果集时也会自动添加!
        //key的名称会根据xml中的call的参数进行确定
        mapper.getGenderCount(map);
        System.out.println("输出结果是:"+map.get("sexCount"));  //返回值13
        System.out.println("genderCount:"+genderCount);//返回null,指定了resultType也返回的是null。
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值