上一篇博文解釋了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組件