Mybatis Executor
1 | 日常工作中,mybatis框架已经使用了很多年,然而终究只是停留在最表面。早就听闻其源码优雅,最近忍不住再一次捡起来看看,然观之仍不得要领,仅记之。 |
Executor 接口
1 | public interface Executor { |
继承关系

Executor 方法摘要

BaseExecutor 方法摘要
红框中四个抽象方法,由 BaseExecutor 子类实现,这样可以在 BaseExecutor 其中进行统一的处理,如一级缓存相关。

以 BaseExecutor 中的 query 分析执行 select 语句的过程
1 | public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException { |
queryFromDatabase
1 | private <E> List<E> queryFromDatabase(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException { |
对比 doQuery 方法
SimpleExecutor
1 | public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { |
ReuseExecutor
1 |
|
CacheExecutor
通过 Debug SqlSession sqlSession = sqlSessionFactory.openSession() ,查看到 CachingExecutor 的由来:
1 | public class Configuration { |
1 | public class InterceptorChain { |