Mybatis三大执行器介绍

news2024/11/26 2:49:15

Mybatis三大执行器介绍

  • Mybatis相关全览
  • 一、执行器介绍
    • 执行器的选择入口
    • 设置执行器两种方式
      • 全局配置(不建议)
      • 局部设置(建议)
  • 二、三个执行器区别
    • SimpleExecutor
    • ReuseExecutor
    • BatchExecutor
    • 总结
  • 三、效率测试
  • 四、平时开发使用

本文用的是3.5.10版本
源码地址:https://github.com/mybatis/mybatis-3/releases
文档地址:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html

Mybatis相关全览

一. Mybatis源码详解
二. Mybatis二级缓存详解
三. Mybatis三大执行器介绍
四. Mybatis拦截器源码详解

一、执行器介绍

在这里插入图片描述

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

  • SimpleExecutor: 默认的执行器, 对每条sql进行预编译->设置参数->执行等操作
  • BatchExecutor: 批量执行器, 对相同sql进行一次预编译, 然后设置参数, 最后统一执行操作
  • ReuseExecutor: 重用执行器会重用预处理语句(prepared statements)

BaseExecutor:只是一个抽象类抽出了三个执行器公共的一些方法,以及提供了需要重写的方法

CachingExecutor:专门用来作为二级缓存使用,不负责具体执行方法

执行器的选择入口

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

在这里插入图片描述

内部会调用DefaultSqlSessionFactory.openSessionFromDataSource

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

在这里插入图片描述

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

在这里插入图片描述

设置执行器两种方式

全局配置(不建议)

在XML配置文件中全局设置

<settings>
    <setting name="defaultExecutorType" value="BATCH" />
</settings>

局部设置(建议)

就是在获取SqlSession的时候传参,指定该SqlSession采用某种执行器执行
在这里插入图片描述

二、三个执行器区别

上述的介绍可能还不是很直观的发现三个执行器的区别,下面开启日志,通过一个例子直观的感受一下区别吧

SimpleExecutor

我们指定采用简单执行器,遍历插入10条数据,看看日志结果:

发现每次插入都伴随了预编译→参数处理→执行 三个步骤

在这里插入图片描述

ReuseExecutor

我们指定重用执行器,同样遍历插入10条数据,看看日志结果:

发现只会有一次预编译,然后就是多次的传参处理和执行

在这里插入图片描述

BatchExecutor

我们指定批量执行器,同样遍历插入10条数据,看看日志结果:

发现只会有一次预编译,多次传参处理,一次执行

在这里插入图片描述

总结

从上述结果可以清晰的看到三种执行器的区别了:就体现在一条语句多次执行在预编译、传参处理和执行的次数上

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

那省了这些步骤到底有多大提升呢?下面我们测试看看

三、效率测试

我们以插入100条数据简单的测试下三种执行器各自需要多长时间

SimpleExecutor:1.7 秒

在这里插入图片描述

ReuseExecutor:1.6 秒
在这里插入图片描述

BatchExecutor:1 秒

在这里插入图片描述

上述测试还会因物理环境、SQL复杂程度变化而变化,结果不一定准,但是主要是为了证明在这种场景下三个执行器的执行效率,从结果上来说ReuseExecutor带来的提升微乎其微,而BatchExecutor在批量删除、更新、插入这种场景下效率还是不错的,可以视场景使用

四、平时开发使用

平时开发都是结合Spring来使用的,直接获取IOC容器中的mapper就来用了,连SqlSession的影子都没看到,可能很多人连SqlSession是个什么东西都不知道,怎么根据SqlSession去设置某执行器?

万变不离其宗,平时在Spring环境中确实不能直接获取到SqlSession,但是我们可以获取SqlSessionFactory啊,通过工厂在获取SqlSession不一样嘛?

源代码如下:

// 从容器中获取SqlSession工厂
@Resource
private SqlSessionFactory sqlSessionFactory;

