1.常见配置

简介: 本文介绍MyBatis核心配置,包括属性加载优先级(方法参数 > resource/url > properties元素)、常用配置项如缓存、延迟加载、执行器类型等,以及多环境配置与事务管理机制,适用于结合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 即可。可以接受环境配置的两个方法签名是:

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

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

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

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

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

相关文章
lyL
|
11月前
|
Kubernetes NoSQL 应用服务中间件
物理部署图
物理部署图描述系统运行时的硬件配置与软件部署结构,展现节点、构件、物件及连接关系,帮助开发与运维人员理解分布式系统的部署架构与网络通信。
lyL
407 1
 物理部署图
|
11月前
|
持续交付
阿里巴巴-云效
本文介绍了如何开通云效服务并进行需求与代码管理。首先访问官网开通服务,随后在需求管理中创建项目、邀请成员并跟踪任务,支持看板模式以便直观管理。接着了解代码托管平台的使用,包括创建代码库、初始化工程、提交代码及构建自动化流水线,实现代码的自动部署与发布,重点在于流程体验。
|
人工智能 弹性计算 大数据
和五所高校一起,我们共同打造了一门 AI 课程!
阿里云、超星尔雅协同北京大学、南京大学、复旦大学、上海交通大学、浙江大学五所高校名师,共同推出的 AI 通识公益系列课程「动手学 AI:人工智能通识与实践」将于 9月 1 日面向全国所有高校、所有专业的师生正式开放。
1196 5
|
11月前
|
存储 JSON NoSQL
3-MongoDB常用命令
本文介绍MongoDB数据库操作,包括创建与删除数据库、集合的显式与隐式创建、文档的增删改查、批量操作、分页查询及排序统计等基本CRUD操作,适用于文章评论数据管理。
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry和ESSD等云盘解析:区别、应用场景与选择参考
阿里云服务器提供了包括ESSD Entry、ESSD、SSD云盘、高效云盘等丰富多样的云盘类型,以满足不同用户在不同业务场景下的需求。每种云盘都有其独特的性能特点和适用场景,为了帮助用户更好地理解和选择云盘,本文将详细解析阿里云服务器各个云盘的定义、区别、选择参考以及常见问题。让大家对阿里云服务器不同云盘的性能和适用场景有更全面的了解,尤其是ESSD Entry云盘和ESSD云盘,并能够根据自己的需求做出最适合自己的选择。
|
11月前
|
机器学习/深度学习 人工智能 数据可视化
构建AI智能体:六十四、模型拟合的平衡艺术:深入理解欠拟合与过拟合
机器学习模型训练中存在欠拟合和过拟合两大核心问题。欠拟合指模型过于简单无法捕捉数据规律,表现为训练和测试误差均高;过拟合则是模型过于复杂导致记忆噪声而非规律,表现为训练误差低但测试误差高。解决欠拟合需增加模型复杂度(如多项式回归、决策树)或改进特征工程;解决过拟合则需限制复杂度(如降低树深度)、增加正则化或使用集成方法。MSE是关键的评估指标,良好拟合表现为训练集和测试集MSE均适中且接近。掌握这一平衡艺术是构建泛化能力强、稳健模型的关键。
1515 16
|
10月前
|
存储 人工智能 运维
炎鹊AI:让行业AI能力从“实验室”走向“生产力”的平民化革命
炎鹊AI推出Nexus Agent v1.0架构,以“垂直场景原生+低代码工具链+Agent化部署”重构AI落地路径。通过领域知识蒸馏、可视化编排与轻量化推理,实现AI应用从“专家驱动”到“业务自主”的跨越,降低技术门槛70%,缩短周期至小时级,赋能金融、医疗、制造等21大行业,推动AI真正走向平民化与普惠化。
446 3
|
11月前
|
机器人 Java API
钉钉通知
创建钉钉机器人并设置告警群,通过Webhook获取API地址。使用PostMan测试文本、@指定人及卡片消息发送。编写Java代码调用官方SDK实现消息推送,封装工具类并与Nacos配置中心集成,实现异常日志等场景下的实时告警通知,确保问题及时处理。
|
JSON 安全 算法
从0到1掌握1688API:商品详情获取技巧与避坑指南
1688商品详情API通过商品ID获取商品标题、价格库存、图片视频、SKU等结构化数据,支持字段定制与批发价查询,适用于电商整合与竞品分析。采用RESTful+JSON,需AppKey/Secret签名认证,保障数据实时安全。
|
Go 调度 Python
Golang协程和Python协程用法上的那些“不一样”
本文对比了 Python 和 Go 语言中协程的区别,重点分析了调度机制和执行方式的不同。Go 的协程(goroutine)由运行时自动调度,启动后立即执行;而 Python 协程需通过 await 显式调度,依赖事件循环。文中通过代码示例展示了两种协程的实际运行效果。
520 7