大厂面试题:两道来自京东的关于MyBatis执行器的面试题

大家好,我是王有志。

今天给大家带来两道来自于京东关于的 MyBatis 面试题:

  • MyBatis 提供了哪些执行器(Executor)?它们有什么区别?
  • Mybatis 中如何指定 Executor 的类型?

MyBatis 提供了哪些执行器(Executor)?它们有什么区别?

MyBatis 提供的 Executor

严格意义上 MyBatis 中提供了 4 种 Executor:

image

其中具有执行 SQL 语句能力的是继承自 BaseExecutor 的 3 种 Executor:

  • SimpleExecutor,最基础的 Executor,每次执行 SQL 语句时都会创建 Statement 实例对象,完成 SQL 语句的执行后关闭 Statement 实例对象,无任何性能上的优化
  • ReuseExecutor,提供复用 Statement 能力的 Executor,ReuseExecutor 会将 Statement 缓存到 Map<String, Statement> 实例对象中,其中 key 是 String 类型的 SQL 语句,而 value 是 SQL 语句的 Statement 对象,这样避免了频繁创建和销毁 Statement 带来的性能损耗
  • BatchExecutor,提供了批量处理 Statement 的能力,在执行 update 语句时,将所有的 Statement 对象添加到 BatchExecutor 的 statementList 对象中,等到执行 SqlSession#commit时 统一提交,避免了频繁与数据库交互带来的性能损耗

以上 3 种 Executor 除了自身的特点外,它们还具备抽象类 BaseExecutor 提供的一级缓存的能力

CachingExecutor 本身不具备执行 SQL 语句的能力,它提供了对 MyBatis 二级缓存的支持。CachingExecutor 会持有一个继承自 BaseExecutor 的实例对象,CachingExecutor 在执行 SQL 语句时会调用自身持有的 Executor 实例对象来完成 SQL 语句的执行。

MyBatis 默认的 Executor

如果我们刨除不能够独立执行 SQL 语句的 CachingExecutor 的话,MyBatis 默认的 Executor 是 SimpleExecutor。如果把 CachingExecutor 也算在内的话,由于 MyBatis 是默认开启二级缓存的,因此默认的 Executor 就是 CachingExecutor

这点可以在 MyBatis 的源码中得到印证:

public class Configuration {protected boolean cacheEnabled = true;public Executor newExecutor(Transaction transaction, ExecutorType executorType) {executorType = executorType == null ? defaultExecutorType : executorType;Executor executor;if (ExecutorType.BATCH == executorType) {executor = new BatchExecutor(this, transaction);} else if (ExecutorType.REUSE == executorType) {executor = new ReuseExecutor(this, transaction);} else {executor = new SimpleExecutor(this, transaction);}if (cacheEnabled) {executor = new CachingExecutor(executor);}return (Executor) interceptorChain.pluginAll(executor);}
}

源码的第 5~14 行中,是根据配置的 ExecutorType 创建继承自 BaseExecutor 的 Executor 实例对象,第 15~17 行中,判断了 cacheEnabled 的配置情况,并决定是否要使用 CachingExecutor。

Mybatis 中如何指定 Executor 的类型?

MyBatis 配置 Executor 的方式

MyBatis 中有两种方式指定 Executor 的类型:

  • 通过 MyBatis 的核心配置指定 MyBatis 的 Executor 类型;
  • 创建 SqlSession 时可以指定指定 Executor 的类型。

MyBatis 核心配置文件中配置 Executor

可以在核心配置文件 mybatis-config.xml 中通过 settings 元素来配置 Executor 的类型,例如:

<configuration><!-- 省略 --><settings><setting name="defaultExecutorType" value="REUSE"/></settings><!-- 省略 -->
</configuration>

这样我们通过 mybatis-config.xml 创建的 SqlSession 中都会使用 ReuseExecutor。

创建 SqlSession 时指定 Executor

