Spring拥有自己的Mapper批量扫描器类,用于扫描Mapper代理借口。这个Mapper批量扫描器类,会从mapper包中扫描mapper接口,自动创建代理对象并且在Spring容器中注入。
这里遵循的规范是让XXXMapper.java和mapper映射文件名保持一致,且在一个目录内。
当使用MyEclipse时这样是没有问题的,但是当使用IDEA时,就会报 Invalid bound statement (not found)的错误
原因:
IDEA的maven项目中,默认源代码目录下的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。
如果使用的是Eclipse,Eclipse的src目录下的xml等资源文件在编译的时候会自动打包进输出到classes文件夹。Hibernate和Spring有时会将配置文件放置在src目录下,编译后要一块打包进classes文件夹,所以存在着需要将xml等资源文件放置在源代码目录下的需求
解决方法:
在Maven项目的pom文件build标签下插入如下:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
这样就可以在IDEA中将映射文件与接口放在同一包下