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>

posted @ 2017-08-13 15:36  cainiaoYY_YY  阅读(7991)  评论(0编辑  收藏  举报