Mybatis 执行器

JDBC的执行流程如下图:
Mybatis 执行器
先提起JDBC是因为mybatis就是一个基于JDBC的ORM(Object/Relation Mapping 对象/关系映射)框架。

mybatis执行器:
Mybatis 执行器
**执行接口Executor:**提供增删改查,提交事务,回滚,关闭等操作。

**抽象父类BaseExecutor:**主要提供获取连接,一级缓存等公共功能。query方法提供缓存使用。这也是我们经常说的基于sqlsession的一级缓存。

**简单执行器SimpleExecutor:**默认的执行器,每次执行sql 的时候,就开启一个Statement对象,用完就关闭这个对象(可以是Statement或Preparement对象),等于是每次执行都会开启预编译处理。

**重用执行器ReuseExecutor:**执行sql,以sql作为key查找Statement对象,存在就i使用,不存在就创建,用完后,不关闭Statement对象,而是放在Map<String,Statement>内,供下一次使用。(可以是Statement或Preparement对象),多次执行同一sql不重复进行预编译处理。

**批量执行器BatchExecutor:**执行sql时,将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理的(可以是Statement或PrepareStatement对象)。

需要特别注意的时, 当选择批量执行器时, 纵使在获取sqlSession时, 设置了自动提交事务, 也需要手动提交事务

批处理刷新:executor.doFlushStatements(false);-----执行完毕提交事务

**缓存执行器CachingExecutor:**先从缓存中获取结果,存在就放回,不存在就去数据库查询。这里是二级缓存,调用query方法时首先执行查询二级缓存,如果二级缓存没有再去查询一级缓存。二级缓存需要主动开启,不能自定义数据处理器。
Mybatis 执行器
**ClosedExecutor:**不需要关注,它是一个私有内部类。

**AbstractBaseExecutor:**不需要关注,这块儿不属于mybatis的代码。

局部设置:
在获取sqlSession时设置, 需要注意的时, 如果选择的是批量执行器时, 需要手工提交事务。

// 获取指定执行器的sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)

// 获取批量执行器时, 需要手动提交事务
sqlSession.commit();

全局配置:
可在全局配置文件中配置

<settings>
    <setting name="defaultExecutorType" value="BATCH" />
</settings>
上一篇:Mybatis分页查询


下一篇:Mybatis简单工程