MyBatis 接收存储过程多个结果集
MyBatis 可以非常方便地接收和使用存储过程返回的结果集。当你的存储过程返回多个结果集时,你需要在 MyBatis 的映射文件中(通常是一个 .xml
文件)为每个结果集创建一个 <resultMap>
,然后在 <select>
元素中通过 resultType
属性指定第一个结果集的映射。
以下是一个例子,假设你的存储过程返回两个结果集:
<select id="callMyStoredProcedure" statementType="CALLABLE" resultType="com.example.MyObject">
{call my_stored_procedure(#{param1, mode=IN, jdbcType=VARCHAR}, #{param2, mode=OUT, jdbcType=VARCHAR})}
</select>
<resultMap id="resultMapFirstSet" type="com.example.MyObject">
<id property="id" column="id"/>
<result property="name" column="name"/>
<!-- other mappings -->
</resultMap>
<resultMap id="resultMapSecondSet" type="com.example.OtherObject">
<id property="id" column="id"/>
<result property="name" column="name"/>
<!-- other mappings -->
</resultMap>
在上述代码中, callMyStoredProcedure
是调用存储过程的命令。这个映射指定了存储过程的名称和输入/输出参数。请注意 resultType
属性,它指定了第一个结果集的映射类型。
两个 <resultMap>
元素分别定义了两个结果集的映射。每一个 <resultMap>
定义了如何从数据库结果集中映射到你的 Java 对象。
然后在你的 Java 代码中,你可以像这样调用存储过程并处理结果:
String param1 = "some value";
CallableStatement stmt = conn.prepareCall("{call my_stored_procedure(?, ?)}", CallableStatement.RETURN_GENERATED_KEYS, Types.VARCHAR);
stmt.setString(1, param1);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.execute();
List<MyObject> resultSet1 = sqlSession.selectList("callMyStoredProcedure", param1);
List<OtherObject> resultSet2 = sqlSession.selectList("callMyStoredProcedure", param1);
在上述代码中,我们首先创建了一个 CallableStatement
并设置了输入参数。然后我们执行存储过程并获取返回的结果集。注意我们调用了两次 selectList
,分别指定了两个结果集的映射,从而获取了两个不同的结果集。
List<List<Map<String, Object>>> proc_qc_report_Summary_ErrKind_dept(@Param("hospCode") String hospCode,
@Param("startDate") String startDate,
@Param("endDate") String endDate,
@Param("errorType") String errorType,
@Param("dept") String dept,
@Param("opCode") String opCode);
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.uni.app.mapper.CardQualityInfoMapper">
<resultMap type="java.util.HashMap" id="ares1"></resultMap>
<resultMap type="java.util.HashMap" id="ares2"></resultMap>
<select id="proc_qc_report_Summary_ErrKind_dept" resultMap="ares1,ares2">
<![CDATA[
exec proc_qc_report_Summary_ErrKind_dept
#{hospCode,mode=IN,jdbcType=VARCHAR},
#{startDate,mode=IN,jdbcType=TIMESTAMP},
#{endDate,mode=IN,jdbcType=TIMESTAMP},
#{errorType,mode=IN,jdbcType=TIMESTAMP},
#{dept,mode=IN,jdbcType=TIMESTAMP},
#{opCode,mode=IN,jdbcType=VARCHAR}
]]>
</select>
</mapper>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论