複製鏈接
請複製以下鏈接發送給好友

MyBatis

鎖定
MyBatis本是apache的一個開源項目iBatis,2010年這個項目由apache software foundation遷移到了google code,並且改名為MyBatis。2013年11月遷移到Github
iBATIS一詞來源於“internet”和“abatis”的組合,是一個基於Java持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAOs)。
當前,最新版本是MyBatis 3.5.13,其發佈時間是2023年03月11日。
外文名
MyBatis
原    名
iBatis
單    位
Github
來    源
apache
運行平台
java
創始時間
2010年

MyBatis基本信息

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。 [1] 

MyBatis背景介紹

MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始映射,將接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java對象)映射成數據庫中的記錄。
每個MyBatis應用程序主要都是使用SqlSessionFactory實例的,一個SqlSessionFactory實例可以通過SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder可以從一個xml配置文件或者一個預定義的配置類的實例獲得。
用xml文件構建SqlSessionFactory實例是非常簡單的事情。推薦在這個配置中使用類路徑資源(classpath resource),但你可以使用任何Reader實例,包括用文件路徑或file://開頭的url創建的實例。MyBatis有一個實用類----Resources,它有很多方法,可以方便地從類路徑及其它位置加載資源。

MyBatisMyBatis特點

  • 簡單易學:本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件。易於學習,易於使用。通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。
  • 靈活:mybatis不會對應用程序或者數據庫的現有設計強加任何影響。 sql寫在xml裏,便於統一管理和優化。通過sql語句可以滿足操作數據庫的所有需求。
  • 解除sql與程序代碼的耦合:通過提供DAO層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。
  • 提供映射標籤,支持對象與數據庫的ORM字段關係映射。
  • 提供對象關係映射標籤,支持對象關係組建維護。
  • 提供xml標籤,支持編寫動態sql。 [2] 

MyBatis總體流程

(1)加載配置並初始化
觸發條件:加載配置文件
處理過程:將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)返回處理結果將最終的處理結果返回。

MyBatis功能架構

MyBatis架構 MyBatis架構
我們把Mybatis的功能架構分為三層:
(1)API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。
(2)數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作
(3)基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎的組件。為上層的數據處理層提供最基礎的支撐。 [2] 

MyBatis框架架構

框架架構講解:
mybatis結構 mybatis結構
(1)加載配置:配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,將SQL的配置信息加載成為一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
(2)SQL解析:當API接口層接收到調用請求時,會接收到傳入SQL的ID和傳入對象(可以是Map、JavaBean或者基本數據類型),Mybatis會根據SQL的ID找到對應的MappedStatement,然後根據傳入參數對象對MappedStatement進行解析,解析後可以得到最終要執行的SQL語句和參數。
(3)SQL執行:將最終得到的SQL和參數拿到數據庫進行執行,得到操作數據庫的結果。
(4)結果映射:將操作數據庫的結果按照映射的配置進行轉換,可以轉換成HashMap、JavaBean或者基本數據類型,並將最終結果返回。

MyBatis動態SQL

MyBatis 最強大的特性之一就是它的動態語句功能。如果您以前有使用JDBC或者類似框架的經歷,您就會明白把SQL語句條件連接在一起是多麼的痛苦,要確保不能忘記空格或者不要在columns列後面省略一個逗號等。動態語句能夠完全解決掉這些痛苦。
儘管與動態SQL一起工作不是在開一個party,但是MyBatis確實能通過在任何映射SQL語句中使用強大的動態SQL來改進這些狀況。動態SQL元素對於任何使用過JSTL或者類似於XML之類的文本處理器的人來説,都是非常熟悉的。在上一版本中,需要了解和學習非常多的元素,但在MyBatis 3 中有了許多的改進,現在只剩下差不多二分之一的元素。MyBatis使用了基於強大的OGNL表達式來消除了大部分元素。

MyBatis集成

單獨使用mybatis是有很多限制的(比如無法實現跨越多個session的事務),而且很多業務系統本來就是使用spring來管理的事務,因此mybatis最好與spring集成起來使用。
參考資料