Executor接口|学习笔记

简介: 快速学习Executor接口

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术Executor接口学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15947


Executor接口


浅蓝色的部分是它的 Executor。

image.png

我们在执行一个 SqlSession 命令的时候,比如执行一个 intor命令,它执行的过程并不是在 SqlSession执行的,而是靠放入的 Executor执行的,Executor 是SqlSession 的一个属性。

它为什么不让自己执行呢?因为执行的时候它有多种的选择,所以我们看见在Executor里面有实现的多个子类。它有几种执行方式,最简单的就是SimpleExecutor,就是给它什么它执行什么。SimpleExecutor 实现了本地一级缓存,所以我们看到它的一级缓存是在父类上面的。它所有的子类都有

BaseExecutor,所以无论用什么样的方式去执行都有一级缓存,就是这个黄色的部分。

image.png

缓存部分其实还有很多的类,没有全部画出来,这里只画了一个它有缓存的。既然有缓存就会有很多其他的问题:比如缓存满了怎么办?当你在 put的时候,如果缓存满了就需要把一些东西淘汰出去,所以关于缓存怎么处理是有一系列装饰器的设

计模式来装饰这个 Cache,但这不是我们要讨论的重点。

它在 BaseExecutor就做了一级缓存,一级缓存是关不掉的,因为它存在

BaseExecutor 里面,只要你去用,它都会试图把在同一次执行过程中间查过的数据存在这个LocalCache里面。

在MyBatis中间最简单的就是 SimpleExecutor,带一级缓存的、执行一条的一个语句,除了SimpleExecutor以外,还有一个 ReuseExecutor,它可以做到绘画级的缓

存,就是在一个 SqlSession中间,如果你有查过的话就会把它存下来。

它存的方式不是存结果,而是存 statement,就是把它编译过的存下来,所有语句在执行前都需要做预编译、Prepass,是需要时间的,那 ReuseExecutor可以把所有执行过的、预编译好的结果存下来,这样就可以直接拿预编译好的 Statement去

做执行,而不需要再做 Prepare的过程了,这就是 ReuseExecutor。

BatchExecuto r是 Mybatis中做批量处理的,在一个 SQL的定义中间是可以执行多条SQL语句的,那此时需要用 BatchExecutor来执行。

CachingExecutor 是什么呢?首先它是一个Executor,但关键是它里面还有一个属性叫做 delegate,指向了 BaseExecutor,那意味着我们可以把一个SimpleExecutor 放到 CachingExecutor里面,或者把 ReuseExecutor放到CachingExecuto r里面,或者把批量的 Executor放到 CachingExecutor里面。这样放进来的作用就是这个 CachingExecutor可以在 Executor的基础上面,比如单个查询、做可缓存的预编译的查询,或者做批量查询的基础上能够加一个二级缓存。一级缓存已经天然存在,因为所有的都继承父类,所以它一定有一级缓存,而这个是为了去做二级缓存。二级缓存是在默认的一台服务器上的,不管谁去访问过 SQL语

句,只要在一个 Namespace的范畴之内就会去做缓存。

所以说在服务器运行起来以后,同样的查询不会出现两次是靠 CachingExecutor来完成的,所以 CachingExecutor里面会存在一个缓存,而这个缓存会把之前查过的

结果放在里面。

所以当 SqlSession要做任何一个命令的时候,它首先去看 CachingExecutor里面的缓存是否有,如果有,它就会直接返回;如果没有,才会去执行它里头所放的

Executor,或者是 SimpleExecutor或者是 ReuseExecutor,去真正去做执行。

而这个 Executor也有一个缓存,就是它的一级缓存,如果它有一级缓存,就有可能一级缓存返回;如果没有,它就会就是查询,查询完后本身的SimpleExecutor把会它放到一级缓存里,回到 CachingExecutor后会把它放到二级缓存里面,最后才返回。所以这样的方式就是我们的一个设计模式,叫做代理模式,就是我们并不直接使用提供的三种 Executor,而是在三种 Executor上面做了一个代理的 Executor,叫做 CachingExecutor,所以它的属性文件的代理就叫Delegate,那它是在其代理的 Executor上做了一些增强,现在的增强是做二级缓存,我们所有的设计模式都可以用一个方法去做分析,分析一个设计它的好处在哪、让我们知道 Mybatis是一个

非常经典的设计,它也是所有的用到设计模式的地方,都是无可挑剔的。

比如分析这个地方它用的设计模式来实现这个目的,首先分析说要达成什么样的目的,然后再去想它是用什么样的手段来达成这样的目的。它首先要达成目的就是,它不想让其他的部分代码知道我使用了一个代理,我用代理或者不用代理,就是我用 CachingExecutor或不用 CachingExecutor,对于所有其他部分的代码都不会受到影响,这意味着二级缓存是可以开关的,我开二级缓存或者关二级缓存,所有代

