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);
我尝试了以下映射:
<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);