MyBatis 配置文件核心
MyBatis 配置文件核心标签解析
以下是针对你的笔记中的三个核心标签的详细解析,帮助你全面理解它们的用途和配置逻辑。
1. properties
标签:动态加载外部配置
功能
- 将环境相关的配置(如数据库连接、密钥等)与 MyBatis 核心配置解耦。
- 允许在多个环境中(开发、测试、生产)快速切换配置。
属性
属性名 | 用途 | 示例 |
---|---|---|
resource | 从类路径加载配置文件 | resource="jdbc.properties" |
url | 从文件系统或网络路径加载 | url="file:///C:/config/jdbc.properties" |
配置示例
<!-- mybatis-config.xml --> <configuration> <!-- 加载外部配置文件 --> <properties resource="jdbc.properties" /> <environments default="dev"> <environment id="dev"> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> </configuration>
外部配置文件内容 (jdbc.properties
)
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC jdbc.username=root jdbc.password=123456
易错点
- ❌ 路径错误:
resource
指向的文件不在resources
目录中。 - ❌ 未转义特殊字符:
&
需要用&
转义(如 Redis 配置中的&timeout=1000
)。
2. settings
标签:全局行为控制
功能
- 控制 MyBatis 的底层运行机制,如日志、缓存、驼峰映射等。
- 需严格按照官方文档配置参数和值类型。
常用配置项
设置名称(name) | 作用 | 默认值 |
---|---|---|
mapUnderscoreToCamelCase | 数据库下划线字段(user_name )自动映射到 Java 驼峰属性(userName ) | false |
cacheEnabled | 是否开启二级缓存 | true |
logImpl | 指定日志框架实现(SLF4J、Log4J2 等) | 无默认 |
配置示例
<configuration> <settings> <!-- 开启驼峰自动映射 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 配置日志实现 --> <setting name="logImpl" value="SLF4J"/> </settings> </configuration>
使用场景
- 场景 1:数据库字段为
user_name
,Java 类属性为userName
→ 需设置mapUnderscoreToCamelCase=true
,否则需手动映射。 - 场景 2:需要精细化控制缓存 → 调整
cacheEnabled
并配合@CacheNamespace
注解。
3. typeAliases
标签:简化类名引用
功能
- 为 Java 类型定义短别名,避免在 XML 中反复写全类名。
子标签示例
-
子标签 1:
typeAlias
(单个类定义别名)<typeAliases> <!-- alias="user" 可自定义别名 --> <typeAlias type="com.example.entity.User" alias="user" /> </typeAliases>
-
子标签 2:
package
(批量扫描包)<typeAliases> <!-- 自动注册包下的所有类,默认别名 = 类名的小写形式(如 User → user) --> <package name="com.example.entity"/> </typeAliases>
覆盖默认别名
通过 @Alias
注解自定义别名:
package com.example.entity; @Alias("employee") public class User { // ... }
整体配置示例
<!-- mybatis-config.xml --> <configuration> <!-- 加载外部配置 --> <properties resource="config/jdbc.properties" /> <!-- 全局设置 --> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!-- 别名定义 --> <typeAliases> <package name="com.example.entity"/> </typeAliases> <!-- 环境配置 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 映射器注册 --> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>
总结与思考
- 灵活性:
properties
让配置适应不同环境,settings
调试框架行为,typeAliases
提升代码简洁性。 - 典型错误:配置文件路径错误、别名未被扫描到、setter/getter 缺失导致属性映射失败。
- 附加学习:结合
@Alias
注解和ResultMap
处理复杂映射场景。
需要通过实际项目练习这些配置的使用,才能深刻理解每个标签的“边界”(何时必须用,何时可省略)。例如:当你的实体类名和数据库表字段已经严格符合驼峰规则时,可能不需要开启 mapUnderscoreToCamelCase
。