使用mybatis-spring和MapperScannerConfigurer在多个Mapper xml文件中重用resultMap

时间:2015-01-09 18:39:23

标签: spring spring-mvc mybatis

我们正在使用

mybatis-spring = 1.1.1 

mybatis = 3.1.1

spring = 3.2.0

MapperScannerConfigurer -  to scan mappers

我们如何在多个Mapper xml文件中重用resultMap?

在这个已回答的问题"Reusing MyBatis ResultMap in multiple mapper.xml"

解决方案是使用mybatis-config.xml文件并在该文件中添加resultMap详细信息(或导入该文件中的所有映射器文件)。

但是我们没有使用该文件而是使用mybatis-spring的MapperScannerConfigurer。

那么我们如何使用MapperScannerConfigurer实现相同的功能呢?

例如,我们有一个userMapper.xml。

<resultMap id="user" type="com.domain.ModelUser">
    <result>..</result>
    ...
    ...
</resultMap>

我们需要在例如managerMapper.xml中使用此resultMap  并需要重用“user”resultMap。

例如

<select id="getManager" resultMap="com.domain.ModelUser.user">
    select .......
</select>

现在它抛出错误 java.lang.IllegalArgumentException:Result Maps集合不包含com.domain.ModelUser.user的值

截至目前,它不知道如何以及在何处在UserMapper.xml文件中找到resultMap

任何帮助和指导都将受到赞赏。

感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:0)

即使使用Spring和MapperScanner,您仍然可以使用mybatis-config.xml。此xml文件必须是基本MyBatis的完整(或有效)配置。只需创建一个这样的简单配置:

<config>
   <mapper namespace="foo">
      <resultMap id="user" type="com.domain.ModelUser">
      <result>..</result>
      ...
      ...
      </resultMap>
   </mapper>
</config>

使用SqlSessionFactoryBean.setConfigLocation()引用此文件。它将在创建SqlSessionFactory时加载,并且可以使用提供的命名空间进行访问。

答案 1 :(得分:0)

我知道现在已经很晚了,但我的一个项目也遇到了类似的异常。在id查询中使用resultMap的{​​{1}},如下所示:

getManager