public void test2(){
    SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
    XxxxMapper mapper = sqlSession.getMapper(XxxxMapper .class);
    //......
    // 批量操作记得手动提交
    sqlSession.commit();
    sqlSession.close();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

老机器摇身一变成局域网下低配服务器,并稳定访问GitHub

老机器摇身一变成局域网下低配服务器&#xff0c;并稳定访问GitHub 搭建场景&#xff1a; 问题背景&#xff1a; 最近用腾讯云服务器访问GitHub经常挂&#xff0c;试了很多解决方案如换host文件ip等办法提速效果都不明显。后来想通过腾讯云服务器实现kexueshangwang&#xff0…

wechaty-puppet-whatsapp的uos协议使用中常见问题

常见问题 常见问题解决基本方案 先检查node版本是否大于16确认npm已经配置好淘宝源存在package-lock.json文件先删除删除node_modules后重新执行npm install 或cnpm install配置文件是否按照要求设置本地网络是否存在限制&#xff0c;是否开启了代理服务本地防火墙是否关闭 我…

智能微型断路器的功能有哪些?和网关搭配的作用在哪?

安科瑞 华楠 ASCB1 系列智能微型断路器是安科瑞电气股份有限公司 全新推出的智慧用电产品&#xff0c;产品由智能微型断路器与智 能网关两部分组成&#xff0c;可用于对用电线路的关键电气因 素&#xff0c;如电压、电流、功率、温度、漏电、能耗等进行实 时监测&#xff0c;具…

[附源码]java毕业设计剧本杀门店管理系统-

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

三种常规用的矢量网络分析仪系统误差校准方法

我们在使用矢量网络分析仪是会发现测量出来的数据有误差&#xff0c;要想矫正&#xff0c;首先我我们要知道矢量网络分析仪的误差来源有哪些?主要有以下三个方面&#xff1a;漂移误差、随机误差、系统误差 1、漂移误差&#xff1a;是由于进行校准之后仪器或测试系统性能发生变…

网络基础--笔记

文章目录一、网络基础1.1 二层交换网络1.1.1 HUB1.1.2 Switch1.1. 3 ARP协议1.1. 4 VLAN IEEE802.1Q协议1.1. 5 链路接口类型1.1. 6 链路聚合模式1.1. 7 链路聚合的类型1.1. 8 STP 生成树协议 &#xff08;Spanning Tree protocol&#xff09; IEEE 802.1D1.2 三层路由网络1.2.…

HDLC协议的特点及功能,让你一看就会

一 HDLC概述 1.1 HDLC的发展历史 高级数据链路控制(High-Level Data Link Control或简称HDLC)&#xff0c;是一个在同步网上传输数据、面向比特的数据链路层协议&#xff0c;它是由国际标准化组织(ISO)根据IBM公司的SDLC(SynchronousData Link Control)协议扩展开发而成的.其最…

[附源码]Python计算机毕业设计《数据库系统原理》在线学习平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

2.1 Vision-Language Pre-Training for Multimodal Aspect-Based Sentiment Analysis

Vision-Language Pre-Training for Multimodal Aspect-Based Sentiment Analysis 1、基本信息 作者&#xff1a;Yan Ling, Jianfei Yu, Rui Xia 会议&#xff1a;ACL 2022 单位&#xff1a;南京理工大学 2、主要框架 任务&#xff1a;Multimodal Aspect-Based Sentiment …

FITC-PEG-N3,Fluorescein-PEG-Azide,荧光素-聚乙二醇-叠氮可用于点击化学

1、名称 英文&#xff1a;Fluorescein-PEG-Azide&#xff0c;FITC-PEG-N3 中文&#xff1a;荧光素-聚乙二醇-叠氮 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Azide PEG Fluorescent PEG 4、分子量&#xff1a;可定制&#xff0c;荧光素-peg 20000-叠氮/Fluoresce…

大数据常见面试题Hadoop篇(3)

前几篇地址&#xff1a; 大数据常见面试题 Hadoop篇&#xff08;1&#xff09;_后季暖的博客-CSDN博客 大数据常见面试题 Hadoop篇&#xff08;2&#xff09;_后季暖的博客-CSDN博客 目录 36.HDFS文件能否直接删除或则修改&#xff1f; 37.谈谈hdfs中的block、package、chu…

java毕业设计——基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码)——蚁群算法路由选择可视化动态模拟

基于javaMMAS的蚁群算法路由选择可视化动态模拟设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于javaMMAS的蚁群算法路由选择可视化动态模拟设计与实现&#xff0c;文章末尾附有本毕业设计的论文和源码下载地址哦。 文章目录&#…

java项目-第143期ssm母婴用品网站_java毕业设计_计算机毕业设计

java项目-第143期ssm母婴用品网站_java毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm母婴用品网站》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、商品信息、论坛信息、新闻资讯 、留言反馈、购物…

Chapter3 Pytorch与机器学习有关函数(二)

目录 3.4 tensor中的填充操作 3.4.1 tensor.full 3.5 pytorch中模型的保存/加载/并行化 3.6 导数、方向导数、偏导数 3.6.1 重要概念 3.6.1.1 概念 3.6.1 如何计算梯度 3.6.2 torch.autograd.Function 3.7 pytorch与nn库 3.7.1 nn库介绍&#xff08;介绍、在后续会详…

干货|爱奇艺短视频多模态分类技术解析

简介 近年来,短视频领域一直广受关注,且发展迅速。每天有大量UGC短视频被生产、分发和消费,为生产系统带来了巨大的压力,其中的难点之一就是为每个短视频快速、准确地打上标签。为了解决人工编辑的时效和积压问题,自动化标签技术成为各大内容领域公司都非常关注的关键课题…

[附源码]java毕业设计流浪宠物免费领养系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Python:突然发现好看壁纸的都在某度图片库了,这还爬什么壁纸网站?

用Python把最大的爬虫爬一遍前言开发环境 & 第三方模块代码展示效果展示最后前言 最近忙着又没更新&#xff0c;这不抽出时间了&#xff0c;赶紧来更新&#xff01; 众所周知&#xff0c;某度本身就是最大的爬虫脚本&#xff0c;那么纯纯的去某个网站找壁纸&#xff0c;还…

mysql 日期函数

想实现增加几个月&#xff0c;或者减少几天 增加时间的函数DATE_ADD // 合同时间增加9个月&#xff1a; DATE_ADD(contract_time,INTERVAL 9 Month) select DATE_ADD(contract_time,INTERVAL 9 Month) from a where id ! "" 减少时间的函数DATE_SUB // 合同时间往…

随机访问文件类

RandomAccessFile类创建的流与前面的输入、输出流不同。RandomAccessFile类既不是输入流类InputStream的子类&#xff0c;也不是输入流类OutputStream的子类。 随机cessfile类创建对象为一。。。流个流流流流既既可以可以&#xff0c;也作源作源作源作源作源作源可以可以作为作…

通过逻辑回归和随机梯度下降法对乳腺癌数据集breastCancer和鸢尾花数据集iris进行线性分类

文章目录线性回归和逻辑回归StandardScaler处理线性分类乳腺癌数据集breastCancer鸢尾花数据集iris线性回归和逻辑回归 线性回归就是预测一个连续变量的值&#xff0c;线性回归假设因变量和自变量之间是线性关系的&#xff0c;线性回归要求因变量是连续性数值变量训练数据的特…