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月前
|
消息中间件 存储 安全
RocketMQ 高可用创新论文入选 ACM FSE:无需复制业务数据,实现有状态服务秒级接管
面向云上有状态服务高可用,提出无需额外业务数据复制的秒级故障接管机制,在不牺牲成本和稳态性能的前提下,实现云上有状态消息服务的快速恢复。
300 16
|
3月前
|
自然语言处理 安全 API
通义千问大模型完整解析:核心能力、性能优势、行业落地与官方定价全解读
大模型技术正在深度重构各行各业的生产模式,从日常办公辅助、代码开发、内容创作,到企业业务流程改造、智能客服、法律文档处理、工业质检,大模型的应用边界持续拓宽。通义千问作为阿里云自研的通用大模型体系,拥有完整的模型矩阵,覆盖旗舰大参数模型、均衡通用模型、轻量极速模型、多模态视觉音频模型、代码专项模型,同时对外开放标准化API接口,支持个人开发者、中小企业、大型政企客户不同层级的业务需求。很多开发者与企业在选型的时候,会困惑不同模型版本之间的能力差异,不清楚各项功能的适用边界,对计费定价、订阅套餐、落地适配方案缺少完整认知。本文将从核心功能、性能优势、各行业落地场景、官方定价体系几个维度展开讲解,
6123 1
|
3月前
|
安全 开发工具 数据库
没有公网 IP,如何用 Cloudflare Tunnel 安全发布家庭服务器服务
没有公网 IP 时,用 Cloudflare Tunnel 把家庭服务器的 Web 服务安全发布到公网,并给出连接边界、安全门槛与 502 排查顺序。
475 1
|
3月前
|
存储 运维 安全
医疗内网纵深防御安全体系实战方案
本文剖析医疗内网“终端失控、边界模糊、数据泄露”三大痛点,结合等保2.0与《数据安全法》要求,提出以身份为核心、数据为资产的纵深防御方案:涵盖网络准入控制、终端全生命周期管理、安全数据交换、外设精细化管控等闭环措施,兼顾业务连续性与合规达标。
|
3月前
|
数据采集 人工智能 弹性计算
2026 企业GEO全域落地白皮书:阿里云环境下AI知识库搭建全方案
2026《企业GEO全域落地白皮书》聚焦阿里云+通义千问生态,系统提出AI知识库四层闭环架构:从结构化内容生产、OSS/ECS/CDN云端部署,到通义百炼采信优化与全周期监测,30天可落地、可验收、可迭代,助力企业抢占AI对话入口,构建长效数字品牌资产。
399 1
|
3月前
|
人工智能 Kubernetes Cloud Native
AI内容引用机制解析:从数据特征到结构化改造的4个关键动作
本文基于Princeton研究与570+次实测,揭示AI引用内容的底层逻辑:结构化表达(问题-答案分层)、数据溯源(标注来源/版本/测试条件)和可信度建设(权威标准+确定性表述)是三大关键。实证表明,规范改造可使引用率提升6倍以上。
391 2
|
人工智能 缓存 运维
探秘 AgentRun丨通过无代码创建的 Agent,如何用高代码进行更新?
AgentRun 打破 AI Agent 开发困局,无代码快速验证想法,一键转高代码实现深度定制。60 秒创建 Agent,支持多模型、工具集成与 Prompt 优化;业务增长后可平滑演进,保留配置生成高质量代码,助力从原型到生产的持续迭代。
639 31
|
11月前
|
敏捷开发 Dubbo Java
需求开发人日评估
本文介绍敏捷开发中工时评估的关键方法——人日估算。涵盖开发、自测、联调、测试及发布各阶段的时间分配,并提供常见需求如Excel导入导出、单表增删改查、跨服务调用等的参考人日,助力团队科学规划迭代周期。(238字)
 需求开发人日评估
|
5月前
|
缓存 人工智能 NoSQL
大模型调用太贵?阿里云Tair语义缓存公测:命中即省
大模型成本黑洞在Output Token!Qwen/GPT-4o等模型输出Token价格是输入的4–6倍,且Prompt Cache无法复用。阿里云Tair AI Gateway推出语义缓存,通过向量检索识别语义相同请求,命中率最高达59.84%,F1准确率0.89,毫秒级返回,降本超47%。
694 0
|
人工智能 自然语言处理 搜索推荐
AI 搜索 MCP 最佳实践
本文介绍了如何通过 MCP 协议,快速调用阿里云 OpenSearch 、ElasticSearch 等工具,帮助企业快速集成工具链、降低开发复杂度、提升业务效率。
894 1