问题
今天在使用mybatis时,程序找不到Java源代码mapper文件夹中映射用的mapper.xml
1 | <property name="mapperLocations" value="classpath:com/withstars/mapper/*.xml" /> |
这是无效的,当我们去项目生成的classes文件夹中寻找时,发现找不到xml文件夹
思考查阅发现,IDEA默认不会在编译时把Java源代码文件中的XML等资源文件打包到classes文件夹中,只会把resources文件夹的资源文件打包到classes
- classpath:只会到你的class路径中查找找文件。
- classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。
当我们使用classpath时,它寻找的路径是已经生成的classes文件夹,而不是Java源代码文件夹(这是一个关键的概念),因为classes文件夹没有打包xml,所以自然找不到
解决办法
下面提供两种方法:
- 把mapper/*.xml复制到resources下面
- 如果是maven项目,则在pom的<build>中添加
1
2
3
4
5
6
7
8
9<resources>
<!-- mapper.xml文件在java目录下 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>