Mybaitis 项目多模块多依赖xml加载classpath:和classpath*:的区别

核心结论

  • classpath: :仅在当前模块的类路径中查找资源。
  • classpath*: :在所有模块(包括依赖的JAR包)的类路径中递归查找资源。
  • 多模块项目必须使用 classpath*:

详细对比

特性 classpath: classpath*:
查找范围 仅限当前应用或模块的类路径(如 src/main/resources)。 当前类路径 + 所有依赖JAR包的类路径。
适用场景 单体应用,所有资源文件都在本项目内。 多模块/微服务项目,或依赖第三方JAR包中含有资源文件。
多模块结果 无法扫描到依赖子模块JAR包中的Mapper文件,导致 Invalid bound statement错误。 能正确扫描并加载所有依赖模块中的Mapper文件。
性能 相对更快(搜索范围小)。 相对稍慢(搜索范围广,通常影响可忽略)。

配置示例

在Spring Boot的 application.yml中,多模块项目应如下配置:

yaml 复制代码
mybatis:
  mapper-locations: classpath*:mapper/**/*.xml

重要补充说明

  1. 路径通配符

    • **/*.xml:匹配任意深度的子目录。
    • *.xml:仅匹配当前目录,不进入子目录。
  2. 最佳实践

    • 无脑推荐:在多模块项目中,MyBatis的 mapper-locations统一使用 classpath*:前缀。

    • 若追求极致精确,可指定具体路径(需了解依赖JAR内结构):

      yaml 复制代码
      mybatis:
        mapper-locations: classpath*:com/yourcompany/**/mapper/*.xml
  3. 常见错误 :在聚合模块中使用 classpath:导致启动失败,提示绑定语句找不到。首要检查点就是将此配置改为 classpath*:

相关推荐
用户6757049885026 分钟前
手摸手教你玩 Jenkins,一次搞懂 CI/CD!(第二章:发布之sshPublisher)
后端·jenkins
用户67570498850214 分钟前
手摸手教你玩 Jenkins,一次搞懂 CI/CD!(第一章:部署)
后端·jenkins
一路向北North26 分钟前
Spring Security OAuth2.0(20):完善环境配置
java·后端·spring
从零开始的代码生活_41 分钟前
C++ string 详解:常用接口、字符串算法与深拷贝实现
开发语言·c++·后端·学习·算法
65岁退休Coder1 小时前
LangChain v1.3.4 笔记 - 01 模型的连接/输出、消息、提示词模板
后端
笃行3501 小时前
数据库优化深度科普向|外连接消除底层原理,国产数据库优化器设计思路拆解
后端
苍何2 小时前
耗时 7 天,我们开源了腾讯 WorkBuddy 实战蓝皮书(建议收藏)
前端·后端
青山木2 小时前
Redis 高可用的最后一公里:Cluster 分片、Gossip 与故障转移全流程
数据库·redis·后端·缓存
老孙讲技术2 小时前
巡店系统笔记:listDeviceDetailsByPage 台账 + bindDeviceLive 辅码流最小闭环
后端·物联网
Dong先生3 小时前
Harness vibecoding:从 PRD 到可交付代码的结构化工法
后端