【MybatisPuls】如何调用DM存储过程并返回多结果集

一、创建DM存储过程

CREATE OR REPLACE PROCEDURE your_procedure
(
result1 OUT CURSOR,
result2 OUT CURSOR
)
AS
BEGIN
-- 打开第一个结果集
OPEN result1 FOR SELECT top 10 * FROM 表;

-- 打开第二个结果集
OPEN result2 FOR SELECT top 10 * FROM 表;
END;

--SQL测试存储过程

sql 调用过程 输出
declare
row1 表%ROWTYPE;
row2 表%ROWTYPE;
result1 CURSOR ;
result2 CURSOR ;
BEGIN
-- 调用存储过程,并接收输出参数
your_procedure( result1, result2);
-- 循环输出结果集1的数据
LOOP
FETCH result1 INTO row1;
EXIT WHEN result1%NOTFOUND; -- 当结果集为空时退出循环
-- 输出数据
DBMS_OUTPUT.enable;

DBMS_OUTPUT.PUT_LINE(row1.name);
END LOOP;

CLOSE result1;
end;

 

二、Mybatis Puls 调用

server层:只能使用map传参,接参

 Map<String, Object> parameterMap = new HashMap<>();
       parameterMap.put("outParam1", null); // 对应第一个结果集
       parameterMap.put("outParam2", null); // 对应第二个结果集
       baseMapper.getMultipleResults(parameterMap);
       Object map1=parameterMap.get("outParam1");
       Object map2=parameterMap.get("outParam2");

mapper层:
void getMultipleResults(Map<String,Object> p);

XML实现

  <select id="getMultipleResults" statementType="CALLABLE" resultSets="result1,result2">
       {CALL your_procedure(#{outParam1, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=employeeResultMap},
   #{outParam2, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=departmentResultMap})}
   </select>


注意:
--statementType="CALLABLE" --调用存储过程,存储函数
--resultSets:指定用于加载复杂类型的结果集名字
--jdbcType=CURSOR   游标类型,
--javaType=java.sql.ResultSet  一般设置

这里的 javaType 属性是可选的,如果留空并且 jdbcType 是 CURSOR,它会被自动地被设为 ResultMap

 

posted @ 2024-02-04 15:51  喝了烫嘴的水  阅读(368)  评论(0编辑  收藏  举报