mappers
在MyBatis中,<mappers>
是配置文件(通常是 mybatis-config.xml
)中的核心标签之一,用于告诉MyBatis去哪里寻找映射器(Mapper),也就是定义SQL语句的地方。映射器可以是XML文件,也可以是接口类(通过注解或XML绑定)。
<mappers>
的作用
MyBatis需要通过 <mappers>
标签定位到所有的映射器资源,以便加载SQL语句并与Java接口关联。简单来说,就是告诉MyBatis:"我的SQL语句写在哪里,你去这里找"。
<mappers>
的常用配置方式
1. 通过 resource
属性引入XML映射文件(最常用)
-
适用场景:SQL语句写在独立的XML文件中(如
UserMapper.xml
)。 -
语法:使用相对于类路径(classpath)的路径,路径分隔符用
/
。 -
示例:
xml<mappers> <!-- 引入com/itbaizhan/mapper目录下的UserMapper.xml --> <mapper resource="com/itbaizhan/mapper/UserMapper.xml"/> </mappers>
2. 通过 class
属性引入接口类
-
适用场景:
- SQL语句通过注解写在接口中(如
@Select
、@Insert
)。 - 接口与XML映射文件同名且在同一目录下(如
UserMapper.java
和UserMapper.xml
)。
- SQL语句通过注解写在接口中(如
-
语法:指定接口的全类名(包名+类名)。
-
示例:
xml<mappers> <!-- 引入UserMapper接口 --> <mapper class="com.itbaizhan.mapper.UserMapper"/> </mappers>
3. 通过 url
属性引入本地或网络上的XML文件
-
适用场景:XML文件不在类路径下,而是在本地磁盘或网络路径(较少用)。
-
语法:使用绝对路径(如
file:///D:/mappers/UserMapper.xml
)。 -
示例:
xml<mappers> <!-- 引入本地磁盘的XML文件 --> <mapper url="file:///D:/code/mybatis/mappers/UserMapper.xml"/> </mappers>
4. 通过 package
属性批量引入接口(包扫描)
-
适用场景:多个接口类在同一个包下,希望批量加载(无需逐个配置)。
-
语法:指定接口所在的包名,MyBatis会扫描该包下所有接口。
-
要求:
- 接口需与XML映射文件同名且同目录(若用XML)。
- 接口名与XML文件名必须一致(如
UserMapper.java
和UserMapper.xml
)。
-
示例:
xml<mappers> <!-- 扫描com.itbaizhan.mapper包下所有接口 --> <package name="com.itbaizhan.mapper"/> </mappers>
注意事项
-
路径正确性
- 使用
resource
时,路径必须准确对应XML文件在类路径中的位置(例如:src/main/resources
下的文件,路径从该目录开始计算)。 - 错误示例:若文件在
resources/com/itbaizhan/mapper/UserMapper.xml
,却写成com.itbaizhan.mapper.UserMapper.xml
(用.
分隔),会导致找不到文件。
- 使用
-
XML与接口的匹配规则
- 当通过
class
或package
引入接口时,若同时使用XML映射文件,XML文件名必须与接口名完全一致,且放在同一目录下(Maven项目中,XML通常放在resources
下与接口包结构相同的目录)。
- 当通过
-
避免重复配置
同一映射器(接口或XML)无需重复配置,否则可能导致MyBatis加载异常。
总结
<mappers>
标签是MyBatis连接Java接口与SQL语句的"桥梁",通过配置XML文件路径、接口类或包扫描,让MyBatis能够正确加载映射关系。根据项目中SQL的编写方式(XML或注解)选择合适的配置方式即可。