MyBatis

简介: 本文介绍了MyBatis的核心配置机制,包括属性加载优先级(方法参数 > resource/url > properties元素)、常用配置项如缓存、延迟加载、执行器类型等,并详解了多环境配置方式及事务管理(JDBC与MANAGED)。通过SqlSessionFactoryBuilder可指定环境构建工厂,默认使用environments中的default配置。适用于多数据源场景,配合Spring时事务由容器自动管理。

1.前言
mybatis官网Java-api地址:https://mybatis.org/mybatis-3/zh/java-api.html

2.常见配置
如果一个属性不止在一个地方进行配置,那么mybatis将按照下面顺序进行加载
首先读取properties元素体内的属性
然后根据properties元素中的resource属性读取类路径下属性文件,或根据url属性指定的路径读取属性文件,并覆盖之前读取过的同名属性
最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性
因此,优先级顺序:方法参数传递的属性>resource/url属性中配置>properties元素中指定属性
2.1 几个常见配置属性

设置名

描述

有效值

默认值

cacheEnabled

全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。

true | false

true

lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。

true | false

false

useGeneratedKeys

允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。

true | false

False

defaultExecutorType

配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。

SIMPLE REUSE
BATCH

SIMPLE

localCacheScope

MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。

SESSION STATEMENT

SESSION

proxyFactory

指定 Mybatis 创建可延迟加载对象所用到的代理工具。

CGLIB | JAVASSIST

JAVASSIST (3.3 以上)

2.2 多环境配置

多个数据源,就创建多个SqlSessionFactory,每个对应一个数据库

为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:

Java

运行代码复制代码


SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);

如果忽略了环境参数,那么将会加载默认环境,如下所示:

Java

运行代码复制代码


SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties);

environments 元素定义了如何配置环境:

XML

复制代码


<environments default="development">

<environment id="development">

<transactionManager type="JDBC">

<property name="..." value="..."/>

</transactionManager>

<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>

几个关键点:
默认使用的环境 ID(比如:default="development")。
每个 environment 元素定义的环境 ID(比如:id="development")。
事务管理器的配置(比如:type="JDBC")。
数据源的配置(比如:type="POOLED")。
默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。
3 事务管理
1 JDBC
这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域
2 MANAGED
它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
注意:
如果用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。这两种事务管理器类型都不需要设置任何属性。


相关文章
|
3月前
|
敏捷开发 Java 测试技术
为什么要单元测试
本文探讨单元测试如何提升软件开发效率,打破“写单测拖慢进度”的误解。通过解析测试金字塔、谷歌微软实践及常见误区,阐明高质量单元测试对代码质量、维护性和团队协作的深远价值。
为什么要单元测试
|
3月前
|
存储 缓存 NoSQL
|
人工智能 缓存 运维
探秘 AgentRun丨通过无代码创建的 Agent,如何用高代码进行更新?
AgentRun 打破 AI Agent 开发困局,无代码快速验证想法,一键转高代码实现深度定制。60 秒创建 Agent,支持多模型、工具集成与 Prompt 优化;业务增长后可平滑演进,保留配置生成高质量代码,助力从原型到生产的持续迭代。
353 31
|
SQL 安全 前端开发
maccms网站被挂马 根源问题在于SQL注入远程代码漏洞
目前苹果CMS官方在不断的升级补丁,官方最新的漏洞补丁对于目前爆发的新漏洞没有任何效果。更新补丁的用户网站还是会遭受到挂马的攻击,很多客户因此找到我们SINE安全寻求网站安全技术上的支持,针对该漏洞我们有着独特的安全解决方案以及防止挂马攻击的防护,包括一些未公开的maccms POC漏洞都有修复补丁
1143 0
maccms网站被挂马 根源问题在于SQL注入远程代码漏洞
|
5月前
|
人工智能 自然语言处理 算法
数字人|数字人平台推荐与选择指南
数字人企业正引领未来产业变革,像衍科技依托顶尖科研实力,构建全链条技术壁垒,推动虚拟人在多场景落地。从技术突破到商业转化,数字人已迈入价值创造新阶段,重塑行业格局。
|
2月前
|
数据采集 存储 运维
2025年主流接口监控平台对比分析与最佳实践指南
文章围绕2025年接口监控平台展开,对比商业SaaS、开源自建、全栈整合型三种主流方案。分析行业背景、痛点,阐述各方案优劣及适用场景,介绍技术原理与最佳实践路径,还解答常见选型问题,助力企业根据自身情况选择合适方案,保障接口稳定。
|
3月前
|
人工智能 自然语言处理 算法
【MarTech选型】2025年AI获客服务商技术架构横向测评:从链创AI的智能体集群说起
本文横向评测五家主流AI获客服务商技术架构,重点解析链创AI的模块化智能体模式,对比蓝色光标、索象、因赛等数据中台、爆品算法与营销云方案,为CTO及MarTech开发者提供选型参考。
|
3月前
|
人工智能 运维 搜索推荐
2025年度数字人平台推荐榜单揭晓:实力、优势、功能、应用场景、技术等报告呈现
根据2025年最新行业数据及权威榜单分析,国内数字人领域已形成以技术驱动、场景落地为核心的竞争格局,以下推荐5家头部企业及特色厂商,按技术成熟度、场景适配性、行业影响力综合排序:
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
FastRead——AI驱动的智能读写生产力引擎,重构信息处理与内容创作新范式
FastRead是一款智能内容处理工具,基于大模型技术,自动解析网页、文档、音频等多源内容,提取关键信息并生成多模态知识卡片。它重构信息处理流程,提升内容创作效率,适用于新闻、金融、教育、营销等多个场景,助力用户高效获取与输出知识。
FastRead——AI驱动的智能读写生产力引擎,重构信息处理与内容创作新范式
|
机器学习/深度学习 负载均衡 算法
训练Backbone你还用EMA?ViT训练的大杀器EWA升级来袭
训练Backbone你还用EMA?ViT训练的大杀器EWA升级来袭
533 1