MyBatis原始碼結構概述
經過第3章的學習,我們對 MyBatis的初始化階段、資料讀寫階段都有了粗略的瞭解,同時也對整個流程中涉及的類、方法有了模糊的認識。
在這一章,我們將對 MyBatis原始碼中所有的包從功能上進行歸類劃分,為後續分類展開原始碼閱讀工作奠定基礎。
包結構首先下載 MyBatis的原始碼,可以透過以下地址下載帶中文註釋的3.5.2版:
下載專案原始碼後,在“src\main\java\org.apache.ibatis”目
錄下可以看到 MyBatis 專案的所有包,共 20個,如圖4-1所示。
圖4-1 MyBatis專案的包
分組結構按照包的功能,我們將所有的包分成三大類:
· 基礎功能包:這些包用來為其他包提供一些外圍基礎功能,如檔案讀取功能、反射操作功能等。這些包的特點是功能相對獨立,與業務邏輯耦合小。
· 配置解析包:這些包用來完成配置解析、儲存等工作。這些包中的方法主要在系統初始化階段執行。· 核心操作包:這些包用來完成資料庫操作。在工作過程中,這些包可能會依賴基礎功能包提供的基礎功能和配置解析包提供的配置資訊。這些包中的方法主要在資料庫操作階段執行。
以上只是功能上的大致劃分,各個包中的類、方式實際是互相關聯、交織耦合在一起的。
在其他專案的原始碼閱讀中,也可以按照上面的方式對包進行功能歸類。這會使得後面的原始碼閱讀工作更加有條理、有層次。
按照功能劃分好的包如下所示。
· 基礎功能包:
-exceptions
-reflection
-annotations
-lang
-type
-io
-logging
-parsing
· 配置解析包:
-binding-builder
-mapping
-scripting
-datasource
· 核心操作包:
-jdbc
-cache
-transaction
-cursor
-executor
-session
-plugin
可以用圖4-2來表示這些包在整個 MyBatis中的作用。
圖4-2 MyBatis專案中包的作用
原始碼閱讀過程中有一個非常重要的技巧,那就是從整個專案的外圍原始碼入手。
· 外圍原始碼很少依賴核心原始碼,相對獨立。先閱讀外圍原始碼,受到其他未閱讀部分的干擾較小。
· 核心原始碼大量依賴外圍原始碼。在閱讀核心原始碼時應確保其涉及的外圍原始碼均已閱讀完畢,這樣可以降低核心原始碼的閱讀難度。
於是整個原始碼閱讀過程會如同剝洋蔥一般,由外及內、逐層深入。MyBatis 原始碼中,基礎功能包是最外圍的包,配置解析包位於中間,核心操作包位於內層。
因此,本文中會按照基礎功能包、配置解析包、核心操作包的順序,以包為單位,對包中的原始碼逐一進行閱讀。