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 核心配置为后续的持久层开发打下坚实基础。

相关新闻

Neon Pageserver Storage Shard 扩容分析

Neon Pageserver Storage Shard 扩容分析

Neon pageserver 的"扩容"通过 Storage Shard 机制实现。这不是传统意义上对单个 pageserver 水平扩展,而是两层扩容策略:1. Tenant Sharding(分片) —将租户数据打散到多个 pageserver 节点上 2. Node Scale-out&#…

2026/7/23 15:17:14 阅读更多 →
Kimi K3 vs Fable 5 最新资讯

Kimi K3 vs Fable 5 最新资讯

最近AI圈两大顶级模型持续上演对标大戏,国产开源代表Kimi K3、海外闭源标杆Fable 5,短短几天接连爆出重磅消息,不管是做开发、AI内容创作、本地部署,还是选择API服务,这些动态直接影响选型。今天把两边最新事件一次性梳…

2026/7/23 15:17:14 阅读更多 →
AI如何学习知识?与人类学习的本质差异

AI如何学习知识?与人类学习的本质差异

如今,AI已深度融入生活,能识字作画、解题编程、对话答疑,看似拥有和人类相似的学习能力。但事实上,AI的“学习”与人类的学习只是表象相似,底层逻辑、认知方式、成长逻辑有着天壤之别。AI的学习是算法驱动的数据拟合&a…

2026/7/23 15:16:14 阅读更多 →

最新新闻

校园二手交易平台设计与实现

校园二手交易平台设计与实现

摘 要 在高校校园内,学生们的学习与生活需求不断变化,校园二手交易平台的诞生恰逢其时。一方面,学生常面临学业更迭,像毕业、升学等,会产生大量闲置物品亟待处理。另一方面,大家消费观念日趋理性&#x…

2026/7/23 15:30:18 阅读更多 →
2026年GEO优化全解析:生成式引擎优化如何重构企业流量与品牌护城河

2026年GEO优化全解析:生成式引擎优化如何重构企业流量与品牌护城河

搜索范式转移,GEO成企业必选项用户行为正在从“Search(搜索)”向“Ask(提问)”迁移。据相关数据显示,超60%的用户开始习惯通过AI对话获取决策信息。在这一背景下,GEO(Generative Eng…

2026/7/23 15:30:18 阅读更多 →
AI Agent开发指南:从原理到实战应用

AI Agent开发指南:从原理到实战应用

1. AI Agent(智能体)的本质与核心特征 AI Agent(人工智能智能体)是一种能够自主感知环境、制定决策并执行任务的智能系统。与传统的程序不同,AI Agent具备三个关键特征: 自主性 :无需人工干预…

2026/7/23 15:30:18 阅读更多 →
【2026最新】1000道互联网大厂 Java 工程师面试题(附答案),高频考点全汇总,面试必刷!

【2026最新】1000道互联网大厂 Java 工程师面试题(附答案),高频考点全汇总,面试必刷!

眼看着"金九银十"也快到来了,很多小伙伴都蠢蠢欲动想要刚给自己涨一波薪资;面试作为涨薪最直接最有效的方式,我们需要花费巨大的精力和时间来准备。除了自身的技术积累之外,掌握一定的面试技巧和熟悉最常见的面试题&…

2026/7/23 15:30:18 阅读更多 →
Django计算机毕设之基于 Django 的卡牌收藏者线上交易与资源分享平台 数字化卡牌藏品管理与智能推荐系统(完整前后端 代码+说明文档+LW,调试定制等)

Django计算机毕设之基于 Django 的卡牌收藏者线上交易与资源分享平台 数字化卡牌藏品管理与智能推荐系统(完整前后端 代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/23 15:30:18 阅读更多 →
2026 上海注册公司代账机构甄选指南|金税四期合规避坑 + 本土优质机构实测榜单

2026 上海注册公司代账机构甄选指南|金税四期合规避坑 + 本土优质机构实测榜单

2026 年,上海工商财税监管体系持续升级,金税四期智能风控、全电发票常态化监管、税务信用分级、工商地址动态核查、账务电子化归档等合规要求全面落地。对上海中小微企业、个体工商户、初创电商及科创企业而言,代理记账已经不再是简单的 “记…

2026/7/23 15:29:18 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