接收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>