初识Mybatis之Executor执行器(一)

初识Mybatis之Executor执行器(一)

一、前言:

mybatis框架有四大步骤,分别为接口代理、门面会话、执行器、jdbc处理器,本文将针对执行器进行展开.

二、执行器

  • 执行器关系图

     Executor是执行器接口,BaseExecutor是一个抽象类,负责管理mybatis的一级缓存(会话级缓存)逻辑,BaseExecutor的子类有SimpleExecutor(简单执行器)、ReuseExecutor(可重用执行器)、BatchExecutor(批处理执行器),还有CachingExecutor,继承Executor,主要负责mybatis的二级缓存(应用级缓存).
    

    在这里插入图片描述

  • Executor

     Executor是mybatis中的执行器接口
    

    在这里插入图片描述

    在这里插入图片描述

  • BaseExecutor

     基础执行器,主要职责mybatis的一级缓存(会话级缓存),增、删、改都会清空一级缓存,下面看一下BaseExecutor的基本成员变量.
    

    在这里插入图片描述

  • SimpleExecutor

     简单执行器,每次都会创建一个StatementHandler(Statement处理器)进行查询.
    
  • ReuseExecutor

     可重用执行器,内部会创建一个statementMap,用来缓存每次执行的sql语句创建的statement,从而达到复用.
    

    在这里插入图片描述

  • BatchExecutor

     批处理执行器,每次增、删、该操作会将sql语句创建的statement缓存到内部的statementList中,调用doFlushStatements才是真正对sql进行执行,将结果数据缓存到内部的batchResultList中,最终才能获取到执行结果
    

    在这里插入图片描述

  • CachingExecutor

     缓存执行器,主要职责mybatis的二级缓存(应用级缓存),包装Executor执行器,通过TransactionalCacheManager(事务缓存管理器)对当前的Executor进行二级缓存逻辑处理.
    

    image-20200705191437604.png

三、存在BaseExecutor,为什么还要设计SimpleExecutor、ReuseExecutor、BatchExecutor?

mybatis的Executor体系思想为单一职责,如果将SimpleExecutor、ReuseExecutor、BatchExecutor放入其中,不由思索,BaseExecutor量太大,所做事情形同一个人做几个人的事情,所以这种单一职责设计是不是可以灵活运用,解决代码堆积在一个类的问题.

四、总结

通过上面的了解,我们已经初步认识到mybatis中的Executor各大执行器,其中单一职责设计不由感到妙啊!细心的小伙伴已经发现了CachingExecutor中的delegate, 不知名会发现这是啥,其实这是装饰了Executor,没错这就是装饰器模式.

切记BaseExecutor的一级缓存是会话级别的哟,增、删、改都会清空一级缓存,CachingExecutor的二级缓存是应用级的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值