🔍 MyBatis 全局配置详解:核心配置文件深度解析与最佳实践
文章目录
🧠 一、全局配置:MyBatis 的"控制中心"
💡 mybatis-config.xml 的作用
全局配置文件是 MyBatis 的指挥中心,它决定了:
- 数据库连接管理方式
- SQL 执行行为
- 对象映射规则
- 缓存策略
- 插件扩展机制
📜 配置文件结构全景
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
<!-- 属性配置 -->
<properties resource="db.properties"/>
<!-- 全局设置 -->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 类型别名 -->
<typeAliases>
<package name="com.example.entity"/>
</typeAliases>
<!-- 多环境配置 -->
<environments default="dev">
<environment id="dev">...</environment>
<environment id="prod">...</environment>
</environments>
<!-- 映射器注册 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
🌍 二、多环境配置:environments 详解
💡 环境切换原理
⚙️ 完整配置示例
<environments default="dev">
<!-- 开发环境 -->
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dev_db"/>
<property name="username" value="root"/>
<property name="password" value="dev123"/>
</dataSource>
</environment>
<!-- 生产环境 -->
<environment id="prod">
<transactionManager type="JDBC"/>
<dataSource type="JNDI">
<property name="data_source" value="java:comp/env/jdbc/prodDS"/>
</dataSource>
</environment>
</environments>
🔍 核心组件解析
1.事务管理器(transactionManager)
- JDBC:使用JDBC事务(默认)
- MANAGED:容器管理事务(如WebLogic)
2.数据源(dataSource)
| 类型 | 特点 | 适用场景 |
|---|---|---|
| UNPOOLED | 每次请求新建连接 | 测试环境 |
| POOLED | 连接池管理(默认) | 生产环境 |
| JNDI | 容器提供连接池 | 企业级应用 |
🔑 三、灵活属性管理:properties 实战
💡 属性加载优先级
⚡ 实战配置示例
db.properties 文件:
# 数据库配置
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_demo
jdbc.username=root
jdbc.password=123456
XML 引用配置:
<properties resource="db.properties">
<!-- 覆盖外部属性 -->
<property name="jdbc.username" value="admin"/>
</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>
⚙️ 四、核心行为定制:settings 全解析
💡 配置项全景图

🔥 十大关键配置详解
| 配置项 | 可选值 | 默认值 | 作用 |
|---|---|---|---|
| cacheEnabled | true/false | true | 二级缓存开关 |
| lazyLoadingEnabled | true/false | false | 延迟加载开关 |
| mapUnderscoreToCamelCase | true/false | false | 下划线转驼峰 |
| logImpl | SLF4J/LOG4J2 | 无 | 指定日志实现 |
| defaultExecutorType | SIMPLE/REUSE/BATCH | SIMPLE | 执行器类型 |
| jdbcTypeForNull | NULL/VARCHAR | OTHER | 空值处理 |
| localCacheScope | SESSION/STATEMENT | SESSION | 一级缓存范围 |
| autoMappingBehavior | FULL/PARTIAL/NONE | PARTIAL | 自动映射级别 |
| aggressiveLazyLoading | true/false | false | 侵略性延迟加载 |
| callSettersOnNulls | true/false | false | 空值调用setter |
⚡ 企业级配置模板
<settings>
<!-- 日志实现 -->
<setting name="logImpl" value="SLF4J"/>
<!-- 映射行为 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="autoMappingBehavior" value="FULL"/>
<!-- 缓存配置 -->
<setting name="cacheEnabled" value="true"/>
<setting name="localCacheScope" value="STATEMENT"/>
<!-- 执行器优化 -->
<setting name="defaultExecutorType" value="BATCH"/>
<!-- 空值处理 -->
<setting name="callSettersOnNulls" value="true"/>
</settings>
🏷️ 五、类型处理:typeAliases & typeHandlers
💡 类型别名(typeAliases)
作用:简化冗长的类名引用
配置方式:
<!-- 单个别名 -->
<typeAliases>
<typeAlias alias="User" type="com.example.entity.User"/>
</typeAliases>
<!-- 包扫描(推荐) -->
<typeAliases>
<package name="com.example.entity"/>
</typeAliases>
使用效果:
<!-- 简化前 -->
<select resultType="com.example.entity.User">
<!-- 简化后 -->
<select resultType="User">
🔧 类型处理器(typeHandlers)
作用:处理Java类型与数据库类型的转换
内置处理器:
| Java类型 | 数据库类型 | 处理器 |
|---|---|---|
| String | VARCHAR | StringTypeHandler |
| Integer | INT | IntegerTypeHandler |
| Date | TIMESTAMP | DateTypeHandler |
自定义示例:
// 枚举类型处理器
public class StatusHandler extends BaseTypeHandler<Status> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i,
Status status, JdbcType jdbcType) {
ps.setInt(i, status.getCode());
}
@Override
public Status getNullableResult(ResultSet rs, String col) {
return Status.fromCode(rs.getInt(col));
}
}
注册自定义处理器:
<typeHandlers>
<typeHandler handler="com.example.handler.StatusHandler"/>
</typeHandlers>
💎 六、配置策略与最佳实践
💡 环境配置策略
🛡️ 安全配置建议
1.密码加密:
<!-- 使用加密后的密码 -->
<property name="password" value="${jdbc.password}"/>
2.最小权限原则:数据库账号只授予必要权限
3.配置文件隔离:生产环境配置单独管理
⚡ 性能优化配置
<settings>
<!-- 关闭侵略性延迟加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 减少一级缓存范围 -->
<setting name="localCacheScope" value="STATEMENT"/>
<!-- 批量操作优化 -->
<setting name="defaultExecutorType" value="BATCH"/>
</settings>
🔍 配置加载流程全景
🔚 总结与延伸
📚 配置要点回顾
- environments:多环境支持是基础
- properties:解耦配置与代码
- settings:性能调优的关键
- typeAliases:提升可读性
- typeHandlers:处理特殊类型转换

788

被折叠的 条评论
为什么被折叠?



