MyBatis之执行器(Excutor)
MyBatis之执行器(Executor)
前面的文章已经介绍了MyBatis的基本使用流程,但我们不能仅仅局限于使用,而是应该去横向扩展,往更深的方向研究。今天就先讲解一下MyBatis中的执行器Executor。
我们在CURD的时候,每次都会去获取一个新的SqlSession对象,
可以看出来这个接口主要定义类关于CRUD、数据库事务、数据库刷新等相关操作。下面看它的默认实现类:
可以看到 DefaultSqlSession 实现了SqlSession中的方法,(其实我们自己也可根据需要去实现)
而在这个方法中,存在一个属性就是今天需要将的主角,Mybatis的执行器(Executor)。
1、Executor简单介绍
Executor执行器,是mybatis中执行查询的主要代码, Executor分为三种,分别是
简单执行器SimpleExecutor、可重用执行器ReuseExecutor、批量执行器BatchExecutor。
可以在mybatis的配置文件中设置使用哪种执行器:
源码中,初始化SqlSession的时候,会查看配置文件中是否有配置,没有则使用SimpleExecutor
下面分别简单使用三个执行执行以下代码:
首先初始化以下相关需要的信息:
1、SimpleExecutor
执行结果:
当执行两次查询的时候,可以看到每次执行都会进行一次预编译(就是创建一个PrepareStatement),这样效率相对比较低。
2、 ReuseExecutor
执行结果 :
可以看到,当使用ReuseExecutor的时候,虽然执行了2次查询,但是只执行了一次预编译。相对简单执行,可重用执行器的效率会高一些。
3、BatchExecutor
批量执行器,当查询的时候,跟SimpleExecutor一样,也会执行多次的预编译。而更新或插入操作的时候,会批量进行,但是要注意需要手动进行提交:
下面我们看一下执行器的类图:
通过类型可以发现,在第二层中,存在两个实现类分别是 BaseExecutor和CachingExecutor两个类。其实他们两个分别是实现mybatis中一级缓存和二级缓存的。