目录

1、执行器介绍

  • 执行器的选择入口

  • 设置执行器两种方式

    • 全局配置(不建议)

    • 局部设置(建议)

2、三个执行器区别

  • SimpleExecutor

  • ReuseExecutor

  • BatchExecutor

  • 总结

3、效率测试

4、平时开发使用

一、执行器介绍

Mybatis中执行器关系如上图所示,真正生效并在最后执行中有着不同效果的只有三个执行器:

  • SimpleExecutor: 默认的执行器, 对每条sql进行预编译->设置参数->执行等操作

  • ReuseExecutor: 重用执行器会重用预处理语句(prepared statements)

  • BatchExecutor: 批量执行器, 对相同sql进行一次预编译, 然后设置参数, 最后统一执行操作

1、执行器的选择入口

执行器的选择就在获取SqlSession的时候

内部会调用DefaultSqlSessionFactory.openSessionFromDataSource:

可以会根据ExecutorType来选择获取某种类型执行器,我们平时不会传参,所以默认就是SimpleExecutor

ExecutorType有三种类型,正好与三种执行器对应

2、设置执行器两种方式

a、全局配置(不建议)

在XML配置文件中全局设置

b、局部设置(建议)

就是在获取SqlSession的时候传参,指定该SqlSession采用某种执行器执行

二、三个执行器区别

1、SimpleExecutor(默认执行器)

特点:

  • 每次执行 SQL 都会创建一个新的 Statement 对象,执行完毕后立即关闭。

  • 简单直接,但频繁创建和销毁 Statement 可能影响性能。

  • SimpleExecutor: 多次预编译、多次传参处理、多次执行

适用场景:

  • 常规单条 SQL 执行。

  • 不需要复用 Statement 或批量操作的场景。

代码示例:

2、ReuseExecutor(可重用执行器)

特点:

  • 缓存同一个 SQL 对应的 Statement 对象,避免重复创建。

  • 以 SQL 语句为 Key 缓存 Statement,同一会话(SqlSession)内相同 SQL 可复用。statementMap.put(sql, stmt);

  • 性能优于 SimpleExecutor(减少创建 Statement 的开销)

  • ReuseExecutor: 一次预编译、多次传参处理、多次执行

注意事项:

  • 在事务提交或回滚时,会自动关闭缓存的 Statement。

  • 不适用于多线程环境(SqlSession 非线程安全)

适用场景:

  • 同一会话中多次执行相同 SQL

代码示例:

3、BatchExecutor(批量执行器)

特点:

  • 将多个 UPDATE/INSERT/DELETE 操作批量提交,减少数据库交互次数。

  • 通过 addBatch() 缓存操作,调用 flushStatements() 时一次性提交。

  • 对 SELECT 无效,SELECT 会立即执行。

  • BatchExecutor: 一次预编译、多次传参处、一次执行

注意事项:

  • 需手动调用 flushStatements() 或通过事务提交触发批量执行。

  • 需结合事务管理,避免部分失败导致数据不一致。

适用场景:

  • 批量插入、更新或删除操作(如导入数据)

代码示例:

