當前位置:
首頁 > 知識 > mybatis的整體架構

mybatis的整體架構

mybatis的整體架構分為三層:

1.基礎支持層

該層包括:數據源模塊、事務管理模塊、緩存模塊、Binding模塊、反射模塊、類型轉換模塊、日誌模塊、資源載入模塊、解析器模塊

2.核心處理層

該層包括:配置解析、參數映射、SQL解析、SQL執行、結果集映射、插件

3.介面層

該層包括:SqlSession

基礎支持層

該層保護mybatis的基礎模塊,它們為核心處理層提供了良好的支撐。

(1)反射模塊

Mybatis中的反射模塊,對Java原生的反射進行了很好的封裝,提供了簡易的API,方便上層調用,並且對反射操作進行了一系列的優化,比如,緩存了類的元數據(MetaClass)和對象的元數據(MetaObject),提高了反射操作的性能。

(2)類型轉換模塊

Mybatis的別名機制,是為了簡化配置文件的,該機制是類型轉換模塊的主要功能之一。類型轉換模塊的另一個功能是實現JDBC類型與Java類型間的轉換。該功能在SQL語句綁定實參和映射查詢結果集時都會涉及。在SQL語句綁定實參時,會將數據有Java類型轉換成JDBC類型;在映射結果集時,會將數據有JDBC類型轉換成Java類型。

(3)日誌模塊

Java世界裡,有很多優秀的日誌框架,如Log4j、Log4j2、slf4j等。Mybatis除了提供了詳細的日誌輸出信息,還能夠集成多種日誌框架,其日誌模塊的主要功能就是集成第三方日誌框架。

(4)資源載入模塊

該模塊主要封裝了類載入器,確定了類載入器的使用順序,並提供了載入類文件和其它資源文件的功能。

(5) 解析器模塊

該模塊有兩個主要功能:一個是封裝了XPath,為Mybatis初始化時解析mybatis-config.xml配置文件以及映射配置文件提供支持;另一個為處理動態SQL語句中的佔位符提供支持。

(6)數據源模塊

在數據源模塊中,Mybatis自身提供了相應的數據源實現,也提供了與第三方數據源集成的介面。數據源是開發中的常用組件之一,很多開源的數據源都提供了豐富的功能,如,連接池、檢測連接狀態等,選擇性能優秀的數據源組件,對於提供ORM框架以及整個應用的性能都是非常重要的。

(7)事務管理模塊

一般地,Mybatis與Spring框架集成,由Spring框架管理事務。但Mybatis自身對資料庫事務進行了抽象,提供了相應的事務介面和簡單實現。

(8)緩存模塊

Mybatis中有一級緩存和二級緩存,這兩級緩存都依賴於緩存模塊中的實現。但是,需要注意,這兩級緩存與Mybatis以及整個應用是運行在同一個JVM中的,共享同一塊內存,如果這兩級緩存中的數據量較大,則可能影響系統中其它功能,所以需要緩存大量數據時,優先考慮使用Redis、Memcache等緩存產品。

(9)Binding模塊

在調用SqlSession相應方法執行資料庫操作時,需要制定映射文件中定義的SQL節點,如果sql中出現了拼寫錯誤,那就只能在運行時才能發現。為了能儘早發現這種錯誤,Mybatis通過Binding模塊將用戶自定義的Mapper介面與映射文件關聯起來,系統可以通過調用自定義Mapper介面中的方法執行相應的SQL語句完成資料庫操作,從而避免上述問題。注意,在開發中,我們只是創建了Mapper介面,而並沒有編寫實現類,這是因為Mybatis自動為Mapper介面創建了動態代理對象。有時,自定義的Mapper介面可以完全代替映射配置文件,但比如動態SQL語句啊等,還是寫在映射配置文件中更好。

核心處理層

(1)配置解析

在Mybatis初始化過程中,會載入mybatis-config.xml配置文件、映射配置文件以及Mapper介面中的註解信息,解析後的配置信息會形成相應的對象並保存到Configration對象中。之後,根據該對象創建SqlSessionFactory對象。待Mybatis初始化完成後,可以通過SqlSessionFactory創建SqlSession對象並開始資料庫操作。

(2)SQL解析與scripting模塊

Mybatis實現的動態SQL語句,幾乎可以編寫出所有滿足需要的SQL。

Mybatis中scripting模塊會根據用戶傳入的參數,解析映射文件中定義的動態SQL節點,形成資料庫能執行的sql語句。

(3)SQL執行

SQL語句的執行涉及多個組件,其中比較重要的是Executor、StatementHandler、ParameterHandler和ResultSetHandler。Executor主要維護一級緩存和二級緩存,並提供事務管理的相關操作,它會將資料庫相關操作委託給StatementHandler完成。StatementHandler首先通過ParameterHandler完成SQL語句的實參綁定,然後通過java.sql.Statement對象執行SQL語句並得到結果集,最後通過ResultSetHandler完成結果集映射,得到結果對象並返回。

下圖是一條sql語句執行的流程:

mybatis的整體架構

(4)插件

Mybatis提供了插件介面,用戶可以通過自定義插件的方式對Mybatis進行擴展。

介面層

介面層很簡單,其核心就是SqlSession介面,該介面定義了Mybatis暴露給應用程序調用的API,即與上層應用交互的通道。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Paint API之 Xfermode與PorterDuff詳解
Keepalived+Nginx實現負載均衡高可用

TAG:程序員小新人學習 |