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


相关文章
|
2月前
|
存储 人工智能 运维
从“看得见”到“自己治”:畅捷通可观测与智能运维实践
畅捷通基于阿里云云监控 2.0 与 STAROps 推进智能运维改造,通过五层一体化可观测体系与 UModel 运维数字孪生构建数据底座,叠加智能巡检、故障自愈与容量预测三大 AI 场景闭环,使运维模式实现由"以人为主"向"AI 为主、人工审核"的范式转换。
255 16
|
2月前
|
自然语言处理 安全 API
通义千问大模型完整解析:核心能力、性能优势、行业落地与官方定价全解读
大模型技术正在深度重构各行各业的生产模式,从日常办公辅助、代码开发、内容创作,到企业业务流程改造、智能客服、法律文档处理、工业质检,大模型的应用边界持续拓宽。通义千问作为阿里云自研的通用大模型体系,拥有完整的模型矩阵,覆盖旗舰大参数模型、均衡通用模型、轻量极速模型、多模态视觉音频模型、代码专项模型,同时对外开放标准化API接口,支持个人开发者、中小企业、大型政企客户不同层级的业务需求。很多开发者与企业在选型的时候,会困惑不同模型版本之间的能力差异,不清楚各项功能的适用边界,对计费定价、订阅套餐、落地适配方案缺少完整认知。本文将从核心功能、性能优势、各行业落地场景、官方定价体系几个维度展开讲解,
5932 1
|
2月前
|
安全 开发工具 数据库
没有公网 IP,如何用 Cloudflare Tunnel 安全发布家庭服务器服务
没有公网 IP 时,用 Cloudflare Tunnel 把家庭服务器的 Web 服务安全发布到公网,并给出连接边界、安全门槛与 502 排查顺序。
385 1
|
2月前
|
机器学习/深度学习 人工智能 缓存
如何用 Agent Skill 构建一套可编辑、可验证的 AI 视频生产流水线
Timeline Studio 是开源AI视频编辑系统,支持从自然语言需求出发,自动完成素材分析、剪辑决策、时间线修改、浏览器端本地AI推理(Whisper/VITS等)及成片+可编辑`.timeline`工程双重交付,实现专业级自动化视频生产。
|
2月前
|
存储 弹性计算 安全
阿里云飞天:自研分布式云操作系统,飞天将一个个数据中心变成一台超级计算机!
飞天是阿里云自研超大规模云计算操作系统,以“数据中心为计算机”为核心理念,聚合算力、统一调度百万级服务器,提供EB级存储、300万IOPS、12个9数据可靠性等极致性能与高可用能力;融合CIPU芯片架构,强化安全、网络与IO加速,支撑弹性计算、数据库、大数据、AI等全栈云服务。
296 0
|
人工智能 缓存 运维
探秘 AgentRun丨通过无代码创建的 Agent,如何用高代码进行更新?
AgentRun 打破 AI Agent 开发困局,无代码快速验证想法,一键转高代码实现深度定制。60 秒创建 Agent,支持多模型、工具集成与 Prompt 优化;业务增长后可平滑演进,保留配置生成高质量代码,助力从原型到生产的持续迭代。
613 31
|
10月前
|
敏捷开发 Dubbo Java
需求开发人日评估
本文介绍敏捷开发中工时评估的关键方法——人日估算。涵盖开发、自测、联调、测试及发布各阶段的时间分配,并提供常见需求如Excel导入导出、单表增删改查、跨服务调用等的参考人日,助力团队科学规划迭代周期。(238字)
 需求开发人日评估
|
4月前
|
人工智能 运维 NoSQL
国内首发|AI Native, Now——阿里云正式发布MongoDB 8.3版本
阿里云MongoDB 8.3将向量检索、Auto-Embedding、智能运维三大能力深度集成至数据库引擎,告别外挂式AI方案。数据不搬家、能力不拼装、架构做减法,真正实现检索原生、向量化原生、运维原生。
|
12月前
|
存储 SQL 安全
全球数据安全新范式:阿里云DAS+DTS为企业打造合规出海“护航舰”
阿里云DAS与DTS推出覆盖数据跨境、实时脱敏、加密保护、合规审计的一站式安全解决方案,助力企业高效应对全球合规风险。