1 前言
在使用 IDEA 当作工具使用 Mybatis+Spring 时,总是能碰到 Eclipse 碰不到的“蛋疼问题”,这应该是属于 IDEA 的阵痛期,这个错我已经碰到4次了,而且每次原因还不太同。久病成良医,下一次应该不会再出现了,记录下解决办法,希望能帮到你,因为我已经在这个问题上浪费太多时间了。
2 情况
Mybatis+Spring 配置有好几种方法。最常用的应该是 Mapper
动态代理开发,但是动态代理配置也有两种。
<!-- Mapper代理的方式开发方式一,配置Mapper代理对象 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 配置Mapper接口 -->
<property name="mapperInterface" value="cn.itcast.mybatis.mapper.UserMapper" />
<!-- 配置sqlSessionFactory -->
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- Mapper动态代理开发 开发方式2 扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.guozh.bitbooks.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
一般使用第二种,本人也是使用第二种。如果第二种 首先有几点要确定。
- *Mapper.java 和 *Mapper.xml 命名是否一致
- 是否在一个包下,扫描能不能扫到 .xml。
- *Mapper.xml 的 namespace 配置是否准确,接口方法名是否准确。
以上都是 mybatis 的基本知识,当然第二点 可以不再同一个包下。很多种写法,可能有人喜欢将 *Mapper.xml 放在 resources
下。无所谓,只要能扫描到就可以了。
ok 到这里如果还报错如上错误,和我一样,接着看吧
3 解决
- 删除编辑后的文件 class,然后
Rebuild
在运行。 - 如果上面方法不行,仔细找找在编译后的classes 中 *Mapper.xml 生成了没,如果没 那一定有问题。
我的项目结构是这样的,并且 *Mapper.xml 放在 java 中。这里就会有一个问题。
idea默认是不编译 src\main\java下的xml文件
所以这就需要我们手动配置下。
- 将 *Mapper.xml 复制一份到 resources 下,记得修改 mybatis 配置文件的路径。
- 在 pom.xml 中配置资源代码
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
ok 希望能帮到你。