一、整体结构概览
MyBatis 的核心配置文件(通常命名为 mybatis-config.xml
)是 MyBatis 框架的 “总开关”,用于全局配置 MyBatis 的运行环境、类型别名、插件、数据库连接等。
顶层结构(必须严格按顺序配置)
<configuration>
<properties/> <!-- 加载外部属性文件(如数据库连接信息) -->
<settings/> <!-- 全局设置(如缓存、日志、映射规则) -->
<typeAliases/> <!-- 类型别名(简化类全限定名) -->
<typeHandlers/> <!-- 类型处理器(Java 类型与数据库类型转换) -->
<objectFactory/> <!-- 对象工厂(创建结果对象的规则) -->
<plugins/> <!-- 插件(扩展 MyBatis 功能,如分页) -->
<environments/> <!-- 环境配置(多环境支持,如开发、生产) -->
<databaseIdProvider/> <!-- 数据库厂商标识(多数据库适配) -->
<mappers/> <!-- 映射器(加载 SQL 映射文件或接口) -->
</configuration>
关键规则:
- 标签必须严格按上述顺序配置(MyBatis 强制要求)。
- 每个标签都是可选的,可根据项目需求灵活使用。
二、各标签详细解析
1. <properties>
(属性)
- 作用:加载外部属性文件(如
db.properties
),实现 配置解耦(避免硬编码数据库连接信息)。 - 示例:
<properties resource="db.properties"/>
db.properties
文件内容:jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test jdbc.username=root jdbc.password=123456
- 优势:
- 可在
<environments>
中直接引用${jdbc.url}
等变量。 - 支持多环境切换(如开发、测试环境用不同的
db.properties
)。
- 可在
2. <settings>
(设置)
- 作用:全局配置 MyBatis 的行为,影响框架的 缓存、日志、延迟加载 等核心功能。
- 常用配置(按需开启):
<settings> <!-- 开启二级缓存(默认开启) --> <setting name="cacheEnabled" value="true"/> <!-- 开启延迟加载(处理关联查询) --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 日志实现(如使用 Log4j2) --> <setting name="logImpl" value="LOG4J2"/> <!-- 开启驼峰命名映射(如数据库字段 user_name → Java 属性 userName) --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
注意:
这些设置会全局影响 MyBatis 的运行,需根据项目需求调整(如mapUnderscoreToCamelCase
对字段命名不规范的老项目可能不适用)
3. <typeAliases>
(类型别名)
- 作用:为 Java 类定义 简短别名,简化 SQL 映射文件中的类全限定名。
- 两种配置方式:
- 方式 1:单个类定义别名
<typeAliases> <!-- 为 com.itheima.pojo.User 定义别名为 User --> <typeAlias type="com.itheima.pojo.User" alias="User"/> </typeAliases>
方式 2:批量扫描包(推荐)
<typeAliases>
<!-- 扫描 com.itheima.pojo 包下的所有类,别名为类名(首字母小写或大写都可) -->
<package name="com.itheima.pojo"/>
</typeAliases>
例如:com.itheima.pojo.User
可直接用 User
作为别名
- 优势:
减少 SQL 映射文件中类名的冗余(尤其适合类全限定名较长的场景)。
4.<environments>
(环境配置)
-
- 作用:配置 多套运行环境(如开发环境、生产环境),支持快速切换。
<environments default="dev"> <!-- 开发环境 --> <environment id="dev"> <!-- 事务管理器:JDBC(基于本地事务)或 MANAGED(交给容器管理) --> <transactionManager type="JDBC"/> <!-- 数据源:UNPOOLED(不使用连接池)、POOLED(使用连接池)、JNDI(容器数据源) --> <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> <!-- 生产环境 --> <environment id="prod"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${prod.jdbc.driver}"/> <property name="url" value="${prod.jdbc.url}"/> <property name="username" value="${prod.jdbc.username}"/> <property name="password" value="${prod.jdbc.password}"/> </dataSource> </environment> </environments>
- 关键配置:
default="dev"
:指定默认使用的环境(dev
或prod
)。transactionManager
:控制事务提交 / 回滚。dataSource
:配置数据库连接池(建议使用POOLED
提升性能)。
- 作用:配置 多套运行环境(如开发环境、生产环境),支持快速切换。