前面分析了sql的执行过程,似乎有点乱,因为没有一个整体的流程图,不知道走到哪是哪。
好吧,我重新画了个图。我们再跟着图来梳理一次吧。如下
SqlSession:有3个实现类,分别是DefaultSqlSession、SqlSessionManager、SqlSessionTemplate,后2者其实也是通过代理的方式,最终由DefaultSqlSession实现功能。在DefaultSqlSessionFactory的openSessionFromDataSource方法中返回DefaultSqlSession,同时根据ExecutorType绑定了一个Executor。
在此环节通过statementId获取MappedStatement。
Executor:有2个实现类,BaseExecutor和CachingExecutor。如果开启了缓存,则交给CachingExecutor执行,CachingExecutor使用了模板方法的模式,最终还是交给BaseExecutor的实现类来执行。BaseExecutor有3个实现类,分别是BatchExecutor、ReuseExecutor和SimpleExecutor,由ExecutorType来选择使用哪个。
在此环节将入参封装成BoundSql,如果使用了缓存并且缓存中存在的话,在此层返回数据。
<