MyBatis的工作流程分析
- 解析配置文件
首先MyBatis啟動的時候需要去解析配置文件真朗,包括全局配置文件和映射器配置文件狼讨,里面包含了我們是如何控制MyBatis的行為和對數(shù)據(jù)庫下達的指令,也就是我們編寫的sql信息溶褪。它們將會被解析成一個Congifuration對象器仗。
- 提供操作接口
接下來就是操作數(shù)據(jù)庫的接口爬泥,它在應用程序和數(shù)據(jù)庫之間晶姊,代表我們跟數(shù)據(jù)庫之間的一次連接:而這個就是SqlSession對象扒接。
而我們獲得一個會話,就必須有一個會話工廠SqlSessionFactory们衙;SqlSessionFactory里面包含了我們的所有的配置信息钾怔,而SqlSessionFactory會通過SqlSessionFactoryBuilder的build()方法創(chuàng)建。
MyBatis是對JDBC的封裝砍艾,也就說明了底層一定還是會有JDBC的核心對象蒂教,如執(zhí)行SQL的Statement,結(jié)果集ResultSet脆荷。在MyBatis里,SqlSession只是提供給應用一個借口,還不是SQL的真正執(zhí)行對象蜓谋。 -
執(zhí)行SQL語句
SqlSession持有一個Executor對象梦皮,用來封裝對數(shù)據(jù)庫的操作。執(zhí)行器Executor執(zhí)行query或者update操作的時候會創(chuàng)建一系列對象桃焕,來處理參數(shù)剑肯、執(zhí)行SQL、處理結(jié)果集观堂,所以MyBatis將這些操作簡化成一個對象里:StatementHandler让网,可以說它是Statement的封裝。
MyBatis只要的工作流程圖:
MyBatis的模塊劃分
在MyBatis的主要工作流程里面师痕,不同的功能是由很多不同的類協(xié)作完成的溃睹,它們分布在MyBatis jar包里。
包結(jié)構(gòu):
按照職責的功能不同胰坟,所有的package可以分成不同的工作層次因篇。
接口層
首先接口層是我們打交道最多的。核心對象是SqlSession笔横,它是上層應用和MyBatis打交道的橋梁竞滓,SqlSession上定義了非常多的對數(shù)據(jù)庫的操作方法,接口層在接收到調(diào)用請求時吹缔,會調(diào)用核心處理層的相應模塊來完成具體的數(shù)據(jù)庫操作商佑。
核心處理層
核心處理層,也就是跟數(shù)據(jù)庫操作相關的動作都會在這一層完成厢塘。
核心處理層主要做的事情:
- 把接口傳入的參數(shù)解析并且映射成JDBC類型
- 解析xml文件中的SQL語句莉御,包括插入?yún)?shù)和動態(tài)SQL的生成
- 執(zhí)行SQL語句
- 處理結(jié)果集并且映射成java對象。
插件也屬于核心層俗冻,因為它的工作原理和攔截的對象決定了的礁叔。
基礎支持層
最后一個就是基礎支持層,主要是一些抽取出來的通用的功能(實現(xiàn)復用)迄薄,用來支持核心處理層的功能琅关,如數(shù)據(jù)源、緩存讥蔽、日志涣易、xml解析、反射冶伞、IO新症、事務等等。