码的执行路径都是一样的,除了在它开二级缓存这一段,也就是 CachingExecutor

的这一段是不一样的以外,其他的地方都是完全一样。

它怎样使得这个代理存在和不存在都不会影响到其他部分的代码的的呢?

最主要的手段就是降低它跟其他部分的耦合,而降低耦合的一个重要的手段就是用

多态,所以可以看到这里有一个继承关系。

这个继承关系不是因为 BaseExecutor,因为大家用的都是 Executor,所以在SqlSession 放的是一个类型的对象,这个对象有可能是SimpleExecutor、

ReuseExecutor、CachingExecutor、BaseExecutor,但无论是哪一个对象,对于SqlSession来说是没关系的,所以这样的一个代理机制放在这个地方所起的作用就是让这个代理的对象跟其它的三个对象是一致的。

因为都实现了同样的一个接口,所以换个代理对象进去或者换个其它对象进去是没

有任何差别的,这就是代理的机制。

相关文章
|
人工智能 搜索推荐 物联网
EasyPhoto:基于 SD WebUI 的艺术照生成插件来啦!
EasyPhoto 是一个基于 SD WebUI 的艺术照生成开源插件。允许用户通过上传几张同一个人的照片,快速训练Lora模型,然后结合用户自定义的模板图片,生成 真/像/美的写真图片。诚邀开发者们一起体验,多多提ISSUE,一同优化,让每个AIGCer都拥有自己的AI写真相机!
EasyPhoto:基于 SD WebUI 的艺术照生成插件来啦!
|
弹性计算
2023年阿里云服务器多少钱1年?免费试用版不要钱,收费版108元1年起
2023年购买阿里云服务器多少钱1年?如果是申请试用版云服务器就不需要钱,现在轻量应用服务器最低108元1年,通用型u1云服务器最低1532.04元1年,计算型c7云服务器最低2129.41元1年,通用型g7云服务器最低2608.62元1年,内存型r7云服务器最低3325.97元1年,不过阿里云增加了不少免费试用版云服务器,现在最高可以申请到4核16G配置的云服务器免费试用1个月,最长可以申请2核4G配置的云服务器免费试用3个月。
2023年阿里云服务器多少钱1年?免费试用版不要钱,收费版108元1年起
文件复制到ftp服务器时发生错误,请检查是否有权限将文件放到该服务器上
文件复制到ftp服务器时发生错误,请检查是否有权限将文件放到该服务器上
6367 0
|
机器学习/深度学习 Web App开发 编解码
最高增强至1440p,阿里云发布端侧实时超分工具,低成本实现高画质
近日,阿里云机器学习PAI团队发布一键端侧超分工具,可实现在设备和网络带宽不变的情况下,将移动端视频分辨率提升1倍,最高可增强至1440p,将大幅提升终端用户的观看体验,该技术目前已在优酷、夸克、UC浏览器等多个APP中广泛应用。
最高增强至1440p,阿里云发布端侧实时超分工具,低成本实现高画质
|
机器学习/深度学习 人工智能 API
如何在c++侧编译运行一个aclnn(AOL)算子?
CANN的AOL库提供了一系列高性能算子API,优化了昇腾AI处理器的调用流程。通过两段式接口设计,开发者可以高效地调用算子库API,实现模型创新与应用,提升开发效率和模型性能。示例中展示了如何使用`aclnnAdd`算子,包括环境初始化、算子调用及结果处理等步骤。
|
7月前
|
NoSQL IDE MongoDB
Studio 3T 2025.8 发布 - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.8 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
175 0
Studio 3T 2025.8 发布 - MongoDB 的终极 GUI、IDE 和 客户端
|
9月前
|
人工智能 边缘计算 运维
Moodle + Websoft9:创新教育的强大组合,助力教学与学习
Moodle与Websoft9的结合,为未来课堂提供了强大的技术支撑。Moodle作为开源学习平台,拥有超800个插件,支持个性化教学、学习分析与移动优先功能;Websoft9通过云原生技术实现智能编排、混合云管理和合规保障。二者融合推动微服务化、AI教学和区块链存证等创新,适用于乡村教育、企业培训及老年教育等场景。方案显著降低硬件成本、提升运维效率,并提供开发者认证与社区支持,助力教育数字化转型,开创沉浸式学习新纪元。
238 5
|
Java 关系型数据库 MySQL
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)(1)
基于SpringBoot+Vue信息化在线教学平台的设计与实现(源码+部署说明+演示视频+源码介绍+lw)
214 1
|
SQL 数据处理 数据库管理
如何在 SQL Server 中使用 LEFT
【8月更文挑战第9天】
673 2
如何在 SQL Server 中使用 LEFT
|
Kubernetes 网络安全 Docker
在k8S中,Worker节点加入集群的过程是什么?
在k8S中,Worker节点加入集群的过程是什么?