MyBatis 调用 Oracle 存储过程返回游标详解
- 首先,在Mybatis中,可以使用'select'标签调用存储过程,并使用'resultType'属性指定返回值类型。
<select id="callProcedure" statementType="CALLABLE" resultType="com.example.MyEntity">
{call my_procedure(#{param1, mode=IN}, #{param2, mode=IN}, #{result, mode=OUT, jdbcType=CURSOR, resultMap=myResultMap})}
</select>
- 上面的代码中,'resultMap'属性可以指定游标返回结果的映射关系。例如:
<resultMap id="myResultMap" type="com.example.MyEntity">
<result property="id" column="ID"/>
<result property="name" column="NAME"/>
<result property="age" column="AGE"/>
</resultMap>
- 在存储过程中,需要使用SYS_REFCURSOR类型的游标返回结果。例如:
CREATE OR REPLACE PROCEDURE my_procedure(
param1 IN VARCHAR2,
param2 IN NUMBER,
result OUT SYS_REFCURSOR)
AS
BEGIN
OPEN result FOR SELECT * FROM my_table WHERE col1 = param1 AND col2 = param2;
END;
- 最后,在Java代码中调用Mybatis的'select'方法即可执行存储过程并获取游标返回结果。例如:
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("param1", "value1");
paramMap.put("param2", 123);
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
sqlSession.selectOne("callProcedure", paramMap);
List<MyEntity> resultList = (List<MyEntity>) paramMap.get("result");
// 处理游标返回结果
} finally {
sqlSession.close();
}
原文地址: https://www.cveoy.top/t/topic/mKiH 著作权归作者所有。请勿转载和采集!