MyBatis之执行器(Excutor)

Posted 戒爱学Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中一级缓存和二级缓存的。

mybatis执行流程

mybatis

简介

开源的持久层框架:代码简洁,写sql,性能还可以。容易掌握

执行图

文字说明

  1. 先创建核心配置文件(sqlMapConfig.xml)

  2. 再创建映射文件(可以有多个 ~ 通常有多少张表就有多少)

  3. 通过对象SqlSessionFactory对象来创建

  4. 通过SqlSessionFactory来返回sqlSession接口(他并不是执行,只是负责调用)

  5. 通过调用返回一个excutor(执行器)(真正使用)

  6. 通过excutor(执行器)来包装MappedStatement

  7. 通过MappedStatement可以访问数据库

  8. 在访问数据库之前进行输入映射(Map)(String Integer等基本数据类型)(pojo)

  9. 在查找出来的结果集进行输出映射(Map)(String Integer等基本数据类型)(pojo)(List)

以上是关于MyBatis之执行器(Excutor)的主要内容,如果未能解决你的问题,请参考以下文章

mybatis 的批量处理功能

java并发程序基础——Excutor

JS之手写Promise

Mybatis源码阅读之--整体执行流程

mybatis四大金刚之executor执行器

spark参数调整调优