高级java每日一道面试题-2024年9月24日-框架篇[Mybatis篇]-mybatis有哪些执行器(Executor)?

如果有遗漏,评论区告诉我进行补充

面试官: mybatis有哪些执行器(Executor)?

我回答:

在 MyBatis 中,Executor 执行器是核心组件之一,负责处理与数据库的交互。MyBatis 提供了几种不同类型的执行器,每种执行器都有其特定的行为和用途。以下是 MyBatis 中主要的几种执行器类型及其详细说明:

1. SimpleExecutor(简单执行器)

  • 特点:这是默认的执行器类型。每次执行 SQL 语句时,都会创建一个新的 PreparedStatement 对象,并且不会复用。执行完毕后,会立即关闭Statement对象。这种执行器不支持事务,适用于简单的查询场景。
  • 适用场景:适用于简单的 CRUD 操作,不需要复杂的事务管理和缓存机制。
  • 优点
    • 简单易用。
    • 不需要额外的配置。
  • 缺点
    • 性能较低,因为每次执行 SQL 都会创建新的 PreparedStatement
    • 不适合频繁的数据库操作。

2. ReuseExecutor(重用执行器)

  • 特点:ReuseExecutor会重用预编译的Statement对象。它会将Statement对象缓存在Map中,以SQL语句为key。当需要执行相同的SQL语句时,会直接使用缓存中的Statement对象,而不是每次都创建新的对象。这种执行器同样不支持事务。
  • 适用场景:适用于重复执行相同 SQL 语句的情况。
  • 优点
    • 减少了 PreparedStatement 的创建次数,提高了性能。
    • 适用于执行大量相同 SQL 语句的场景。
  • 缺点
    • 缓存 PreparedStatement 可能会导致内存占用增加。
    • 如果 SQL 语句中包含动态参数,可能无法正确地重用 PreparedStatement

3. BatchExecutor(批处理执行器)

  • 特点:BatchExecutor用于批量操作数据库,可以一次执行多个SQL语句。它会将相同类型的SQL语句分组,并使用JDBC的批处理功能执行。这种执行器可以显著提高性能,特别适用于需要执行大量相同类型SQL语句的场景,如批量插入或更新操作。(注意: 只能执行批量更新、删除和新增操作)
  • 适用场景:适用于批量插入或更新数据的场景。
  • 优点
    • 大幅提高批量操作的性能。
    • 减少网络 I/O 和数据库连接的开销。
  • 缺点
    • 单个事务中的数据量可能会变得非常大,导致数据库压力增加。
    • 如果事务失败,所有累积的操作都需要回滚,这可能会比较耗时。

4. CachingExecutor(缓存执行器)

  • 特点:这种执行器不是直接与数据库交互的执行器,而是在其他执行器的基础上添加了一层缓存机制。它可以缓存查询结果,从而避免重复查询数据库。
  • 适用场景:适用于读多写少的场景,特别是当数据不经常变化时。
  • 优点
    • 提高查询性能,减少对数据库的压力。
    • 支持多种缓存策略,如 LRU、FIFO 等。
  • 缺点
    • 需要额外的配置和管理。
    • 如果数据频繁变化,缓存可能会导致数据不一致的问题。

如何选择执行器

  • 默认选择:如果你没有特别的需求,通常建议使用 SimpleExecutor,因为它是最简单且最稳定的执行器。
  • 性能优化:如果你的应用中有大量的重复 SQL 语句,可以考虑使用 ReuseExecutor 来提高性能。
  • 批量操作:如果你有大量的插入或更新操作,可以使用 BatchExecutor 来提高批量操作的性能。
  • 缓存需求:如果你希望减少对数据库的查询次数,可以使用 CachingExecutor 来实现查询结果的缓存。

配置示例

  • 全局配置:可以在MyBatis的全局配置文件(如mybatis-config.xml)中通过<settings>标签的defaultExecutorType属性来全局设置默认的执行器类型。
  • 会话级配置:在获取SqlSession时,也可以指定使用哪种执行器。如果使用的是批量执行器,并且开启了自动提交事务,需要手动提交事务才能使批量操作生效。
    你可以在 MyBatis 的配置文件中指定执行器类型。例如:
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!-- 数据源配置 --></dataSource></environment></environments><settings><setting name="defaultExecutorType" value="REUSE"/> <!-- 设置默认执行器类型为 REUSE --></settings>
</configuration>

