当前位置: 首页 > news >正文

深入理解 mapper-locations

mybatis-plus.mapper-locations: classpath*:/mapper/**/*.xml 是 MyBatis/MyBatis-Plus 在 Spring Boot 配置文件(如 application.yml 或 application.properties)中的一项关键配置,用于指定 MyBatis Mapper XML 文件的存放路径。以下是详细解释:

1. 配置含义

mybatis-plus:mapper-locations: classpath*:/mapper/**/*.xml
  • 作用:告诉 MyBatis/MyBatis-Plus 去哪里扫描并加载 SQL 映射文件(即 *Mapper.xml或者 *Dao.xml文件)。

  • 值解析

    • classpath*::从所有类路径(包括依赖的 JAR 文件)中搜索。

    • /mapper/**/*.xml:匹配 resources/mapper/ 目录及其子目录下的所有 .xml 文件。

2. 为什么需要这个配置?

  • 默认行为
    MyBatis 默认会尝试加载与 Mapper 接口同名的 XML 文件(如 UserDao.java 对应 UserDao.xml),但需要明确指定 XML 的存放路径。

  • 灵活定位
    如果你的 XML 文件不放在默认位置(如 resources/com/example/dao/),需要通过此配置自定义路径。

3. 常见配置示例

(1) 多路径匹配
mybatis-plus:mapper-locations: - classpath*:/mapper/**/*.xml- classpath*:/com/example/custom/**/*.xml

支持多个路径,用列表形式表示。

(2) 不同项目结构
  • 如果 XML 文件直接放在 resources/mapper/ 下:

mybatis-plus:mapper-locations: classpath*:mapper/*.xml
  •  如果 XML 文件按模块分包:
mybatis-plus:mapper-locations: classpath*:com/example/**/dao/*.xml

4. 与 @MapperScan 的关系

  • mapper-locations:告诉 MyBatis XML 文件在哪里

  • @MapperScan:告诉 Spring Mapper 接口在哪里(扫描 DAO 接口)。
    两者需配合使用,例如:

@SpringBootApplication
@MapperScan("com.example.dao") // 扫描接口
public class App {}
mybatis-plus:mapper-locations: classpath*:com/example/dao/*.xml  # 扫描 XML

5. 注意事项

  1. 路径通配符

    • **:匹配多级目录(如 mapper/user/UserMapper.xml)。

    • *:匹配单级目录或文件名(如 mapper/*.xml)。

  2. 文件命名

    • XML 文件名通常与 Mapper 接口名一致(如 UserMapper.java 对应 UserMapper.xml)。

  3. 优先级

    • 如果同时存在注解(如 @Select)和 XML,XML 优先级更高

  4. 资源过滤

    • 确保 Maven 将 XML 文件复制到 target/classes 或构建输出目录。

 

6. 如何验证配置生效?

  1. 检查日志
    启动时查看 MyBatis 日志,是否加载了预期的 XML 文件:

[MyBatis] Mapped SQL statement: com.example.dao.UserMapper.selectById
  1. 解压 JAR 检查
    打包后解压 JAR,确认 XML 文件在指定路径下(如 BOOT-INF/classes/mapper/UserMapper.xml)。

  2. 故意写错路径
    修改为一个不存在的路径(如 classpath*:/nonexist/**/*.xml),如果启动时报 BindingException,说明原配置已生效。

相关文章:

  • LintCode407-加一,LintCode第479题-数组第二大数
  • MySQL - 事务
  • 5.2创新架构
  • 浔川AI 第二次内测报告
  • 浅析MySQL 的 **触发器(Trigger)** 和 **存储过程(Stored Procedure)原理及优化建议
  • c++学习合集(2025-4-29)
  • 基于Anaconda的Pycharm环境配置
  • 使用图像生成式AI和主题社区网站助力运动和时尚品牌的新产品设计和市场推广的点子和实现
  • 20250506让NanoPi NEO core开发板使用Ubuntu core16.04系统的TF卡启动
  • 中达瑞和便携式高光谱相机:珠宝鉴定领域的“光谱之眼”
  • 车载通信网络安全:挑战与解决方案
  • 【表设计】外键的取舍-分布式中逐渐消失的外键
  • 【十五】Mybatis动态SQL实现原理
  • 在Unity AR应用中实现摄像头切换功能
  • 2025年服务器技术全景解析:量子计算、液冷革命与未来生态构建
  • 基于图像处理的道路监控与路面障碍检测系统设计与实现 (源码+定制+开发) 图像处理 计算机视觉 道路监控系统 视频帧分析 道路安全监控 城市道路管理
  • HTTP请求与前端资源未优化的系统性风险与高性能优化方案
  • Java高频面试之并发编程-12
  • 论文速读:《CoM:从多模态人类视频中学习机器人操作,助力视觉语言模型推理与执行》
  • element-ui日期时间选择器禁止输入日期
  • 发表“男性患子宫肌瘤”论文的杂志一年发文三千余篇,中介称可提供代写
  • 电商平台集体出手,多措并举助力外贸企业拓内销
  • 准85后青海海北州副州长、州公安局局长李贤荣挂职临沂市副市长
  • 阿根廷发生5.8级地震
  • 《求是》杂志发表习近平总书记重要文章《激励新时代青年在中国式现代化建设中挺膺担当》
  • 中国科学院院士张泽民已任重庆医科大学校长