mybatis 加载配置文件的实验 mapper文件加载情况说明

本文详细介绍了MyBatis中配置文件的正确加载方式,包括如何指定Mapper文件和接口的对应关系,以及配置文件中各标签的固定顺序。此外,还探讨了如何设置别名和类型处理器。

这种方式 是行的通的,可以正确的加载  并且运行:   没有任何限制 文件的名字 可以不一致 位置可以不一致 

 <mapper resource="com/test/model/ArticleMapper.xml"></mapper>
                 <mapper resource="com/test/model/AuthorMapper.xml"></mapper>

 

 

 

 

这种 类加载的方式 注意 的是 此时 接口的名字要和 对应的mapper文件的名字要一致 和文件的位置要保持一致

<mapper class="org.mybatis.mappers.UserMapper"/>

 

使用 package

<package name="com.test.model" />    进行加载 的时候 注意 要 保持 接口和mapper文件的对应的关系 名字一致 文件位置一致

 

 

 

 

 

注意 mybatis的配置文件 加载顺序固定 不能随意修改 对应的标签的顺序

  <typeAliases>
       <!--         <typeAlias alias="Article"
type="com.test.pojo.Article"/>
<typeAlias alias="Author"
type="com.test.pojo.Author"/> -->
        <!--如果用上面这种,则每个pojo里面的类都需要加入进来写别名-->

<package name="com.test.pojo"/>
        <!--如果上面这种,则自动扫描包pojo下的注解类的别名-->
    </typeAliases>
     <typeHandlers>
         <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.test.pojo.SexEnum" />
        <typeHandler handler="com.test.typehandler.ArticeEnumTypeHandler" javaType="com.test.pojo.ArticleTypeEnum" />
    </typeHandlers>

 

原因 : 观看 MyBatis 源码 可知:

"configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。这个 就是顺序

 

由此 可知 加载XML的顺序 是固定的  当 不对的时候 会报错的。。。

要查看 **MyBatis 是否加载了某个 Mapper XML 文件**,可以通过以下几种方式来确认: --- ### ✅ 方法一:查看启动日志(推荐) 在 Spring Boot 启动时,MyBatis 会输出加载Mapper XML 文件信息。你可以通过以下方式查看: #### 1. 设置 MyBatis 日志级别为 `DEBUG` 在 `application.yml` 或 `application.properties` 中配置日志级别: ```yaml logging: level: org.apache.ibatis: DEBUG java.sql: DEBUG ``` 或者在 `application.properties` 中: ```properties logging.level.org.apache.ibatis=DEBUG logging.level.java.sql=DEBUG ``` #### 2. 查看日志输出 启动项目后,你会看到类似如下日志: ``` DEBUG org.apache.ibatis.builder.xml.XMLMapperBuilder - Cache namespace: com.example.mapper.UserMapper DEBUG org.apache.ibatis.builder.xml.XMLMapperBuilder - Mapped statement com.example.mapper.UserMapper.selectById ``` 这说明: - `UserMapper.xml` 已成功加载 - 其中包含 `selectById` 方法的 SQL 映射 --- ### ✅ 方法二:通过 `SqlSessionFactory` 获取 `Configuration` 查看已加载Mapper 你可以通过注入 `SqlSessionFactory`,然后访问其内部的 `Configuration` 对象,查看是否加载了指定的 Mapper: ```java @Autowired private SqlSessionFactory sqlSessionFactory; public void checkMapperLoaded() { Configuration configuration = sqlSessionFactory.getConfiguration(); if (configuration.hasMapper(com.example.mapper.UserMapper.class)) { System.out.println("Mapper加载"); } else { System.out.println("Mapper加载"); } } ``` 你也可以查看所有已加载的映射语句: ```java Set<String> mappedStatements = configuration.getMappedStatementNames(); mappedStatements.forEach(System.out::println); ``` --- ### ✅ 方法三:检查 XML 文件是否被正确编译进 `target/classes` 或 jar 包中 有时候 XML 文件未被正确打包,导致 MyBatis 找不到: - 确保 XML 文件放在 `resources` 目录下,如 `resources/mapper/xxx.xml` - 检查 `pom.xml` 中是否配置了资源过滤(Maven 项目): ```xml <resources> <resource> <directory>src/main/resources</directory> <includes> <include>mapper/**/*.xml</include> </includes> </resource> </resources> ``` 构建后查看 `target/classes/mapper/` 或 jar 包中是否存在该 XML 文件。 --- ### ✅ 方法四:使用 Actuator + 自定义健康检查(可选) 如果你使用 Spring Boot Actuator,可以自定义一个健康检查接口,检查某个 Mapper 是否存在: ```java @Component public class MapperHealthIndicator implements HealthIndicator { private final SqlSessionFactory sqlSessionFactory; public MapperHealthIndicator(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } @Override public Health health() { Configuration configuration = sqlSessionFactory.getConfiguration(); boolean isLoaded = configuration.hasMapper(com.example.mapper.UserMapper.class); if (isLoaded) { return Health.up().build(); } else { return Health.down().withDetail("Mapper", "未加载").build(); } } } ``` --- ### ✅ 总结 | 方法 | 是否推荐 | 说明 | |------|----------|------| | 查看启动日志 | ✅ 推荐 | 最简单直观的方式 | | 使用 `SqlSessionFactory` 编程检查 | ✅ 推荐 | 可用于调试或单元测试 | | 检查打包文件结构 | ✅ 推荐 | 排查资源未正确打包问题 | | 自定义健康检查 | ✅ 可选 | 适合用于生产环境监控 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值