注意事项

  • 当选择批量执行器时,需要注意手动提交事务,即使在获取SqlSession时设置了自动提交事务。
  • 缓存的使用可以提高性能,但也可能导致数据不一致的问题,特别是在高并发场景下。因此,需要根据具体的应用场景和需求来配置和管理缓存。

综上所述,MyBatis的执行器是MyBatis框架中用于执行SQL语句和映射结果到Java对象的重要组件。了解不同类型的执行器及其特点和使用场景,对于优化MyBatis的性能和应对不同的业务需求至关重要。

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

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

相关文章

如何借助Java批量操作Excel文件?

最新技术资源&#xff08;建议收藏&#xff09; https://www.grapecity.com.cn/resources/ 前言 | 问题背景 在操作Excel的场景中&#xff0c;通常会有一些针对Excel的批量操作&#xff0c;批量的意思一般有两种&#xff1a; 对批量的Excel文件进行操作。如导入多个Excel文件…

工业制造场景中的设备管理深度解析

在工业制造的广阔领域中&#xff0c;设备管理涵盖多个关键方面&#xff0c;对企业的高效生产和稳定运营起着举足轻重的作用。 一、设备运行管理 1.设备状态监测 实时监控设备的运行状态是确保生产顺利进行的重要环节。通过传感器和数据采集系统等先进技术&#xff0c;获取设备…

最详细的AI产品经理学习路径|精确到天

&#x1f48c;最近很多想转行AI产品经理的小伙伴问我&#xff0c;AI产品经理到底要学哪些东西呢&#xff1f; ⏩这里&#xff0c;我整理了一份详细的AI产品经理学习路径&#xff0c;大家只要按照思维导图&#xff0c;进行学习就可以了 &#x1f48e;整个学习框架和体系是精心…

GESP等级考试C++二级-while语句

while语句用于循环执行某些语句。 1 while语句格式 while语句的格式如图1所示。 图1 while语句的格式 当while后面跟的条件是true时&#xff0c;则执行尖括号内的操作&#xff0c;执行完成之后&#xff0c;如果条件依然是true&#xff0c;则继续执行尖括号内的操作&#xff…

FortiOS SSL VPN 用户访问权限配置

简介 使用不同用户组或用户登录 SSL VPN 隧道模式后&#xff0c;可配置不同的访问权限。 本文介绍为不同用户组分配不同访问权限的配置方法。 相关组件 FortiGate&#xff1a;FortiOS v6.4.14 build2093 (GA) 客户端&#xff1a;Windows11&#xff0c;安装 FortiClient VPN 7.…

vscode下pnpm命令执行不了

今天使用pnpm install 报错&#xff0c;信息如下&#xff1a; 解决方法 一、安装pnpm 用cmd执行命令 npm install pnpm -g 二、用powershell 以管理员身份运行 执行命令 set-ExecutionPolicy RemoteSigned 回到vscode执行 pnpm install已经可以执行了

3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展

3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展 1 官网下载最新3D Slicer image computing platform | 3D Slicer 版本5.7 2 安装torch依赖包&#xff1a; 2.1 进入安装目录C:\Users\wangzhenlin\AppData\Local\slicer.org\Slicer 5.7.0-2024-09-21\bin&#xff0…

UE4_Niagara基础实例—使用自定义参数

实现的功能&#xff1a;使用自定义的参数来调整粒子远离发射器后粒子大小的变化 效果图&#xff1a; 操作步骤&#xff1a; 1、创建Niagara系统&#xff0c;使用Simple Sprite Burst模板作为新系统的发射器&#xff0c;更名为NS_Custompara。 2、双击打开Niagara系统编辑界面…

闰年判断-C语言

1.问题&#xff1a; 判断某一年是否是闰年。 2.解答&#xff1a; 闰年是公历中的名词&#xff0c;分为普通闰年和世纪闰年&#xff0c;普通闰年:公历年份是4的倍数的&#xff0c;且不是100的倍数&#xff0c;为普通闰年&#xff1b;世纪闰年:公历年份是整百数的&#xff0c;必…

