springMVC + mybatis 调用存储过程一

本文介绍如何在MyBatis中使用存储过程的Out参数,并提供了具体的XML配置及Java调用示例。同时,还展示了包含In和Out参数的存储过程的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接收out参数

存储过程

-- ----------------------------
-- Procedure structure for `testOutParam`
-- ----------------------------
DROP PROCEDURE IF EXISTS `testOutParam`;
DELIMITER ;;
CREATE DEFINER=`yangyang`@`localhost` PROCEDURE `testOutParam`(OUT v_flag INT)
BEGIN

	#SELECT 34 INTO @v_flag;

  SET v_flag = 45;

END
;;
DELIMITER ;

  mapper.xml

<parameterMap type="map" id="testoutParampParameterMap">
		<parameter property="flag" mode="OUT" jdbcType="INTEGER" javaType="int"/>
	</parameterMap>

	<select id="testOutParam" statementType="CALLABLE" parameterMap="testoutParampParameterMap">
		{CALL testOutParam(?)}
	</select>

或者

	<select id="testOutParam" statementType="CALLABLE" parameterType="map">
		{CALL testOutParam(#{flag, mode=OUT, jdbcType=INTEGER})}
	</select>

  

java调用

    public void testOutParam()
    {
        Map<String, Integer> map = new HashMap<String, Integer>();
        //map.put("flag", flag);
        userMapper.testOutParam(map);
        System.out.println(map.get("flag"));
    }

改变测试

	<select id="testOutParamM2" statementType="CALLABLE" parameterType="int">
		{CALL testOutParam(#{flag, mode=OUT, jdbcType=INTEGER})}
	</select>
    public void testOutParamM2(int flag)
    {
        userMapper.testOutParamM2(flag);
        System.out.println("flag :" + flag);
    }

 

结果:org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'flag' in 'class java.lang.Integer'

参数类型要传入bean类型或者map类型

 

存储过程有IN和OUT参数

sql

BEGIN
	
SET v_flag = 111;

END

 

mapper.xml

	<parameterMap type="map" id="testInOutParamProParameterMap">
		<parameter property="num" mode="IN" jdbcType="INTEGER" javaType="int"/>
		<parameter property="flag" mode="OUT" jdbcType="INTEGER" javaType="int"/>
	</parameterMap>
	
	<select id="testInOutParamPro" statementType="CALLABLE" parameterMap="testInOutParamProParameterMap">
		{CALL testInOutParamPro(?, ?)}
	</select>

 

java

    public void testInOutParamPro()
    {
        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("num", 123);
        userMapper.testInOutParamPro(map);
        
        System.out.println(map.get("flag"));
    }

  

 <parameterMap type="map" id="testInOutParamProParameterMap">
  <parameter property="num" mode="IN" jdbcType="INTEGER" javaType="int"/>
  <parameter property="flag" mode="OUT" jdbcType="INTEGER" javaType="int"/>
 </parameterMap>
 
 <select id="testInOutParamPro" statementType="CALLABLE" parameterMap="testInOutParamProParameterMap">
  {CALL testInOutParamPro(?, ?)}
 </select>

转载于:https://www.cnblogs.com/cainiaoYY/p/7353587.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值