分析家 发表于 2016-11-27 08:21:49

Spring整合MyBatis错误:Mapped Statements collection does not contain value for

  MyBatis Mapper使用Spring注入:
applicationContext.xml

Xml代码  





[*]<bean id="studentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
[*]
    <property name="mapperInterface" value="com.itsyc.fmpp.mappers.StudentMapper" />  
[*]
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
[*]
</bean>  



<bean id="studentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.itsyc.fmpp.mappers.StudentMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

  
使用上面方式注入时需要注意下面问题:
- interface = com.itsyc.fmpp.mappers.StudentMapper.class
- mapper file = /com/itsyc/fmpp/mappers/StudentMapper.xml
- mapper namespace = com.itsyc.fmpp.mappers.StudentMapper
这三者必须相同否则会出现下面错误:
Stacktraces
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.itsyc.fmpp.mappers.StudentMapper.getById

软件版本:
mybatis: 3.1.1
spring: 3.0.5
mybatis-spring: 1.1.1

更正:mapper file是可以和interface、namespace不同的(注意:interface和namespace必须相同),但这时需要进行配置。
方式一:
1.在MyBatis配置文件中添加mappers:
mybatis-config.xml

Xml代码  





[*]<mappers>  
[*]
    <mapper resource="com/itsyc/fmpp/mappers/StudentMapper.xml" /> <!-- Mapper文件可以和interface不在相同路径下! -->  
[*]
</mappers>  



<mappers>
<mapper resource="com/itsyc/fmpp/mappers/StudentMapper.xml" /> <!-- Mapper文件可以和interface不在相同路径下! -->
</mappers>

  
2.使用configLocation,在Spring配置文件中添加MyBatis配置文件的引用:
applicationContext.xml

Xml代码  





[*]<!-- MyBatis配置 -->  
[*]
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
[*]
    <property name="dataSource" ref="dataSource" />  
[*]
    <property name="configLocation" value="classpath:mybatis-config.xml" />  
[*]
</bean>  



<!-- MyBatis配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>

  
方式二:
使用mapperLocations,MyBatis-Spring会自动地扫描该路径下的所有Mapper文件:
applicationContext.xml

Xml代码  





[*]<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
[*]
    <property name="dataSource" ref="dataSource" />  
[*]
    <property name="mapperLocations" value="classpath*:com/itsyc/fmpp/mappers/*Mapper.xml" />  
[*]
</bean>  



<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:com/itsyc/fmpp/mappers/*Mapper.xml" />
</bean>

  

本文转载自:http://ifrenzyc.iyunv.com/blog/1011593;再次对高人表示感谢。
页: [1]
查看完整版本: Spring整合MyBatis错误:Mapped Statements collection does not contain value for