除了在核心配置文件 mybatis-config.xml 中配置 Executor 的类型外,还以在获取 MyBatis 的 SqlSession 实例对象时指定 Executor 的类型,如下:

    Reader mysqlReader = Resources.getResourceAsReader("mybatis-config.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(mysqlReader);// 指定 Executor的类型SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.SIMPLE);

如果同时在核心配置文件 mybatis-coonfig.xml 中配置了 Executor 的类型,且在创建 SqlSession 的实例对象时也指定了 Executor 的类型,此时以创建 SqlSession 的实例对象时指定的 Executor 类型为准


好了,今天的内容就到这里了,如果本文对你有帮助的话,希望多多点赞支持,如果文章中出现任何错误,还请批评指正。最后欢迎大家关注分享硬核 Java 技术的金融摸鱼侠王有志,我们下次再见!

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

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

相关文章

深度学习系列66:试穿模型IDM-VTON上手

1. 模型概述 如图&#xff0c;总体流程为&#xff1a; 输入为&#xff1a;衣服的编码xg&#xff1b;人物noise的编码xt&#xff1b;人物身上衣物的mask和人体pose分割(densepose)&#xff1b;衣服部分经过两部分网络&#xff1a;1&#xff09;高级语义网络IP-Adapter&#xff…

3122.使矩阵满足条件的最少操作次数

周赛第三题,知道要用动态规划,但是不知道怎么回到子问题 显然根据题意我们需要让每一列都相同,但是相邻列不能选择同一种数字,观察到数据nums[i]介于0-9,我们就以此为突破口. 首先我们用count[n][10], count[i][j]记录第i1列值为j的元素个数,转移方程如下: dfs(i,pre) max(dfs…

pytest-xdist:远程多主机 - 分布式运行自动化测试

简介&#xff1a;pytest-xdist插件使用新的测试执行模式扩展了pytest&#xff0c;最常用的是在多个CPU之间分发测试以加快测试执行&#xff0c;即 pytest -n auto同时也是一个非常优秀的分布式测试插件&#xff0c;分别支持ssh和socket两种方式实现master和worker的远程通讯。…

游戏新手村20:游戏落地页广告页如何设计

在互联网营销中,着陆页(Landing Page,有时被称为首要捕获用户页)就是当潜在用户点击广告或者搜索引擎搜索结果页后显示给用户的网页&#xff0c;LandingPage对于游戏广告的转化率和重要性就不言而喻了。 网页游戏LP页面 上图就是我们大家在浏览网站时不小心蹦出或者主动点击某…

IIS中搭建.Net Core项目,步骤详解

一、准备服务器 1&#xff09;安装IIS 这个比较简单&#xff0c;百度一下就行 2&#xff09;安装 .NET Core 运行时 下载地址&#xff1a;下载 .NET(Linux、macOS 和 Windows) 因为我是本地开发&#xff0c;所以我下载的是SDK 安装成功之后显示如下&#xff1a; 检查是否安装…

万兆以太网MAC设计(6)IP协议报文格式详解以及IP层模块设计

文章目录 前言&#xff1a;IPv4报文协议格式二、IP_RX模块设计2.1、模块接口2.2、模块工作过程 三、IP_TX模块设计3.1、模块接口3.2、模块工作过程 四、仿真4.1、发送端4.2、接受端 前言&#xff1a;IPv4报文协议格式 参考&#xff1a;https://sunyunqiang.com/blog/ipv4_prot…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-5

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

曲线「三分」

明明做作业的时候遇到了 n 个二次函数Si(x)ax^2bxc &#xff0c;他突发奇想设计了一个新的函数F(x)max{Si(x)},i1,2……n 。 明明现在想求这个函数在 的最小值&#xff0c;要求精确到小数点后四位&#xff0c;四舍五入。 输入格式 输入包含 T组数据&#xff0c;每组第一行一…

神经网络的优化器

神经网络的优化器是用于训练神经网络的一类算法&#xff0c;它们的核心目的是通过改变神经网络的权值参数来最小化或最大化一个损失函数。优化器对损失函数的搜索过程对于神经网络性能至关重要。 作用&#xff1a; 参数更新&#xff1a;优化器通过计算损失函数相对于权重参数的…

【蓝桥杯省赛真题38】python字符串拼接 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python字符串拼接 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python字符串拼接 第十三届蓝桥杯青少年组python编程省赛真题 一、题目…

MySQL8.0 msi版本安装教程

MySQL8.0 msi 版本安装教程 1> 官网下载安装包 2> 安装MySQL 2.1双击打开下载的安装包&#xff0c;进入到下面这个页面&#xff0c;选择 Custom 选项&#xff0c;之后&#xff0c;点击next 说明&#xff1a; 2.2 选择所需产品&#xff0c;更改安装位置(当然也可以默认安…

免费ChatGPT合集——亲测免费

1、YesChat 无需登录 网址&#xff1a;YesChat-ChatGPT4V Dalle3 Claude 3 All in One Freehttps://www.yeschat.ai/ 2. 讯飞星火 要登录 讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞 3.通义千问 要登录 通义我是通义&#xff0c;一个专门响应人类指令的…

Unity打开Android文件管理器并加载文件

1、在AssetStore商店中加入免费插件 2、调用代码 3、使用UnityWebRequest加载路径数据

【算法】组合回溯专题

组合总数 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被…

新能源车载芯片分析

新能源汽车市场正迸发出巨大的活力&#xff0c;传统主机厂和新势力都纷纷推出各种车型&#xff0c;打起了价格战&#xff0c;各种新技术让人眼花缭乱。当前&#xff0c;战场硝烟弥漫&#xff0c;新能源汽车公司犹如春秋时期的各诸侯国。车载芯片作为新能源汽车的关键组成部分&a…

Jmeter之Beanshell详解

一、 Beanshell概念 Beanshell: BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似);BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性…

【Java】全套云HIS源码包含EMR、LIS(多医院、卫生机构使用)

云HIS系统简介 SaaS模式Java版云HIS系统源码&#xff0c;在公立二甲医院应用三年&#xff0c;经过多年持续优化和打磨&#xff0c;系统运行稳定、功能齐全&#xff0c;界面布局合理、操作简便。 1、融合B/S版电子病历系统&#xff0c;支持电子病历四级&#xff0c;HIS与电子病…

(超级详细)算法刷题Leecode15. 三数之和

题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组…

鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源?

官方基本概念 从系统的角度看&#xff0c;进程是资源管理单元。进程可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它进程运行。 OpenHarmony内核的进程模块可以给用户提供多个进程&#xff0c;实现了进程之间的切换和通信&#xff0c;帮助用户管理业务程序…

香港BTC、ETH现货ETF同时通过,对行业意义几何?

香港比美国更快一步通过以太坊现货 ETF。 2024 年 4 月 15 日&#xff0c;香港嘉实国际资产管理有限公司&#xff08;Harvest Global Investments&#xff09;今天宣布&#xff0c;得到香港证监会的原则上批准&#xff0c;将推出两大数字资产&#xff08;比特币及以太坊&#…