7月13 mybatis调用存储过程

一、提出需求

  查询得到男性或女性的数量, 如果传入的是0就女性否则是男性

 

 

 -- 创建存储过程(查询得到男性或女性的数量, 如果传入的是0就女性否则是男性)

DELIMITER $$

USE `test`$$

DROP PROCEDURE IF EXISTS `p_user_count`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_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 ;

 

分析:这个存储过程 1个入参, 1个出参 

调用的时候,给一个入参,定义一个出参。结果会赋值到出参

 

调用存储过程

DELIMITER ;
 SET @user_count = 0;
CALL test.p_user_count(0, @user_count);
SELECT @user_count;

查询女性的数量,执行结果

 

二、java 调用

一个入参一个出参,select 里不用定义resultType ,入参和出参都是都是在同一个Map 里

    <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
          CALL p_user_count(?,?)
      </select>

    <parameterMap type="java.util.Map" id="getUserCountMap">
         <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
         <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
     </parameterMap>

 

定义接口方法

void getUserCount(Map<String,Integer> params);

 

调用

/** 测试存储过程 */
    @GetMapping("/testcall")
    @ResponseBody
    public R testcall() {
        Map<String, Integer> parameterMap = new HashMap<String, Integer>();
        parameterMap.put("sexid", 1);
        parameterMap.put("usercount", -1);
        userCallMapper.getUserCount(parameterMap);

        System.out.println("[result] = " + parameterMap.get("usercount"));
        return R.ok();
    }

 

获取结果的时候直接从map 里get

######### 测试出错 

Parameter number 2 is not an OUT parameter

最终错误是因为存储过程名称写错了,如果名称ok 要确保参数是否是出参

---------------------------  工程  ---------------------------

 

 

转载于:https://www.cnblogs.com/lyon91/p/9300984.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值