5个被低估的Huggingface工具

Hugging Face Hub 拥有超过 85 万个公共模型&#xff0c;每月新增约 5 万个模型&#xff0c;而且这个数字似乎还在不断攀升。我们还提供企业中心订阅&#xff0c;可解锁合规性、安全性和治理功能&#xff0c;以及推理端点上的额外计算能力&#xff0c;用于生产级推理&#xff0…

Vue 自定义指令实现权限控制

一. 引言 Vue.js 提供了一种简单、灵活的方式来创建交互式的用户界面。在 Vue.js 中&#xff0c;指令是一种特殊的属性&#xff0c;可以附加到 HTML 元素上以执行一些操作。我们可以使用自定义指令来实现各种功能&#xff0c;比如&#xff1a;权限控制、自动聚焦、拖动指令等等…

网安加·百家讲坛 | 刘寅:人工智能(AI)是解决软件工程问题的“银子弹”吗?

作者简介&#xff1a;刘寅&#xff0c;东南大学电子工程系本、硕&#xff0c;南京大学EMBA&#xff0c;PMP&#xff0c;前科大讯飞技术副总经理&#xff0c;曾就职于中兴通讯、摩托罗拉、趋势科技、初速度等国内、国际名企&#xff0c;多次负责过质量体系从0到1的搭建&#xff…

【研赛A题成品论文】24华为杯数学建模研赛A题成品论文+可运行代码丨免费分享

2024华为杯研究生数学建模竞赛A题精品成品论文已出&#xff01; A题 风电场有功功率优化分配 一、问题分析 A题是一道工程建模与优化类问题&#xff0c;其目的是根据题目所给的附件数据资料分析风机主轴及塔架疲劳损伤程度&#xff0c;以及建立优化模型求解最优有功功率分配…

「JVS更新日志」智能BI、低代码、逻辑引擎9.25功能更新说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

【C++掌中宝】用最少的话让你全方位理解内联函数

文章目录 引言1. 什么是内联函数2. 工作原理3. 内联函数的编程风格4. 使用限制5. 内联函数与宏的比较6. 优缺点7. 何时使用内联函数8. 补充9. 总结结语 引言 在C编程中&#xff0c;函数的调用开销是程序运行效率的一个重要影响因素。为了解决频繁调用函数时的性能问题&#xf…

人工智能助力阿尔茨海默症治疗:微软与上海精神卫生中心的新研究

最近&#xff0c;微软研究院与上海市精神卫生中心合作&#xff0c;基于微软 Azure OpenAI 服务中的多模态大模型&#xff0c;开发了一种名为“忆我”&#xff08;ReMe&#xff09;的个性化认知训练框架。这一创新项目旨在通过数字化手段扩展自动化认知训练的范围&#xff0c;为…

如何瞬间建造一个百亿商品的网上商城?借助API,无需逐个上传商品数据,自动对接电商平台百亿商品数据

在快速发展的电商时代&#xff0c;构建一个拥有百亿级商品数据的网上商城曾是许多企业遥不可及的梦想。然而&#xff0c;随着技术的不断进步&#xff0c;特别是电商平台API接口的广泛应用&#xff0c;这一梦想正逐渐变为现实。本文将详细介绍如何通过调用电商平台API接口&#…

用AI绘画年入百万?揭秘高效起始号与现变路径...

part.1 AI绘画的优势 AI绘画的魅力在于其高效和灵活 无论你是通过Midjourney还是Stable Diffusion&#xff0c;只需输入简单的提示词&#xff0c;再加上一些额外的控制调整&#xff0c;AI绘画就能快速生成各种创意内容。角色IP设计、游戏原画、3D场景甚至是天马行空的创意都…

扫雷老年版2.0无猜模式

扫雷老年版2.0无猜模式 打破记录5秒&#xff0c;到达4秒。

Skywalking告警配置

背景 skywalking 9.7.0&#xff0c;地址&#xff1a;Backend setup | Apache SkyWalking helm&#xff1a;skywalking-helm:4.5.0&#xff0c;地址&#xff1a;skywalking-helm/chart/skywalking/values.yaml at v4.5.0 首先来说一下为什么使用skywalking告警&#xff1f; …