springMVC + mybatis 调用存储过程一
接收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>

浙公网安备 33010602011771号