mybatis调用oracle存储过程 返回结果集

一、ORACLE

1、创建包

CREATE OR REPLACE PACKAGE pkg_test
IS
   TYPE v_cur IS REF CURSOR;

   PROCEDURE p_test (
      param1       IN       VARCHAR2,
      param2       IN       VARCHAR2, 
      p_cur        OUT      v_cur
   );
END pkg_test;

2、创建包体 ,存储过程

CREATE OR REPLACE PACKAGE BODY PKG_TEST
IS
   PROCEDURE P_TEST (  PARAM1        IN     VARCHAR2, 
                       PARAM2        IN     VARCHAR2, 
                       P_CUR         OUT    V_CUR )
   IS
      V_PARAM1      VARCHAR2 (8) := NULL;
   BEGIN
      IF  PARAM1 IS NULL
      THEN
         V_PARAM1   := '00000000';
      ELSE
         V_PARAM1  := PARAM1;
      END IF;
      OPEN P_CUR FOR
      SELECT * FROM TABLE -- 略 ...
         ;
   END P_TEST ;
END PKG_TEST;

二、JAVA 结果集用Map接收

1、mapper.xml  

        2个入参,1个输出,入参不传直接写''则为null

	<resultMap id="xxMap" type="java.util.HashMap">
	</resultMap>
	
<select id="findData" statementType="CALLABLE" parameterType="java.util.Map">
	<![CDATA[
	call PKG_TEST.P_TEST('',
	  #{endDate,jdbcType=VARCHAR,mode=IN},
      #{p_cur,jdbcType=CURSOR,mode=OUT,resultMap=xxMap}
	)
	]]>
</select>

2、dao

	@DS(value = "datasource") // 配置多数据源
	String findData(Map<String, Object> map);

3、service

	@Override
	public void findData() {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("startDate", "20200301");
		map.put("endDate", "20200309");
		map.put("p_cur", OracleTypes.CURSOR);
		this.xxDao.findData(map);
		System.out.println(map.get("p_cur"));
	}

三、JAVA 结果集映射类

1、mapper.xml  

	 <resultMap id="resMap" type="com.*.*.entity.User">
		<result column="id" property="id"></result>
		<result column="name" property="name"></result>
	</resultMap>

	<select id="findData" statementType="CALLABLE" parameterType="java.util.Map" >
        <![CDATA[
			call call PKG_TEST.P_TEST(
				#{startDate,jdbcType=VARCHAR,mode=IN},
				#{endDate,jdbcType=VARCHAR,mode=IN},
				'','',#{p_cur,jdbcType=CURSOR,mode=OUT,resultMap=resMap}
			)
		]]>
    </select>

2、dao

	@DS(value = "ds")
	void findData(Map<String, Object> map);

3、service

	@Override
	public void findData() {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("startDate", "20200320");
		map.put("endDate", "20200330");
		map.put("p_cur", new ArrayList<User>());
		this.xxDao.findData(map);
		List<User> list = (List<User>)map.get("p_cur");
		System.out.println(list.size());
	}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值