谈谈mybatis的执行器

16 篇文章 1 订阅
6 篇文章 1 订阅

JDBC执行流程:
在这里插入图片描述
提到JDBC是因为mybatis就是一个基于JDBC的ORM框架

mybatis执行器:
在这里插入图片描述
执行器接口Executor:提供改查(常说的“增、删、改、查”可以合并为“改、查”),提交,回滚,关闭等操作。

抽象父类BaseExecutor:主要提供获取连接,一级缓存等公用功能。query方法提供缓存的使用。这也是经常说的mybatis基于sqlSeesion的一级缓存
在这里插入图片描述

简单执行器SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。(可以是Statement或PrepareStatement对象),多次执行同一sql多次进行预编译处理。

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

批量执行器BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理的(可以是Statement或PrepareStatement对象)
批处理刷新:executor.doFlushStatements(false);-----执行完毕提交事务

缓存执行器CachingExecutor:装饰设计模式,先从缓存中获取查询结果,存在就返回,不存在,再委托给Executor delegate去数据库取,delegate可以是上面任一的SimpleExecutor、ReuseExecutor、BatchExecutor。这里是二级缓存,调用query方法时执行首先查询二级缓存,如果二级没有再查询一级缓存。这里需要注意使用二级缓存条件:1.主动开启二级缓存;2.不能有自定义的数据处理器
org.apache.ibatis.executor.CachingExecutor#query
在这里插入图片描述

ClosedExecutor:不需要关注,它是一个私有内部类。

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

作用范围:以上这五个执行器的作用范围,都严格限制在SqlSession生命周期范围内。

执行流程:

在这里插入图片描述
SqlSession接口的提供降低了mybatis调用的复杂度,更加容易上手。

参考资料:
https://my.oschina.net/u/3737136/blog/1812422

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值