Mybatis:调用存储过程获取输出参数、获取数据集(Oracle)

16 篇文章 1 订阅

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(“出参名”)来获取对应的出参值。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值