MyBatis 常见配置

简介: 本文介绍了MyBatis的核心配置机制,包括属性加载优先级(方法参数 > resource/url > properties元素)、常用配置项如缓存、延迟加载、执行器类型等,并详解了多环境配置方式及事务管理(JDBC与MANAGED)。适用于需掌握MyBatis配置原理的开发者。

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

相关文章
|
监控 C++ Windows
排错实战——使用process explorer替换任务管理器
可以使用 process explorer 替换任务管理器,本文使用 proccess monitor 监控整个过程
|
关系型数据库 Linux 数据库连接
CentOS7下部署开源IT资产管理软件GLPI+FusionInventory
CentOS7下部署开源IT资产管理软件GLPI+FusionInventory
3027 0
CentOS7下部署开源IT资产管理软件GLPI+FusionInventory
|
3月前
|
人工智能 自然语言处理 供应链
零成本无影JVS Claw 7个月畅用指南+手把手教你GeoMind地理情报可视化AI助手改造教程
在AI智能体快速普及的当下,JVS Claw凭借轻量化运行、技能扩展灵活、云端稳定在线等特点,成为许多用户进行自动化办公、信息处理、内容生成的实用工具。但不少用户面临使用时长不足、积分有限、功能无法满足专业场景等问题。本文将详细介绍基于学生认证实现7个月低成本使用无影JVS Claw的完整方法,同时手把手讲解如何通过开源项目GeoMind,将通用JVS Claw改造为专注科研与产业地理情报的可视化智能助手,实现飞书文档解析、实体抽取、产业链关系建模、地理编码、地图可视化等专业能力,让AI工具真正服务于科研分析、产业研究、供应链观测等实际场景。
360 0
|
8月前
|
前端开发 数据可视化
什么是低代码
该界面为低代码平台,支持通过拖拽方式快速生成前端表单页面,提升开发效率。包含可视化操作与组件配置,适用于快速搭建业务表单。参考文档详见附件。
|
6月前
|
人工智能 安全 机器人
2026年OpenClaw(Clawdbot)汉化版零门槛部署全指南 中文用户专属AI助手搭建教程
2026年,OpenClaw(原Clawdbot、Moltbot)以惊人的增长速度席卷开源社区,一周内GitHub星标数从7800飙升至12万+,成为年度最热门的开源项目之一。这款AI工具彻底打破了传统聊天机器人“只说不做”的局限,能够真正执行读写文件、运行脚本、浏览器自动化等实操任务,成为无数用户提升效率的“AI员工”。
2076 1
|
存储 编解码 JSON
解决浏览器存储问题,不得不了解的cookie、localStorage和sessionStorage
该文章详细对比了浏览器存储机制中的cookie、localStorage和sessionStorage的不同之处,以及各自的适用场景。
|
搜索推荐 项目管理 开发工具
odoo是啥
【6月更文挑战第23天】odoo是啥
1352 3
|
网络协议 安全 网络性能优化
HTTP、HTTPS和TCP的特点和三者的区别
TCP提供连接、可靠性、流量和拥塞控制,HTTP基于请求-响应模型且无连接、无状态,HTTPS则通过数字证书确保服务器身份验证和加密通信。
|
存储 JavaScript 定位技术
vue中实现地图与数据表格交互的六种场景(附具体代码示例)
vue中实现地图与数据表格交互的六种场景(附具体代码示例)
566 0
|
存储 Kubernetes 应用服务中间件
Kubernetes Pod
Kubernetes Pod
626 0
Kubernetes Pod

热门文章

最新文章