mappers

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.javaUserMapper.xml)。
  • 语法:指定接口的全类名(包名+类名)。

  • 示例:

    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.javaUserMapper.xml)。
  • 示例:

    xml 复制代码
    <mappers>
      <!-- 扫描com.itbaizhan.mapper包下所有接口 -->
      <package name="com.itbaizhan.mapper"/>
    </mappers>

注意事项

  1. 路径正确性

    • 使用 resource 时,路径必须准确对应XML文件在类路径中的位置(例如:src/main/resources 下的文件,路径从该目录开始计算)。
    • 错误示例:若文件在 resources/com/itbaizhan/mapper/UserMapper.xml,却写成 com.itbaizhan.mapper.UserMapper.xml(用 . 分隔),会导致找不到文件。
  2. XML与接口的匹配规则

    • 当通过 classpackage 引入接口时,若同时使用XML映射文件,XML文件名必须与接口名完全一致,且放在同一目录下(Maven项目中,XML通常放在 resources 下与接口包结构相同的目录)。
  3. 避免重复配置

    同一映射器(接口或XML)无需重复配置,否则可能导致MyBatis加载异常。

总结

<mappers> 标签是MyBatis连接Java接口与SQL语句的"桥梁",通过配置XML文件路径、接口类或包扫描,让MyBatis能够正确加载映射关系。根据项目中SQL的编写方式(XML或注解)选择合适的配置方式即可。