mybatis等框架调用存存过程

需要一次操作多张表的情况下,为了简化代码,可以直接调用一个存储过程

调用存储过程有很多方法

1,最原始的jdbc调用

2,用mybatis,hibernate等框架调用(推荐,简单)

http://blog.csdn.net/rishengcsdn/article/details/41957567(返回字符串,返回结果集,批量插入)

调用存储过程,注入参数的类型

 

StringBuffer inPara = new StringBuffer();

        inPara.append("CUSTOMER_KEY=");

        inPara.append(Integer.parseInt(tbCusFirmChg.getCustomerKey().toString()));

        inPara.append('\r');

        inPara.append('\n');

        inPara.append("WARE_LISTS=");

        inPara.append(pzList);

        inPara.append('\r');

        inPara.append('\n');

        param.put("inPara", inPara.toString());///////这里需要转化成string,要不然会某个参数类型不匹配,JDBCTYPE

        param.put("result", "");

        String ret2=tbCusFirmChgService.getpro(param);

 

<select id="getpro" parameterType="map" statementType="CALLABLE" resultType="string">

  

  <![CDATA[  

    {call PD_CUS_CHGWARE(#{inPara,mode=IN,jdbcType=VARCHAR},#{result,mode=OUT,jdbcType=VARCHAR})}  

  ]]>  

  

  </select>

 

注意的地方是,虽然存储过程有返回值(ret2),但是返回值很诡异,不可以使用。一般都是用  map.put("retStr", "");输出参数来使用自定义的返回值。

 

调试存储过程,看参数很重要 例如下面的 CUSTOMER_KEY=417这个才是参数而不是417

{result=, inPara=CUSTOMER_KEY=417}

  {call PD_LOGOUTCUST(?,?)}

   Parameters: CUSTOMER_KEY=417(String)

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2306905