[英]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.