Mybatis三大执行器的更多相关文章

  1. SSM(SpringMVC+Spring+MyBatis)三大框架使用Maven快速搭建整合(实现数据库数据到页面进行展示)

    本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...

  2. JavaWeb_(SpringMVC框架)测试SpringMVC&Spring&MyBatis三大整合

    搭建 SpringMVC&Spring&MyBatis三大整合 传送门 1.准备 测试搭建S pringMVC&Spring&MyBatis三大整合 用例   a)准备 ...

  3. MyBatis中执行器Executor框架

    与JDK提供的Executor框架类似,MyBatis也提供了一套Executor框架,具体如下图: 其为Mybatis提供与数据库交互的功能,是一个典型的装饰器模式的应用--对JDBC功能的封装,同 ...

  4. JAVA 框架 / SSM / SSM SPRING+SPING MVC + MYBATIS 三大框架整合详细步骤

    http://how2j.cn/k/ssm/ssm-tutorial/1137.html

  5. SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)

    之前整理了一下新版本的 SSM 三大框架,这篇文章是关于它的整合过程和项目源码,版本号分别为:Spring 5.2.2.RELEASE.SpringMVC 5.2.2.RELEASE.MyBatis ...

  6. Mybatis执行器源码手记

    今天将Mybatis的执行器部分做一下简单手记. 一.java原生JDBC 众所周知,Mybatis是一个半自动化ORM框架.其实说白了,就是将java的rt.jar的JDBC操作进行了适度的封装.所 ...

  7. MyBatis执行器

    Mybatis的执行器 下面先展示一张图,用来说明一下Mybatis执行器的整体架构 SimpleExecutor 首先SimpleExecutor是我们最常使用的一个执行器,无论我们执行什么方法默认 ...

  8. 使用Redis做MyBatis的二级缓存

    使用Redis做MyBatis的二级缓存 通常为了减轻数据库的压力,我们会引入缓存.在Dao查询数据库之前,先去缓存中找是否有要找的数据,如果有则用缓存中的数据即可,就不用查询数据库了. 如果没有才去 ...

  9. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

    作者博客:http://blog.csdn.net/u010349169/article/category/2309433 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简 ...

  10. 深入浅出mybatis之缓存机制

    目录 前言 准备工作 MyBatis默认缓存设置 缓存实现原理分析 参数localCacheScope控制的缓存策略 参数cacheEnabled控制的缓存策略 总结 前言 提到缓存,我们都会不约而同 ...

随机推荐

  1. 浅说 c++20 coroutine

    浅说cppcoro 上一篇<浅说c/c++ coroutine>介绍了stackful协程,举了win32 Fiber跟tencent/libco为例. 本篇https://www.cnb ...

  2. 计算今天是该年的第几天(c语言实现)

    遇到一个有意思的编程题,使用C语言实现计算今天是该年的第几天. 实现代码如下: #include<stdio.h> int d[12]={31,28,31,30,31,30,31,31,3 ...

  3. LESLIE NOTE ——你的笔记只属于你自己

    LESLIE NOTE 网站:http://www.leslienote.com 简介: [只有数据可控,才是最放心的] [只有多多备份,才是最安全的] LESLIE NOTE 是一款本地笔记软件, ...

  4. C++:随机数生成

    C++中生成随机数:需要用到的函数,一个是rand(),该函数只返回一个伪随机数.生成随机数之前必须先调用srand()函数. 生成随机数 #include iostream; #include ct ...

  5. [Java] Solon 框架的三大核心组件之一插件扩展体系

    1.Solon 的三大核心组件 核心组件 说明 Plugin 插件扩展机制 提供"编码风格"的扩展体系 Ioc/Aop 应用容器 提供基于注入依赖的自动装配体系 Context+H ...

  6. 闲话 717 - LGV 引理的小应用

    这是我们的某一天的联考题目: \(n\le 500\). 显然使用平面图完美匹配计数可以获得 \(O(n^6)\),但是有一种神秘的对路径的双射.当时我们都认为这是超级人类智慧,但是今天看书发现是书上 ...

  7. Hive explain执行计划详解

    简介:HIVE提供了EXPLAIN命令来展示一个查询的执行计划,这个执行计划对于我们了解底层原理,hive 调优,排查数据倾斜等很有帮助 一.EXPLAIN 参数介绍 语法 : EXPLAIN [EX ...

  8. Java中int、Integer、long、Long、double、Double和BigInteger的关系

    Java中int.Integer.long.Long.double.Double和BigInteger的关系 在Java中,int.Integer.long.Long.double.Double和Bi ...

  9. C#下.NET配置文件的使用(1)

    原文链接:https://blog.csdn.net/dbzhang800/article/details/7212420 System.Configuration 命名空间中的东西是为读写应用程序的 ...

  10. 松下机器人示教器AUR01062触摸无反维修

    Panasonic松下机器人示教器AUR01062触摸无反应解决方案 松下机器人示教器现象:触摸屏幕时鼠标箭头无任何动作,没有发生位置改变. 原因:造成此现象产生的原因很多,下面就松下机器人维修中示教 ...