MyBatis 带有过程的多个结果集

MyBatis multiple resultsets with procedure

我尝试了以下映射:

<select id="getRequestDetail" statementType="CALLABLE" parameterType="test.domain.RequestDetailRequest" resultMap="ExternalManagersMap, SubjectServicesMap">
    {call pop.dbo.getRequestDetail ( #{uid, mode=IN, jdbcType=VARCHAR},
                            #{requestId, mode=IN, jdbcType=INTEGER},
                            #{resultStatus, mode=OUT, jdbcType=INTEGER},
                            #{resultMsg, mode=OUT, jdbcType=VARCHAR} )}
</select>


<resultMap type='test.domain.User' id="ExternalManagersMap">
        <result property="name" column="externalManager"/>
</resultMap>

<resultMap type='test.domain.Service' id="SubjectServicesMap">
        <result property="name" column="serviceName"/>
        <result property="id" column="serviceId"/>
</resultMap>

但是我有错误:

org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

我的界面是: Map<String, Object> getRequestDetail(RequestDetailRequest detailRequest);

你能帮我如何用调用过程映射多个结果集吗? 我的数据库是 Sybase。

sqlSession.selectOne 表示您只希望从该过程返回一行。

您应该使用 sqlSession.select

必须将名为 getRequestDetail 的方法 return 类型更改为 List<List<?>> 而不是 Map<String, Object>

然后,你可以得到一个List类型的结果。 它包含索引 0 中 ExternalManagersMap 的类型作为列表,索引 1 中的 SubjectServicesMap 类型作为列表。

所以,你可以这样写。

List<List> result = getRequestDetail(RequestDetailRequest detailRequest);
ExternalManagersMap external = (ExternalManagersMap) result.get(0);
SubjectServicesMap subject = (SubjectServicesMap) result.get(1);