MyBatis 调用 Oracle 存储过程返回游标的详细步骤
在 MyBatis 中调用 Oracle 存储过程并返回游标需要以下几个步骤:
- 创建一个存储过程:
CREATE OR REPLACE PROCEDURE get_emp_data(p_deptno IN NUMBER, p_emp_data OUT SYS_REFCURSOR) AS
BEGIN
OPEN p_emp_data FOR
SELECT * FROM emp WHERE deptno = p_deptno;
END;
该存储过程接受一个部门编号参数,返回该部门下的所有员工数据。
- 在 MyBatis 中定义一个 resultMap,用于映射返回的游标数据:
<resultMap id="EmpResultMap" type="Emp">
<result column="EMPNO" property="empno" />
<result column="ENAME" property="ename" />
<result column="JOB" property="job" />
<result column="MGR" property="mgr" />
<result column="HIREDATE" property="hiredate" />
<result column="SAL" property="sal" />
<result column="COMM" property="comm" />
<result column="DEPTNO" property="deptno" />
</resultMap>
- 在 MyBatis 中定义一个 select 语句,用于调用存储过程并返回游标:
<select id="getEmpData" statementType="CALLABLE" resultMap="EmpResultMap">
{CALL get_emp_data(#{deptno, mode=IN, jdbcType=NUMERIC}, #{result, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=EmpResultMap})}
</select>
该 select 语句中,使用 CALLABLE 类型的语句调用存储过程,同时使用 mode=IN 和 mode=OUT 参数来传递参数和接收游标数据。
- 在 Java 代码中调用该 select 语句:
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("deptno", 10);
paramMap.put("result", null);
List<Emp> empList = sqlSession.selectList("getEmpData", paramMap);
该 Java 代码中,使用 HashMap 传递参数和接收游标数据,最终得到一个 List
原文地址: https://www.cveoy.top/t/topic/mKOA 著作权归作者所有。请勿转载和采集!