1. 程式人生 > >Mybatis原始碼研究2:框架整體設計

Mybatis原始碼研究2:框架整體設計

1.引言

本文主要講解Mybatis的整體程式設計,理清楚框架的主要脈絡。後面文章我們再詳細講解各個元件。

2.整體設計

2.1 總體流程

(1)載入配置並初始化

觸發條件:載入配置檔案

配置來源於兩個地方,一處是配置檔案,一處是Java程式碼的註解,將SQL的配置資訊載入成為一個個MappedStatement物件(包括了傳入引數對映配置、執行的SQL語句、結果對映配置),儲存在記憶體中。

(2)接收呼叫請求

觸發條件:呼叫Mybatis提供的API

傳入引數:為SQL的ID和傳入引數物件

處理過程:將請求傳遞給下層的請求處理層進行處理。

(3)處理操作請求

觸發條件:API介面層傳遞請求過來

傳入引數:為SQL的ID和傳入引數物件

處理過程:

(A)根據SQL的ID查詢對應的MappedStatement物件。

(B)根據傳入引數物件解析MappedStatement物件,得到最終要執行的SQL和執行傳入引數。

(C)獲取資料庫連線,根據得到的最終SQL語句和執行傳入引數到資料庫執行,並得到執行結果。

(D)根據MappedStatement物件中的結果對映配置對得到的執行結果進行轉換處理,並得到最終的處理結果。

(E)釋放連線資源。

(4)返回處理結果

將最終的處理結果返回。

2.2 功能架構設計

功能架構講解:

我們把Mybatis的功能架構分為三層:

(1)API介面層:

提供給外部使用的介面API,開發人員通過這些本地API來操縱資料庫。介面層一接收到呼叫請求就會呼叫資料處理層來完成具體的資料處理。

(2)資料處理層:負責具體的SQL查詢、SQL解析、SQL執行和執行結果對映處理等。它主要的目的是根據呼叫的請求完成一次資料庫操作。

(3)基礎支撐層:負責最基礎的功能支撐,包括連線管理、事務管理、配置載入和快取處理,這些都是共用的東西,將他們抽取出來作為最基礎的元件。為上層的資料處理層提供最基礎的支撐。

2.3 框架架構設計

框架架構講解:

(1)載入配置:配置來源於兩個地方,一處是配置檔案,一處是Java程式碼的註解,將SQL的配置資訊載入成為一個個MappedStatement物件(包括了傳入引數對映配置、執行的SQL語句、結果對映配置),儲存在記憶體中。

(2)SQL解析:當API介面層接收到呼叫請求時,會接收到傳入SQL的ID和傳入物件(可以是Map、JavaBean或者基本資料型別),Mybatis會根據SQL的ID找到對應的MappedStatement,然後根據傳入引數物件對MappedStatement進行解析,解析後可以得到最終要執行的SQL語句和引數。

(3) SQL執行:將最終得到的SQL和引數拿到資料庫進行執行,得到操作資料庫的結果。

(4)結果對映:將操作資料庫的結果按照對映的配置進行轉換,可以轉換成HashMap、JavaBean或者基本資料型別,並將最終結果返回。