MyBatis核心配置详解
2025/9/17大约 6 分钟
MyBatis核心配置详解
前置知识
在开始本教程之前,建议您已经完成:
- MyBatis基础入门教程
- 了解基本的XML配置语法
- 熟悉Java类型系统
核心配置文件结构
MyBatis的核心配置文件中的标签必须按照固定的顺序,虽然有些标签可以不写,但顺序一定不能乱:
configuration
├── properties
├── settings
├── typeAliases
├── typeHandlers
├── objectFactory
├── objectWrapperFactory
├── reflectorFactory
├── plugins
├── environments
├── databaseIdProvider
└── mappers
Properties 配置
引入外部属性文件
可以通过properties标签引入外部属性文件,然后使用${属性名}
的方式访问属性值:
<!-- 引入properties文件 -->
<properties resource="jdbc.properties"></properties>
创建 jdbc.properties
文件:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
内联属性定义
也可以在properties标签内直接定义属性:
<properties>
<property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="123456"/>
</properties>
Settings 配置
settings标签用于配置MyBatis的全局设置,影响MyBatis的运行行为:
<settings>
<!-- 将表中字段的下划线自动转换为驼峰 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 设置积极的延迟加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 设置日志实现 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
常用设置说明
设置名 | 说明 | 默认值 |
---|---|---|
mapUnderscoreToCamelCase | 开启驼峰命名转换 | false |
lazyLoadingEnabled | 开启延迟加载 | false |
aggressiveLazyLoading | 积极的延迟加载 | true |
cacheEnabled | 开启二级缓存 | true |
logImpl | 指定日志实现 | 无 |
TypeAliases 配置
单个类型别名
为单个类设置别名:
<typeAliases>
<!-- 设置某个具体的类型的别名 -->
<typeAlias type="com.example.mybatis.bean.User" alias="user"/>
</typeAliases>
包级别别名
以包为单位,设置该包下所有的类型都拥有默认的别名(类名且不区分大小写):
<typeAliases>
<!-- 以包为单位,设置该包下所有的类型都拥有默认的别名 -->
<package name="com.example.mybatis.bean"/>
</typeAliases>
MyBatis内置类型别名
MyBatis为常用的Java类型提供了内置别名:
内置类型别名列表
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
Environments 配置
多环境配置
可以配置多个数据库环境,通过default属性指定默认环境:
<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>
<!-- 测试环境 -->
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
事务管理器
MyBatis支持两种事务管理器:
- JDBC:直接使用JDBC的提交和回滚功能,依赖从数据源获得的连接来管理事务作用域
- MANAGED:从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期
<transactionManager type="JDBC"/>
数据源类型
MyBatis支持三种数据源类型:
- POOLED:使用数据库连接池,会将创建的连接进行缓存
- UNPOOLED:不使用数据库连接池,每次使用连接都需要重新创建
- JNDI:调用上下文中的数据源
<dataSource type="POOLED">
<!-- 数据源配置 -->
</dataSource>
Mappers 配置
单个映射文件
<mappers>
<!-- 引入单个映射文件 -->
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
包级别映射
以包为单位,将包下所有的映射文件引入核心配置文件:
<mappers>
<!-- 以包为单位,将包下所有的映射文件引入核心配置文件 -->
<package name="com.example.mybatis.mapper"/>
</mappers>
包级别映射注意事项
使用包级别映射时,必须保证:
- mapper接口和mapper映射文件必须在相同的包下
- mapper接口要和mapper映射文件的名字一致
类级别映射
<mappers>
<!-- 使用类名引入映射 -->
<mapper class="com.example.mybatis.mapper.UserMapper"/>
</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文件 -->
<properties resource="jdbc.properties"></properties>
<!-- 全局设置 -->
<settings>
<!-- 将表中字段的下划线自动转换为驼峰 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 设置积极的延迟加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!-- 类型别名 -->
<typeAliases>
<!-- 以包为单位,设置该包下所有的类型都拥有默认的别名 -->
<package name="com.example.mybatis.bean"/>
</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>
<!-- 以包为单位,将包下所有的映射文件引入核心配置文件 -->
<package name="com.example.mybatis.mapper"/>
</mappers>
</configuration>
配置最佳实践
1. 使用外部属性文件
将数据库连接信息等敏感配置放在外部属性文件中:
# jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
2. 开启驼峰命名转换
<setting name="mapUnderscoreToCamelCase" value="true"/>
这样可以将数据库字段名 user_name
自动映射到Java属性 userName
。
3. 合理使用类型别名
对于常用的实体类,建议使用包级别别名:
<typeAliases>
<package name="com.example.mybatis.bean"/>
</typeAliases>
4. 多环境配置
在开发、测试、生产环境中使用不同的配置:
<environments default="development">
<environment id="development">
<!-- 开发环境配置 -->
</environment>
<environment id="test">
<!-- 测试环境配置 -->
</environment>
<environment id="production">
<!-- 生产环境配置 -->
</environment>
</environments>
配置验证
创建配置验证工具类
package com.example.mybatis.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MyBatisConfigValidator {
public static boolean validateConfig(String configPath) {
try {
InputStream is = Resources.getResourceAsStream(configPath);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
return factory != null;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public static void main(String[] args) {
boolean isValid = validateConfig("mybatis-config.xml");
System.out.println("配置文件是否有效: " + isValid);
}
}
总结
本教程详细介绍了MyBatis核心配置文件的各个部分,包括:
- ✅ Properties配置:外部属性文件引入和内联属性定义
- ✅ Settings配置:全局设置和常用配置项
- ✅ TypeAliases配置:类型别名设置和内置别名
- ✅ Environments配置:多环境配置和事务管理
- ✅ Mappers配置:映射文件的多种引入方式
- ✅ 最佳实践:配置优化和验证方法
下一步学习
- 学习MyBatis的增删改查操作
- 了解参数传递的多种方式
- 掌握查询功能的实现
在下一篇文章中,我们将学习MyBatis的增删改查操作,包括基础的CRUD操作、参数传递方式和各种查询功能。