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