MyBatis核心配置文件详解
MyBatis核心配置文件详解MyBatis 是一款优秀的持久层框架它通过 XML 或注解方式将 Java 对象与 SQL 语句进行映射极大地简化了数据库操作。而 MyBatis 的核心配置文件通常命名为mybatis-config.xml是整个框架的“大脑”它定义了数据源、事务管理、映射文件加载、全局设置等关键信息。本文将从实战角度出发深入解析核心配置文件的各个元素并通过代码示例演示其用法。## 核心配置文件的结构概述MyBatis 核心配置文件是一个 XML 文件其根元素为configuration内部包含多个子元素按顺序排列如下顺序严格不可颠倒configuration├── properties属性├── settings全局设置├── typeAliases类型别名├── typeHandlers类型处理器├── objectFactory对象工厂├── plugins插件├── environments环境配置│ ├── environment单个环境│ │ ├── transactionManager事务管理器│ │ └── dataSource数据源├── databaseIdProvider数据库厂商标识├── mappers映射器下面我们逐一详解每个元素。## 1. properties 元素动态加载外部属性properties元素允许我们在配置文件中使用占位符${}来引用外部属性文件如db.properties或直接在内部定义属性。这有助于实现配置的集中管理和环境切换。### 实战示例加载外部属性文件假设我们有一个db.properties文件propertiesjdbc.drivercom.mysql.cj.jdbc.Driverjdbc.urljdbc:mysql://localhost:3306/mybatis_demo?useSSLfalseserverTimezoneUTCjdbc.usernamerootjdbc.password123456在mybatis-config.xml中引用xml?xml version1.0 encodingUTF-8 ?!DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtdconfiguration !-- 加载外部属性文件 -- properties resourcedb.properties / environments defaultdevelopment environment iddevelopment transactionManager typeJDBC / dataSource typePOOLED !-- 使用占位符引用属性 -- property namedriver value${jdbc.driver} / property nameurl value${jdbc.url} / property nameusername value${jdbc.username} / property namepassword value${jdbc.password} / /dataSource /environment /environments !-- 其他配置... --/configuration注意如果外部文件和内部定义同时存在外部文件优先级更高。也可以直接使用properties的子元素定义属性但推荐使用外部文件实现环境分离。## 2. settings 元素全局行为调优settings元素是 MyBatis 中最复杂的配置元素它影响框架的全局行为。例如开启驼峰命名映射、设置缓存、配置日志实现等。### 常用 settings 项一览表| 设置项 | 描述 | 有效值 | 默认值 ||--------|------|--------|--------||cacheEnabled| 全局开启或关闭所有映射器中的缓存 | true/false | true ||lazyLoadingEnabled| 延迟加载的全局开关 | true/false | false ||aggressiveLazyLoading| 当开启时任何方法的调用都会加载该对象的所有属性 | true/false | false ||mapUnderscoreToCamelCase| 是否开启自动驼峰命名规则映射 | true/false | false ||logImpl| 指定 MyBatis 所用日志的具体实现 | SLF4J, LOG4J2, STDOUT_LOGGING 等 | 未设置 |### 实战示例配置日志和驼峰映射xmlsettings !-- 开启驼峰命名映射例如数据库列 user_name 自动映射到 userName -- setting namemapUnderscoreToCamelCase valuetrue / !-- 使用标准输出日志控制台打印 SQL -- setting namelogImpl valueSTDOUT_LOGGING / !-- 开启二级缓存 -- setting namecacheEnabled valuetrue / !-- 开启延迟加载 -- setting namelazyLoadingEnabled valuetrue //settings实战建议在开发阶段开启STDOUT_LOGGING方便调试生产环境建议使用 Log4j2 等专业日志框架。## 3. typeAliases 元素简化全限定名typeAliases用于给 Java 类型起一个简短的名字这样在映射文件中就不必写完整的包名类名。MyBatis 内置了一些常用类型的别名如string对应java.lang.String。### 实战示例批量扫描包xmltypeAliases !-- 为单个类指定别名 -- typeAlias typecom.example.model.User aliasUser / !-- 批量扫描包默认别名是类名首字母小写如 user -- package namecom.example.model //typeAliases如果使用了package扫描MyBatis 会自动将com.example.model.User的别名设为user。在映射文件中就可以直接使用xmlselect idfindById resultTypeuser SELECT * FROM user WHERE id #{id}/select## 4. environments 元素多环境配置environments允许我们配置多个数据源环境如开发、测试、生产通过default属性指定当前使用的环境。### 实战示例配置开发和生产两个环境xmlenvironments defaultdevelopment !-- 开发环境 -- environment iddevelopment transactionManager typeJDBC / dataSource typePOOLED property namedriver valuecom.mysql.cj.jdbc.Driver / property nameurl valuejdbc:mysql://localhost:3306/dev_db / property nameusername valuedev_user / property namepassword valuedev_pass / /dataSource /environment !-- 生产环境 -- environment idproduction transactionManager typeJDBC / dataSource typePOOLED property namedriver valuecom.mysql.cj.jdbc.Driver / property nameurl valuejdbc:mysql://prod-server:3306/prod_db / property nameusername valueprod_user / property namepassword valueprod_pass / /dataSource /environment/environments注意当使用 Spring 整合 MyBatis 时通常environments配置会被 Spring 的DataSource替代但独立使用 MyBatis 时这是必要的。## 5. mappers 元素注册映射文件mappers用于告诉 MyBatis 去哪里找 SQL 映射文件XML 或注解方式。这是框架能够识别 SQL 语句的关键。### 实战示例多种注册方式xmlmappers !-- 方式1通过类路径注册单个映射文件 -- mapper resourcecom/example/mapper/UserMapper.xml / !-- 方式2通过完全限定资源 URL -- mapper urlfile:///var/mappers/UserMapper.xml / !-- 方式3通过映射器接口全限定名接口与XML在同一包下且同名 -- mapper classcom.example.mapper.UserMapper / !-- 方式4批量扫描包下的所有接口 -- package namecom.example.mapper //mappers实战建议推荐使用package或class方式代码更简洁且与 Spring 整合时更自然。## 6. 完整可运行示例一个简单的 MyBatis 应用下面是一个完整的mybatis-config.xml配置包含一个简单的查询操作。请注意这里省略了数据库和表的创建过程假设存在user表。### 配置文件mybatis-config.xmlxml?xml version1.0 encodingUTF-8 ?!DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtdconfiguration !-- 1. 加载外部数据库属性 -- properties resourcedb.properties / !-- 2. 全局设置 -- settings setting namemapUnderscoreToCamelCase valuetrue / setting namelogImpl valueSTDOUT_LOGGING / /settings !-- 3. 类型别名 -- typeAliases package namecom.example.model / /typeAliases !-- 4. 环境配置开发环境 -- environments defaultdevelopment environment iddevelopment transactionManager typeJDBC / dataSource typePOOLED property namedriver value${jdbc.driver} / property nameurl value${jdbc.url} / property nameusername value${jdbc.username} / property namepassword value${jdbc.password} / /dataSource /environment /environments !-- 5. 注册映射器 -- mappers mapper resourcecom/example/mapper/UserMapper.xml / /mappers/configuration### 映射文件UserMapper.xmlxml?xml version1.0 encodingUTF-8 ?!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespacecom.example.mapper.UserMapper !-- 根据ID查询用户 -- select idselectUser resultTypeUser parameterTypeint SELECT id, user_name, email FROM user WHERE id #{id} /select/mapper### Java 入口代码Main.javajavapackage com.example;import com.example.model.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;public class Main { public static void main(String[] args) throws Exception { // 1. 加载核心配置文件 String resource mybatis-config.xml; InputStream inputStream Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream); // 2. 获取 SqlSession 实例 try (SqlSession session sqlSessionFactory.openSession()) { // 3. 执行查询通过命名空间ID User user session.selectOne(com.example.mapper.UserMapper.selectUser, 1); System.out.println(查询结果: user); } }}运行说明确保db.properties文件存在且数据库连接正确同时User类、UserMapper.xml路径正确。运行后控制台将打印 SQL 语句和查询结果。## 总结MyBatis 核心配置文件是理解和使用框架的基石。本文从properties、settings、typeAliases、environments和mappers五个核心元素入手结合实战代码演示了如何动态加载属性、配置日志、简化别名、管理多环境以及注册映射文件。掌握这些配置后你可以根据项目需求灵活调整 MyBatis 的行为比如切换数据库环境、开启延迟加载、使用日志框架等。在实际开发中建议将配置与代码分离利用properties实现环境隔离并合理使用settings优化性能。希望这篇文章能帮助你快速上手 MyBatis 核心配置为后续的持久层开发打下坚实基础。