Mybatis源码解读-SqlSession四大神器之Executor

Executor简介:MyBatis 执行器,是 MyBatis 调度的核心,负责 SQL 语句的生成和查询缓存的维护.可以理解为我们jdbc中的Statement封装版.

我们之前有在SqlSession的实现类DefaultSqlSession中又看到过这个对象

这个Excutor负责的就是增删改查的具体操作,同时对当前对数据库的操作有三种管理方案

1.第一种是简单的处理

在执行完sql以后,他直接销毁statement对象

2.可重用管理方式

这个就会把statement对象和执行的sql语句进行关联,在执行完sql以后,statement对象并不会销毁,他会组成一个键值对保存在map对象中,在下次使用相同的sql进行操作的时候,他就会通过这个sql找到关联的statement对象.这个方式的好处就是不用创建并销毁statement对象,主要是进行提高运行效率

3.批处理管理方案

这个方式是为了缓解数据库的压力,防止多个sql 同时执行给数据库压力,他会将多个statement对象中的参数进行读取,由一个statement对象通过预编译的方式进行推送.

 

在接口的内部结构中,我们可以看到有一下几类

 这一部分能看到是query还有update,query就是查询,update这个接口中就包含了删改查这三种操作了
所以这一部分主要就是增删改查
2.

这是这个接口中的第二部分,他主要是对mybatis的事务进行管理

3.

这是这个接口中的第三部分,主要是对mybatis中的缓存进行处理.

这就是这个接口中的主要内容了

接下来看的就是实现类了,在这个接口中只有三个实现类
这三个实现类中他主要的作用就是对应三种处理方案,主要就是简单方式, 可重复用,批处理三种

在这个具体的实现类中,主要是两个实现类 BaseExecutor和CachingExecutor剩下的几个都是继承BaseExcutor,所以主要暂时先看一下这两个.

在打开这个 BaseExecutor中可以看到这个类是一个抽象类,在我们开发中,这种抽象类在我们开发中是比较常见的一种设计模式,叫适配器设计模式,他在这里的作用是让我们对接口中一些不用的方法进行重写, 减轻我们实现类对接口重写的开发负担.

在我们碰到抽象类的这个情况下,可以保证两件事情:

1.接口实现抽象类一定用到了适配器设计模式

2.在抽象类中一定有他的子类继承了这个抽象类

在点开这个BaseExecutor下边,我们能看到他总共是有4个子类

 能看到这四个子类分别是

1.SimpleExecutor类主要是为了配置我们执行器中方案的简单处理方案,是这个方案的具体实现

这里就可以看到简单处理模式中他每次执行都会创建一个statement对象然后在执行完了以后在给他销毁.

2.ReuseExecutor这个类对应的就是我们方案中的可重复的方案

 这个里边我们就能看到在doUpdate方法中他获取statement对象是通过prepareStatement这个方法进行获取的

 在这里我们可以看到这个方法他先声明一个对象,他会拿着通过getSql拿出来的sql进行比对,在这个hasStatementFor这个方法中我们可以看到他每次先去这个方法中通过sql进行比对看看没有上次执行过的sql拿出来他的statement对象,再看回来这个prepareStatement可以看到如果他有这个sql,他就会通过这个sql直接拿到这个statement对象,如果他没有这个sql他创建出来一个新的statement对象,并且将这个sql及对象保存到这个map中去

3.BatchExecutor这个类中就是批处理处理方案所对应的的类,用于将多个sql交给一个statement处理,防止数据库压力大时崩溃

4.CloseExecutor这个类在mybatis的官方解释这类已经不会被使用了.

二.我们的执行器中还有第二类执行器

CachingExecutor这是第二类中的缓存执行器(二级缓存)

他主要是在做查询的时候进行一次本地的缓存查询,

 

ExcecutorType 的选择.

ExecutorType 来决定 Configuration 对象创建何种类型的执行器.它的赋值可以通过两个地方进行赋值.
首先.可以通过<settings>标签来设置当前工程中所有 SqlSession 对象使用的默认 Executour

在缓存执行器中他默认的是开启的,可以设置手动关闭

 

也可以通过 SqlSessoinFactory 中 openSession 方法来指定具体的 SqlSession 使用的执行器

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值