文章目录
一、问题描述
问题: mybatis 中接口和对应的 mapper 文件位置不同,而引起的操作也会不同,在网上找了好久最终找到了方法,这里就简单的解析一下:
-
我们知道在典型的 maven 工程中,目录结构有:
src/main/java
和src/main/resources
,前者是用来存放 java 源代码的,后者则是存放一些资源文件,比如配置文件等。 -
Mybatis 中接口和对应的 mapper 文件不一定要放在同一个包下。
-
放在一起的目的: 为了 Mybatis 进行自动扫描,并且要注意此时 Java 接口的名称 和 mapper文件的名称 要相同,否则会报异常,由于此时 Mybatis 会自动解析对应的接口和相应的配置文件,所以就不需要配置 mapper 文件的位置了。
所以下面就针对 mapper 的方式位置进行详细分析:有各种各样的情况,如下:
二、关于Mapper.xml文件的放置位置
1. 和接口放在一起
1、跟 接口 放在一块。 通常在 src/java/com…/repository 目录(repository层也写做 dao层 或 mapper层),如下:
Mybatis 配置文件中不需要配置 mapper 的位置(配置了也没问题),如下:
注意: 这种情况下:
① 需要在 pom.xml 中添加一些配置,否则 xml 文件读取不进来:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.xml</include>
<include>*.properties</include>
</includes>
</resource>
</resources>
</build>
② mapper.xml 的名字 必须和 接口文件的名字 一样,否则即使能读取到,但也不会执行。
2. 和接口放在一起(在xml包中)
2、通常在 src/java/com…/repository/xml 目录中,如下:
此时需要指定 mapper 的位置:
拿 spring 整合 mybatis 举例,其它同理:
注意: 也需要在 pom.xml 中添加配置;但名字不需要一致。
3. 放在resources目录下(直接放)
3、直接放在 resources 目录下,如下:
此时需要指定 mapper 的位置: 指定位置时,就必须指定时哪个 xml
注意: 虽然能读取 resources 下的 xml 文件,但最好也配置下;此时名字可以不和接口名一致,但指定位置时就要指定是哪个。
4. 放在resources目录下(有目录)
4、此时 resources 下有目录存放,如下:
需要指定mapper的位置:
注意:
① 需要修改 pom.xml 中的配置:
② 名字不需要一致。
5. 放在resources目录下(与接口的层级关系一样)
5、也就是 resources 目录,和接口所在的目录相同,如下:
此时不需要指定位置
注意:
① 记得修改成 **/*.xml
;名字必须一样
② resources 这个目录的创建必须按照下面的方式,中间不能是 .