DAO.java接口内容如下:
public interface PagDAO {
//查询存储过程,返回多个输出参数
public void pagApply(HashMap<String, String> map);
//查询数据集(存储过程游标返回一条或多条)
public List<HashMap<String, String>> pagApplySelect(HashMap<String, Object> map);
}
mapper.xml内容如下:
<resultMap type="java.util.HashMap" id="cursorMap">
<result column="RecNo" property="RecNo"/>
<result column="ProjName" property="ProjName"/>
<result column="ContactName" property="ContactName"/>
<result column="CONTACTTEL" property="CONTACTTEL"/>
<result column="CONTACTADDR" property="CONTACTADDR"/>
<result column="BANKNAME" property="BANKNAME"/>
<result column="BANKACCOUNT" property="BANKACCOUNT"/>
<result column="PROJTYPE" property="PROJTYPE"/>
<result column="ORGANIZE" property="ORGANIZE"/>
<result column="RSCALE" property="RSCALE"/>
<result column="RSTATUS" property="RSTATUS"/>
<result column="WXID" property="WXID"/>
<result column="bz" property="bz"/>
</resultMap>
<!-- 查询返回游标,获取数据集 -->
<select id="pagApplySelect" parameterType="java.util.HashMap"
statementType="CALLABLE" resultMap="cursorMap">
{call UECCP.PKG_YC_WECHAT.P_WX_PAGAPPLYSEC(#{RecNo,mode=IN,jdbcType=VARCHAR},
#{WXid,mode=IN,jdbcType=VARCHAR},#{RTN_DATE,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap},
#{RTN_CODE,mode=OUT,jdbcType=VARCHAR},#{RTN_MSG,mode=OUT,jdbcType=VARCHAR})}
</select>
<!-- 执行存储过程,返回输出参数 -->
<update id="pagApply" parameterType="java.util.HashMap" statementType="CALLABLE" >
{call UECCP.PKG_YC_WECHAT.P_WX_PAGAPPLY(#{ctype,mode=IN},
#{RecNo,mode=IN},#{ProjName,mode=IN},#{ContactName,mode=IN},
#{ContactTel,mode=IN},#{ContactAddr,mode=IN},#{BankName,mode=IN},
#{BankAccount,mode=IN},#{ProjType,mode=IN},#{Organize,mode=IN},
#{RScale,mode=IN},#{WXid,mode=IN},#{BZ,mode=IN},#{UUID,mode=IN},
#{resultCode,mode=OUT,jdbcType=VARCHAR},#{resultMsg,mode=OUT,jdbcType=VARCHAR})}
</update>
调用存储过程,都用parameterType="java.util.HashMap"来做入参,statementType="CALLABLE",表示存储过程。
在调用返回游标,获取数据集时,使用jdbcType=CURSOR,resultMap=cursorMap,这里的cursorMap是上文有定义的resultMap类型。前端调用时,需要转换成list类型来接收,如下文。
HashMap<String, Object> hmap = new HashMap<String, Object>();
hmap.put("RecNo", map.get("RecNo"));
hmap.put("WXid", map.get("WXid"));
hmap.put("RTN_DATE", new ArrayList<HashMap<String, Object>>());
pagDAO.pagApplySelect(hmap);
ArrayList<HashMap<String, Object>> list = (ArrayList<HashMap<String, Object>>) hmap.get("RTN_DATE");
注意:调用的入参、出参必须按存储过程的入参、出参顺序,特别是出参。否则会提示参数个数或类型有误。
返回的出参值,会自动附加到入参的HashMap类型中,前端调用函数时可以使用map.get(“出参名”)来获取对应的出参值。