在src/main/resources下创建mybatis/**/*Mapper.xml模板

本文介绍了一个使用MyBatis框架配置SQL查询语句的示例。通过XML文件定义了名为getTest的选择器,其返回类型为java.util.Map,并执行了一个针对TB_TEST表的全字段查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用于撰写mybatis执行sql的语句
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.frame.mapper.DemoMapper"> <select id="getTest" resultType="java.util.Map"> SELECT * FROM TB_TEST </select> </mapper>

<think>我们正在讨论MyBatis配置中的`mapper-locations`属性。根据引用内容,这个属性用于指定MyBatis的映射文件XML文件)的位置。下面我将逐步解释其含义和作用。 ###1. **配置项的作用**`mybatis.mapper-locations`(或`mybatis-plus.mapper-locations`)用于**告诉MyBatis框架去哪里加载SQL映射文件MapperXML文件)**。这些XML文件中定义了SQL语句、结果映射、缓存配置等。###2.**配置语法解析** 以`mybatis.mapper-locations=classpath*:mapper/**/*.xml`为例:- **`classpath*:`**前缀`classpath*:`表示**扫描所有类路径(包括JAR文件)**下的匹配资源[^4]。>注意:`classpath*:`与`classpath:`的区别:>- `classpath:`:只扫描第一个匹配的类路径(通常项目`resources`目录)> -`classpath*:`:扫描所有类路径(解决多模块、依赖JAR中的资源加载问题)- **`mapper/**/*.xml`**这是Ant风格路径匹配模式:- `mapper/`:表示基础目录-`**`:递归匹配任意子目录- `*.xml`:匹配所有XML文件综合含义:**在所有类路径中递归扫描`mapper`目录及其子目录下的所有XML文件**。 ###3. **典型应用场景**#### (1)标准项目结构``` src/main/resources├── mapper│├── UserMapper.xml│└── OrderMapper.xml```配置为:`classpath:mapper/*.xml`(单模块)或`classpath*:mapper/**/*.xml`(多模块)#### (2)多模块项目子模块中的XML文件需被主模块加载时: ```yamlmybatis-plus:mapper-locations:-"classpath*:com/module1/mapper/**/*.xml"-"classpath*:com/module2/mapper/**/*.xml"```###4. **常见错误与解决方案** |错误场景|原因|解决方案| |-----------------------------------|--------------------------|------------------------------------------| |IDEA本地运行正常,服务器启动失败|未使用`classpath*:`|添加`*`确保扫描所有类路径[^4]| |`Invalid boundstatement`|XML文件未被扫描到|检查路径是否匹配或使用`classpath*:`[^2]| |XML与接口绑定失败|接口方法名与XML id不一致 |确保XML中`<select id="methodName">`匹配|###5.**最佳实践建议** 1. **统一路径规范**推荐将XML文件放在`resources/mapper`目录下,配置:```yamlmybatis.mapper-locations: classpath*:mapper/**/*.xml``` 2. **多模块项目配置**主启动模块配置扫描所有子模块的Mapper路径:```yamlmybatis-plus:mapper-locations:- "classpath*:com/example/moduleA/**/*.xml"- "classpath*:com/example/moduleB/**/*.xml"``` 3. **调试技巧**启动时查看日志确认加载的XML文件:```logParsingmapper file:file [mapper/UserMapper.xml]```>关键结论:`mapper-locations`是MyBatis/MyBatis-Plus加载SQL映射文件的核心配置,正确使用`classpath*:`和Ant路径匹配可避免资源加载问题[^1][^3][^4]。§§相关问题§§1.MyBatis如何将Mapper接口与XML文件进行绑定? 2.除了`mapper-locations`,MyBatis还有哪些关键配置项? 3.如何解决MyBatis的`Invalidbound statement`错误?</think>### MyBatis配置中`mapper-locations`的作用及含义详解 #### 1. **核心作用** `mybatis.mapper-locations`是MyBatis/MyBatis-Plus的核心配置项,用于**指定SQL映射文件XML文件)的加载路径**。这些XML文件包含: - SQL语句定义(SELECT/INSERT/UPDATE/DELETE) - 结果集映射配置(ResultMap) - 动态SQL逻辑 - 缓存配置等[^1] #### 2. **配置语法解析** 以`mybatis.mapper-locations=classpath*:mapper/**/*.xml`为例: - **`classpath*:`** 特殊前缀,表示**扫描所有类路径**(包括JAR包内的资源),而不仅仅是当前模块的`resources`目录。这是多模块项目的关键配置[^4]。 ```yaml # 正确示例(带星号) mybatis-plus: mapper-locations: "classpath*:/mapper/**/*.xml" ``` - **`mapper/**/*.xml`** Ant风格路径匹配模式: - `mapper/`:基础目录 - `**`:递归匹配任意子目录 - `*.xml`:匹配所有XML文件 ⇒ **含义:递归扫描所有类路径下`mapper`目录及其子目录中的所有XML文件** #### 3. **常见配置场景对比** | 配置示例 | 适用场景 | 风险提示 | |-----------------------------------|-----------------------------------|-----------------------------| | `classpath:mapper/*.xml` | 单模块项目 | 无法扫描JAR包中的XML | | `classpath*:mapper/**/*.xml` | 多模块项目(推荐) | 无 | | `classpath*:com/xxx/**/*Mapper.xml`| XML文件Java代码同包 | 需确保Maven资源过滤配置正确[^3] | #### 4. **常见错误及解决方案** - **服务器报错但本地正常** 原因:未使用`classpath*:`导致服务器部署时扫描不全 解决:添加`*`前缀[^4] ```diff - mapper-locations: classpath:mapper/*.xml + mapper-locations: classpath*:mapper/**/*.xml ``` - **`Invalid bound statement`错误** 原因:XML文件未被加载或与Mapper接口绑定失败 解决: 1. 检查路径是否包含接口所在包名[^2] 2. 确保XML文件名与接口名一致(如`UserMapper.xml`对应`UserMapper.java`) 3. 验证SQL语句的`id`是否与接口方法名一致 - **XML在源码包但未被扫描** 解决:显式配置源码包路径[^3] ```yaml mybatis: mapper-locations: - "classpath*:com/example/**/*Mapper.xml" - "classpath*:mapper/*.xml" ``` #### 5. **与其他配置的协作** ```yaml mybatis-plus: mapper-locations: "classpath*:mapper/**/*.xml" # XML文件位置 type-aliases-package: com.example.entity # 实体类包扫描 configuration: map-underscore-to-camel-case: true # 字段下划线转驼峰 ``` #### 6. **最佳实践建议** 1. **多模块项目必用`classpath*:`** ```yaml # 安全配置 mapper-locations: "classpath*:*/mapper/**/*.xml" ``` 2. **分层目录结构示例** ``` src/main/resources ├── mapper │ ├── user │ │ ├── UserMapper.xml │ ├── order │ │ ├── OrderMapper.xml ``` 3. **日志验证配置生效** 启动时检查日志: ```log Loading mapper file: file [mapper/user/UserMapper.xml] ``` > 关键结论:`mapper-locations`是MyBatis加载SQL映射文件的**核心路径配置**,正确使用`classpath*:`和通配符可解决多环境资源加载问题[^1][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值