我尝试了以下映射:
<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);
您能帮我解决如何使用调用程序映射多个resutlset吗? 我的数据库是Sybase。
答案 0 :(得分:1)
sqlSession.selectOne表示您只希望从过程中返回一行。
您应该使用sqlSession.select
答案 1 :(得分:0)
必须将名为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);