mybatis执行器及流程说明

mybatis执行器Executor接口有六个实现,分别为:
在这里插入图片描述
类结构图:
在这里插入图片描述
下面对以上类图中的类进行说明:
执行器接口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.不能有自定义的数据处理器,也就是handler
org.apache.ibatis.executor.CachingExecutor#query

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

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

下面我们来看一下关键执行器的流程图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值