簡體   English   中英

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:預期 selectOne() 返回一個結果(或 null),但發現:2

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

你能幫我如何用調用過程映射多個結果集嗎? 我的數據庫是 Sybase。

sqlSession.selectOne 表示您只希望從該過程返回一行。

相反,你應該使用 sqlSession.select

必須將名為getRequestDetail的方法的返回類型更改為List<List<?>>而不是Map<String, Object>

然后,您可以獲得列表的結果類型。 它包含索引 0 中的ExternalManagersMap類型作為列表和索引 1 中的SubjectServicesMap類型作為列表。

所以,你可以這樣寫。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM