第04章 核心配置文件
深入学习 MyBatis 核心配置文件的各项配置
学习进度:16% 代码演示按钮 💻 查看完整代码 - 在线IDE体验
🎯 学习目标
📚
理解核心概念
掌握本章的核心概念和基本原理
🔧
掌握实践技能
学会相关的配置方法和实践技巧
💡
了解应用场景
明确在实际项目中的应用场景和最佳实践
📋 MyBatis 配置文件概述
MyBatis 的核心配置文件(通常命名为 mybatis-config.xml)是整个框架的控制中心,它定义了数据库连接、事务管理、映射器注册等关键信息。
配置文件的基本结构
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties/> <!-- 属性配置 -->
<settings/> <!-- 全局设置 -->
<typeAliases/> <!-- 类型别名 -->
<typeHandlers/> <!-- 类型处理器 -->
<objectFactory/> <!-- 对象工厂 -->
<plugins/> <!-- 插件 -->
<environments/> <!-- 环境配置 -->
<databaseIdProvider/> <!-- 数据库厂商标识 -->
<mappers/> <!-- 映射器 -->
</configuration>
⚠️ 注意:配置元素的顺序必须严格按照上述顺序排列,否则会导致解析错误。
🔧 核心配置元素详解
1. properties(属性配置)
用于定义配置属性,可以在配置文件的其他地方引用这些属性。
<!-- 基本属性配置 -->
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/>
</properties>
<!-- 引用外部属性文件 -->
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
2. settings(全局设置)
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
| 设置名 | 描述 | 有效值 | 默认值 |
|---|---|---|---|
| cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存 | true | false |
| lazyLoadingEnabled | 延迟加载的全局开关 | true | false |
| mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射 | true | false |
| logImpl | 指定 MyBatis 所用日志的具体实现 | SLF4J | LOG4J |
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="LOG4J"/>
<setting name="defaultExecutorType" value="REUSE"/>
</settings>
3. typeAliases(类型别名)
类型别名可为 Java 类型设置一个缩写名字,降低冗余的全限定类名书写。
<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="User" type="com.example.model.User"/>
<!-- 包扫描方式 -->
<package name="com.example.model"/>
</typeAliases>
4. environments(环境配置)
MyBatis 可以配置成适应多种环境,例如开发、测试和生产环境。
<environments default="development">
<!-- 开发环境 -->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<!-- 生产环境 -->
<environment id="production">
<transactionManager type="MANAGED"/>
<dataSource type="JNDI">
<property name="data_source" value="java:comp/env/jdbc/mybatis"/>
</dataSource>
</environment>
</environments>
5. mappers(映射器)
告诉 MyBatis 到哪里去找映射文件。
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<mapper resource="com/example/mapper/UserMapper.xml"/>
<!-- 使用完全限定资源定位符(URL) -->
<mapper url="file:///var/mappers/UserMapper.xml"/>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mapper class="com.example.mapper.UserMapper"/>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<package name="com.example.mapper"/>
</mappers>
🚀 配置示例
基本配置示例
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<package name="com.example.model"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.example.mapper"/>
</mappers>
</configuration>
高级配置示例
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="LOG4J"/>
<setting name="defaultExecutorType" value="REUSE"/>
<setting name="defaultStatementTimeout" value="25"/>
</settings>
<typeAliases>
<typeAlias alias="User" type="com.example.model.User"/>
<typeAlias alias="Order" type="com.example.model.Order"/>
</typeAliases>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
<property name="reasonable" value="true"/>
</plugin>
</plugins>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<property name="poolMaximumActiveConnections" value="20"/>
<property name="poolMaximumIdleConnections" value="5"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.example.mapper"/>
</mappers>
</configuration>
💡 配置最佳实践
- 属性外部化将数据库连接信息等敏感配置放在外部属性文件中,便于不同环境的配置管理。
- 合理使用缓存根据业务需求合理配置一级缓存和二级缓存,提高查询性能。
- 日志配置在开发环境启用详细日志,生产环境使用适当的日志级别。
- 连接池优化根据应用负载合理配置数据库连接池参数。
🔍 常见问题与解决方案
1. 配置文件解析错误
问题:配置元素顺序错误导致解析失败解决:严格按照 DTD 定义的顺序排列配置元素
2. 属性引用失败
问题:${property} 无法正确解析解决:确保属性在 properties 元素中正确定义
3. 映射器注册失败
问题:找不到映射器接口或 XML 文件解决:检查包路径和文件路径是否正确
🎯 实践练习
练习任务
- 创建一个支持开发和生产两种环境的配置文件
- 配置数据库连接池参数
- 启用驼峰命名自动映射
- 配置日志输出
- 注册映射器
💡 本章小结
本章我们深入学习了MyBatis核心配置文件的各个组成部分,包括properties属性配置、settings全局设置、typeAliases类型别名、environments环境配置和mappers映射器注册。掌握这些配置要素是使用MyBatis的基础,合理的配置能够显著提升应用的性能和可维护性。下一章预告:我们将学习MyBatis的SQL映射文件,包括如何编写SQL语句、参数映射、结果映射等核心内容。
下一章节 🎉
恭喜完成本章学习!
你已经掌握了 核心配置文件 的核心知识
第05章
SQL映射文件详解
学习MyBatis的SQL映射文件,掌握SQL语句编写、参数映射、结果映射等核心技能
⏱️ 预计 45 分钟📊 中等难度开始学习 → ← 第03章 📚 课程目录 第05章 →