1. 首先了解下maven项目中的目录结构
在正常的开发中,会自动构建相应的文件夹并存放相应的文件。这样在执行mvn compile指令后,才会将对应文件夹下的对应文件给输出到target目录中。例如:按照上图的目录结构构建的一个MyBatisDemo工程,文件的存放路径如下
然后执行compile指令,会生成target目录,其中的classes文件夹也就是我们最终的所要部署的目录文件结构(如果执行的是package命令,则会把classes打包成jar文件),其文件结构如下。可以看到,maven会自动帮我们把在resources目录下的配置文件给加入到输出的classes文件夹下。同时test文件夹下的所有东西都不会出现在target目录下。
2.在MyBatis开发中遇到的一个问题
使用MyBatis开发的过程中,一般不会使用DAO进行开发,而会使用Mapper接口进行开发,一般要求Mapper接口与Mapper的xml配置文件处于同一级里。
如果还是以前的目录结构,配置文件都放在resources下的话,就会出现找不到Mapper.xml文件的异常。因为maven在执行compile的时候,如果在java文件夹下发现了除了.java文件以外的东西,例如UserMapper.xml,就不会把该文件输出到classes文件夹中,所以在运行的时候会报IOException,也就是找不到UserMapper.xml文件。
3. 配置pom.xml解决该问题
要解决该问题,就是要使maven在compile时,想将Mapper.xml文件和Mapper接口放在一起,故将src/main/java添加到资源搜索目录即可。
<build>
<resources>
<resource>
<!-- 由于想将Mapper.xml文件和Mapper接口放在一起,
故将src/main/java添加到资源搜索目录 -->
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<!-- 原有的src/main/resources也要添加到资源搜索目录,可以省略-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
复制代码
这样在compile之后,java文件夹下的xml文件也会被打包到classes文件夹下,找不到UserMapper.xml的问题成功解决。