Mybatis源码(三)之SqlSession执行流程全貌

上一篇博文解释了SqlSession是如何创建的Spring整合mybatis创建SqlSession

本篇博文注重你对流程的理解,可以增长你的内功修为。
后续的博文也会写一些实现细节跟你平时调试很相关,比如像动态Sql,读取配置文件等。
后者注重于你调试(就是码农干的事情),前者让你从全局更了解Mybatis工作流程。
了解全貌之后,遇到什么问题,或者着重看那块,能帮你快速定位源码,省下的就是苦力活了,跟进去看。

Mybatis的SqlSession看懂两个方法就足以:

public int update(String statement, Object parameter)
public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds)

本篇在分析下update方法,下图(重要)核心时序图

sqlsession组件执行时序图

这张图可以看做是Mybatis最核心的时序图,是Mybatis的流程的全貌!!!!

有必要的话就需要温故jdbc

分析下如下的几个组件:

SqlSessionInterceptor是代理,dao方法就是在这里被拦截所有流程都是改方法展开的
DefaultSqlSession 负责获取SqlSession,执行dao方法,提交事务
Executor SqlSession委托职责给它,获取Conn,获取Statement,提交事务等
Transaction 事务对象,获取Conn)、提交回滚
StatementHandler 创建Statement
ParameterHandler、ResultHandler图中未表示出,拼接以及参数如何放入Statement、以及返回结果处理类ResultHandler

不知道大家看到这个张图、这些组件有什么感想没?
对于一个复杂的大型项目,怎样将一个大功能,拆分成相关的模块组件,让每个组件各司其职,怎么达到可拓展,可维护。

这张图会一致伴随着我们源码分析的过程,比较重要。
如下的几个组件会在接下来的博文中展开来分析:
这里临时只是贴几张图,只是为了能够更清楚整个流程,方便理解、记忆。

Executor组件

Executor组件

默认情况我们使用的SimpleExecutor defaultExecutorType是Configure的一个成员的 默认是simple
获取Executor实例

修改默认Executor可以这样配置:

<bean id="sqlSessionTemplateBatch" class="org.mybatis.spring.SqlSessionTemplate">       
<constructor-arg index="0" ref="sqlSessionFactory" />    
<!--更新采用批量的executor -->    
<constructor-arg index="1" value="BATCH"/>    
</bean>  

枚举值ExecutorType.BATCH= BATCH
三个执行器:

SimpleExecutor -- SIMPLE 默认执行的执行器 select /update
ReuseExecutor -执行器会重用预处理语句(prepared statements)Map< Sql,StateMent>
BatchExecutor --它是批量执行器  addBatch flush

StatementHandler组件

StatementHandler组件

这里写图片描述

猜你喜欢

转载自blog.csdn.net/mayongzhan_csdn/article/details/78502500