Hibernate
:是一款Java
世界中最著名的ORM
框架之一JPA(Java Persistence API)
: 是EJB 3 .0
中持久化部分的規範,但它能夠脫離EJB
的體系單Spring JDBC
:嚴格來講,Sring JDBC
不能算是一個ORM
架,它僅僅是使用模板方式對原生DBC
行了一層很是薄的封裝MyBatis
: MyBatis
前身是Apache
基金會的開源項目iBatis
,在2010 年該項目脫離Apache
基金會並正式改名爲MyBatis
JDBC
編程中的查詢操做爲例進行說明,其主要步驟以下:
URL
地址、數據庫用戶名、密碼等鏈接信息DriverManager
打開數據庫鏈接Statement
對象Statement
對象執行 SQL
語句,獲得 ResultSet
對象ResultSet
讀取數據,並將數據轉換成 JavaBean
對象ResultSet
、 Statement
對象以及數據庫鏈接,釋放相關資源java操做數據庫
java
MyBatis
,其主要步驟以下:
mybatis-config.xml
配置文件, 配置數據庫的URL
地址、數據庫用戶名和密碼、別名信息、映射配置文件的位置以及一些全局配置信息mybatis-config.xml
配置文件SqlSessionFactory
對象SqlSessionFactory
對象建立 SqlSession
對象, SqlSession
接口中定義了執行SQL語句所須要的各類方法SqlSession
對象執行映射配置文件中定義的 SQL
語句,完成相應的數據操做SqlSession
對象提交事務,關閉 SqlSession
對象
- 總體結構圖
- 一條sql大體的執行過程
反射模塊sql
Java
中的反射雖然功能強大,可是代碼編寫起來比較複雜且容易出錯,爲了簡化反射操做的相關代碼,MyBatis
提供了專門的反射模塊,該模塊位於 org.apache.ibatis.reflection
包中,它對常見的反射操做作了進一步封裝,提供了更加簡潔方便的反射API
類型轉換模塊數據庫
SQL
語句綁定實參時, 會將數據由 Java
類型轉換成 JDBC
類型;而在映射結果集時,會將數據由 JDBC
類型轉換成 Java 類型日誌模塊:apache
資源加載模塊編程
解析器模塊緩存
XPath
進行封裝,爲 MyBatis
初始化時解析 mybatis-config.xml
配置文件以及映射配置文件提供支持SQL
語句中的佔位符提供支持數據源模塊:提供了與第三方數據源集成的接口,這些功能都位於數據源模塊之中mybatis
事務管理:對數據庫中的事務進行了抽象,其自身提供了相應的事務接口和簡單實現,與 Spring
框架集成,並由 Spring
框架管理事務架構
緩存模塊app
- 簡單的緩存使用圖
注意:MyBatis
中自帶的這兩級緩存與MyBatis
以及整個應用是運行在同一個JVM
中的,共享同一塊堆內存。若是這兩級緩存中的數據量較大, 則可能影響系統中其餘功能的運行,因此當須要緩存大量數據時 ,優先考慮使用Redis
、Memcache
等緩存產品
Binding
模塊:MyBatis
經過 Binding
模塊將用戶自定義的 Mapper
接口與映射配置文件關聯起來,系統能夠經過調用自定義 Mapper
接口中的方法執行相應的 SQL
語句完成數據庫操做,開發人員無須編寫自定義 Mapper
接口的實現, MyBatis
會自動爲其建立動態代理對象框架
MyBatis
初始化過程當中,會加載 mybatis-config.xml
配置文件、映射配置文件以及Mapper
接口中的註解信息,解析後的配置信息會造成相應的對象並保存到 Configuration
對象中SOL
解析與 scripting
模塊
MyBatis
實現動態 SQL
語句的功能,提供了多種動態 SQL
語句對應的節點scripting
模塊會根據用戶傳入的實參,解析映射文件中定義的動態 SQL
節點,並造成數據庫可執行的 SQL
語句 。以後會處理 SQL
語句中的佔位符,綁定用戶傳入的實參SOL
執行:語句的執行涉及多個組件 ,其中比較重要的是Executor
、StatementHandler
、ParameterHandler
和 ResulSetHandler
,步驟以下:
Executor
主要負責維護一級緩存和二級緩存,並提供事務管理的相關操做 ,它會將數據庫相關操做委託給 StatementHandler
完成StatementHandler
首先經過 ParameterHandler
完成 SQL
語句的實參綁定,而後經過java.sql.Statement
對象執行 SQL
語句並獲得結果集ResultSetHandler
完成結果集的映射,獲得結果對象並返回MyBatis
進行擴展,用戶自定義插件也能夠改變 Mybatis
的默認行爲SqlSession
接口,該接口中定義了 MyBatis
暴露給應用程序調用的 API
,也就是上層應用與 MyBatis
交互的橋樑。接口層在接收到調用請求時,會調用核心處理層的相應模塊來完成具體的數據庫操做