您的位置:首页 > 数据库

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

2017-11-10 18:55 701 查看
上一篇博文解释了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方法,下图(重要)核心时序图



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

有必要的话就需要温故jdbc

分析下如下的几个组件:

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


不知道大家看到这个张图、这些组件有什么感想没?

对于一个复杂的大型项目,怎样将一个大功能,拆分成相关的模块组件,让每个组件各司其职,怎么达到可拓展,可维护。

这张图会一致伴随着我们源码分析的过程,比较重要。

如下的几个组件会在接下来的博文中展开来分析:

这里临时只是贴几张图,只是为了能够更清楚整个流程,方便理解、记忆。

Executor组件



默认情况我们使用的SimpleExecutor defaultExecutorType是Configure的一个成员的 默认是simple



修改默认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组件



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息