mybatis解讀(一)——整體架構
阿新 • • 發佈:2018-11-17
MyBatis整體架構分為三層:基礎支援層、核心處理層、介面層。
基礎支援層:
- 反射模組:
- 型別轉換模組:MyBatis為簡化配置檔案提供了別名機制;
為SQL語句繫結實參以及對映查詢結果集(實現JDBC型別與java型別之間的轉換)都是型別轉換模組的功能。
在為SQL繫結實參時將java型別轉換成JDBC型別,在對映結果集時,會將資料由JDBC型別轉換為java型別。 - 日誌模組:
- 資源載入模組:對類載入器進行封裝,確定類載入器的使用順序,並提供了載入類檔案及其他資原始檔的功能。
- 解析器模組:1:對XPath進行封裝,為MyBatis初始化時解析mybatisConfig.xml配置檔案以及對映配置檔案提供支援;
2:為處理動態SQL語句中的佔位符提供支援。
{ xml解析常見的方式有三種:DOM(Document Object Model)、SAX(Simple API for XML)、StAX(Streaming API for XML);
MyBatis在初始化過程中處理mybatisConfig.xml配置檔案及對映配置檔案時,使用的是DOM解析方式,並結合使用XPath解析XML配置檔案。
DOM是基於樹形結構的XML解析方式,它會將整個XML文件讀入記憶體並構建一個DOM樹,基於這棵樹形結構對各個節點(Node)進行操作。}
- 資料來源模組:
- 事務模組:
- 快取模組:
- Binding模組:將使用者自定義的Mapper介面與對映配置檔案關聯起來,系統可以通過呼叫自定義Mapper介面中的方法執行相應的SQL語句完成資料庫操作。
開發人員無需編寫自定義Mapper介面的實現,MyBatis會自動為建立動態代理物件。
核心處理層:
- 配置解析:在MyBatis初始化過程中,會載入mybatisConfig.xml配置檔案、對映配置檔案以及Mapper介面中的註解資訊,解析後的配置資訊會形成相應的物件並儲存到Configuration物件中。
- SQL解析和scripting模組:MyBatis實現動態SQL語句功能,提供了多種動態SQL對應的節點,例如節點,節點,節點等。通過這些節點的組合使用,開發員可以寫出滿足各種需求的動態SQL語句。
MyBatis的scripting模組會根據使用者傳入的實參,解析對映檔案中定義的動態SQL節點,並形成資料庫可執行的SQL語句。
之後處理佔位符,繫結使用者傳入的實參。 - SQL執行:執行SQL比較重要的幾個元件:Executor、StatementHandler、ParameterHandler、ResultSetHandler。
Executor主要負責維護一級快取和二級快取,並提供事務管理的相關操作,它會將資料庫相關操作託付給StatementHandler完成;
StatementHandler首先通過ParameterHandler完成SQL語句的實參繫結,然後通過java.sql.Statement物件執行SQL語句,並得到結果集;
最後通過ResultSetHandler完成結果集的對映,得到結果物件並返回。
外掛:MyBatis提供了外掛介面,可以通過新增使用者自定義外掛進行MyBatis的擴充套件。
mybatis整體架構圖