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組件

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章