具有过程

时间:2018-03-14 11:24:07

标签: java sql database mybatis ibatis

我尝试了以下映射:

<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。

2 个答案:

答案 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);