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 模块会使用自带的管理器来覆盖前面的配置。这两种事务管理器类型都不需要设置任何属性。


相关文章
|
1月前
|
自然语言处理 安全 API
通义千问大模型完整解析:核心能力、性能优势、行业落地与官方定价全解读
大模型技术正在深度重构各行各业的生产模式,从日常办公辅助、代码开发、内容创作,到企业业务流程改造、智能客服、法律文档处理、工业质检,大模型的应用边界持续拓宽。通义千问作为阿里云自研的通用大模型体系,拥有完整的模型矩阵,覆盖旗舰大参数模型、均衡通用模型、轻量极速模型、多模态视觉音频模型、代码专项模型,同时对外开放标准化API接口,支持个人开发者、中小企业、大型政企客户不同层级的业务需求。很多开发者与企业在选型的时候,会困惑不同模型版本之间的能力差异,不清楚各项功能的适用边界,对计费定价、订阅套餐、落地适配方案缺少完整认知。本文将从核心功能、性能优势、各行业落地场景、官方定价体系几个维度展开讲解,
5780 1
|
1月前
|
安全 开发工具 数据库
没有公网 IP,如何用 Cloudflare Tunnel 安全发布家庭服务器服务
没有公网 IP 时,用 Cloudflare Tunnel 把家庭服务器的 Web 服务安全发布到公网,并给出连接边界、安全门槛与 502 排查顺序。
250 1
|
1月前
|
存储 运维 安全
医疗内网纵深防御安全体系实战方案
本文剖析医疗内网“终端失控、边界模糊、数据泄露”三大痛点,结合等保2.0与《数据安全法》要求,提出以身份为核心、数据为资产的纵深防御方案:涵盖网络准入控制、终端全生命周期管理、安全数据交换、外设精细化管控等闭环措施,兼顾业务连续性与合规达标。
|
1月前
|
数据采集 人工智能 弹性计算
2026 企业GEO全域落地白皮书:阿里云环境下AI知识库搭建全方案
2026《企业GEO全域落地白皮书》聚焦阿里云+通义千问生态,系统提出AI知识库四层闭环架构:从结构化内容生产、OSS/ECS/CDN云端部署,到通义百炼采信优化与全周期监测,30天可落地、可验收、可迭代,助力企业抢占AI对话入口,构建长效数字品牌资产。
258 1
|
1月前
|
人工智能 Kubernetes Cloud Native
AI内容引用机制解析:从数据特征到结构化改造的4个关键动作
本文基于Princeton研究与570+次实测,揭示AI引用内容的底层逻辑:结构化表达(问题-答案分层)、数据溯源(标注来源/版本/测试条件)和可信度建设(权威标准+确定性表述)是三大关键。实证表明,规范改造可使引用率提升6倍以上。
234 2
|
人工智能 缓存 运维
探秘 AgentRun丨通过无代码创建的 Agent,如何用高代码进行更新?
AgentRun 打破 AI Agent 开发困局,无代码快速验证想法,一键转高代码实现深度定制。60 秒创建 Agent,支持多模型、工具集成与 Prompt 优化;业务增长后可平滑演进,保留配置生成高质量代码,助力从原型到生产的持续迭代。
590 31
|
9月前
|
敏捷开发 Dubbo Java
需求开发人日评估
本文介绍敏捷开发中工时评估的关键方法——人日估算。涵盖开发、自测、联调、测试及发布各阶段的时间分配,并提供常见需求如Excel导入导出、单表增删改查、跨服务调用等的参考人日,助力团队科学规划迭代周期。(238字)
 需求开发人日评估
|
3月前
|
存储 人工智能 自然语言处理
数字化转型赋能GEO(生成式引擎优化)全链路实践指南
本文系统阐述生成式引擎优化(GEO)与数字化转型的深度协同:以GEO五层架构为骨架、四标融合为治理准绳,从数据、流程、组织、技术四维推动企业构建AI可信数字资产,实现从“被搜索”到“被引用”的价值跃迁。(239字)
|
5月前
|
负载均衡 搜索推荐 应用服务中间件
#Nginx教程 Nginx作为目前最流行的高性能Web服务器和反向代理服务器,凭借其高并发、低内存消耗的特点,被广泛应用于各类生产环境。本文将从零开始,带你快速掌握Nginx的核心配置与实战技巧。
本教程详解Nginx安装、核心配置、反向代理、负载均衡与HTTPS部署,并内嵌标准JSON-LD结构化数据(Article/BreadcrumbList/WebPage等),助力SEO优化与搜索富摘要展现,提升点击率。
469 2
|
SQL 容灾 关系型数据库
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
1168 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