【复盘问题-mybatis的mapper.xml文件映射不到】

Spring Boot 整合 MyBatis 时 Mapper.xml 映射不到的问题

常见原因分析
  1. 文件路径问题
    Mapper.xml 文件未放置在正确目录下,Spring Boot 默认扫描 resources/mapperresources/mybatis/mapper。若自定义路径,需在配置文件中明确指定。

  2. 配置缺失或错误
    application.propertiesapplication.yml 中未配置 MyBatis 的 mapper-locations 属性,或路径格式错误。例如:

    mybatis.mapper-locations=classpath:mapper/*.xml
    
  3. 未启用 Mapper 扫描
    主启动类缺少 @MapperScan 注解,或注解的包路径未覆盖 Mapper 接口所在包。

  4. 命名不规范
    Mapper.xml 文件名与 Mapper 接口名不一致,或 <mapper> 标签的 namespace 未正确指向接口全限定名。

  5. 资源过滤问题
    Maven 或 Gradle 未将 XML 文件打包到最终产物中,需检查构建工具的资源配置。


解决方法

检查文件路径与配置
确保 Mapper.xml 文件位于 resources/mapper 目录,并在配置文件中添加:

mybatis:
  mapper-locations: classpath:mapper/*.xml

添加 Mapper 扫描注解
在主启动类上指定 Mapper 接口的包路径:

@MapperScan("com.example.mapper")
@SpringBootApplication
public class Application { ... }

验证 XML 与接口映射
检查 Mapper.xml 的 namespace 是否与接口全限定名一致,例如:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUser" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

配置 Maven 资源过滤
pom.xml 中确保 XML 文件被打包:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

举一反三:其他场景的排查思路
  1. 多模块项目中的路径问题
    若 Mapper.xml 位于子模块,需确认路径是否为 classpath*:(多模块扫描)且子模块依赖已正确引入。

  2. 动态数据源与多数据库映射
    使用多数据源时,需为每个数据源单独配置 SqlSessionFactory,并指定对应的 mapper-locations

  3. 注解与 XML 混合使用冲突
    避免同一方法既在 XML 中配置又在接口上用 @Select 注解,会导致映射冲突。

  4. MyBatis-Plus 的兼容性问题
    若集成 MyBatis-Plus,需检查是否因默认配置覆盖了原生 MyBatis 的路径规则。


通用排查流程
  1. 通过日志确认是否加载了目标 XML 文件(开启 debug 日志级别)。
  2. 使用 IDE 的全局搜索功能检查 namespaceid 是否匹配。
  3. 解压最终生成的 JAR 包,验证 XML 文件是否存在于预期路径。

遇到问题:
1.思考问题的原因
2.排查核心原因
3.查询问题的核心/直接原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值