Mybatis常见配置

简介: 本文介绍MyBatis核心配置,涵盖属性加载优先级(方法参数 > resource/url > properties元素)、常用配置项如缓存、延迟加载、执行器类型,以及多环境配置与事务管理(JDBC/MAAGED),适用于结合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 模块会使用自带的管理器来覆盖前面的配置。这两种事务管理器类型都不需要设置任何属性。

相关文章
|
1天前
|
测试技术
为什么要单元测试
单元测试(Unit Testing)是对软件最小功能单元的正确性验证。通过编写测试用例,确保每个模块按预期运行,提升代码质量与可维护性。它源于编程本质——将复杂问题拆解为原子任务逐一验证,是构建可靠系统的基石。
|
1天前
|
存储 JSON NoSQL
MongoDB常用命令
本文介绍MongoDB数据库操作,包括数据库与集合的创建、删除,文档的增删改查及分页排序查询。以文章评论数据存储为例,详解CRUD操作及注意事项,如_id主键生成、数据类型处理、批量操作异常捕获等,适用于初学者快速掌握MongoDB基本用法。(238字)
MongoDB常用命令
|
1天前
|
存储 缓存 运维
一场FullGC故障排查
本文记录了一次由Full GC引发的CPU使用率过高问题的排查与解决过程。通过分析JVM堆内存,发现大对象(List&lt;Map&gt;)导致内存膨胀,进而频繁触发Full GC。结合JProfiler工具定位到代码中Excel数据加载逻辑存在内存浪费,最终提出优化方案并总结排查思路。
|
1天前
|
消息中间件 监控 Java
RocketMQ:底层Netty频繁OS OOM
本文分析了一起RocketMQ应用因底层Netty频繁申请堆外内存导致OS OOM的问题。根本原因为多个ClassLoader加载了多个Netty的PooledByteBufAllocator实例,各自独立占用堆外内存,绕过JVM的MaxDirectMemorySize限制,最终导致系统内存耗尽。通过Arthas排查发现总占用远超配置,建议短期调小Java堆以腾出空间,并推动中间件优化内存使用。
|
1天前
|
Java Linux 开发工具
Linux
本文介绍如何将一个简单的SpringBoot项目打包并部署到Linux服务器。内容涵盖工程搭建、JAR包打包、JDK安装配置、应用上传与启动,以及通过心跳接口验证服务是否正常运行,适用于Java应用的Linux部署入门学习。
|
1天前
|
Java Linux Docker
Docker
本文介绍Docker基础操作,涵盖镜像打包、容器运行及Dockerfile编写。通过实例演示如何构建Java项目镜像、运行容器并验证服务,适合初学者快速掌握Docker核心技能。
 Docker
|
1天前
|
持续交付
阿里巴巴-云效
本文介绍了如何开通云效服务并进行需求与代码管理。首先访问官网开通服务,接着在需求管理中创建项目、邀请成员,并每日更新状态,切换看板模式更直观。代码管理部分涵盖创建代码库、初始化工程、提交代码及构建自动化流水线,实现一键发布,全流程提升研发效率。
|
1天前
|
前端开发 Java 关系型数据库
[Blog]三层架构:代码本地运行(☆)
简介:本任务旨在帮助新人快速上手SpringBoot项目,掌握本地环境搭建与常见问题解决。需使用SpringBoot、MySQL、Maven等技术,完成代码拉取、运行及BUG修复。主要问题包括JDK/Maven/IDEA版本适配、数据库文件导入、连接配置一致性和前端访问等。通过实践,熟悉开发流程与调试方法,提升独立解决问题能力。(239字)
 [Blog]三层架构:代码本地运行(☆)
|
1天前
|
人工智能 Java 关系型数据库
[舍弃,后续需调整][Blog]JPA实现分页需求(☆☆)
简介:本任务要求在SpringBoot+MySQL环境下,对博客系统实现分页查询功能。需掌握Maven、JPA等技术,建议借助AI工具提效,手动实现约4小时。注意扩充数据库数据以展示分页效果,可基于现有工程改造,重点在于动手实践而非追求标准答案。
|
1天前
|
存储 关系型数据库 MySQL
业务应用场景
传统关系型数据库(如MySQL)难以满足“三高”需求:高并发读写、海量数据高效存取,以及高可扩展性与高可用性,尤其在Web2.0时代面临性能与扩展瓶颈。