MyBatis 簡介

MyBatis 是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架。這一系列 MyBatis 文章都算自己學習 MyBatis 的知識概括總結,內容參考自文章尾部的資料。本篇主要介紹 MyBatis 的架構。

1. 什麼是MyBatis

首先,我們來了解一下什麼是 ORM ?

ORM(Object/Relational Mapping),即對象關係映射,它完成面向對象的編程語言到關係數據庫的映射。ORM 工具的唯一作用是:把持久化對象的保存、修改、刪除等操作,轉換成對數據庫的操作。

ORM 基本映射關係:

  • 數據表映射類
  • 數據表的行映射對象(實例)
  • 數據表的列(字段)映射對象的屬性

MyBatis 本是 apache 的一個開源項目 iBatis , 2010年這個項目由 apache software foundation 遷移到了 google code,並且改名爲 MyBatis 。

MyBatis 是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及對結果集的檢索封裝。MyBatis 可以對配置和原生 Map 使用簡單的 XML 或註解,將接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 對象)映射成數據庫中的記錄。

MyBatis 的主要思想是將程序中的大量 SQL 語句抽取出來,配置在配置文件中,以實現 SQL 的靈活配置。

MyBatis 並不完全是一種 ORM 框架,它的設計思想和 ORM 相似,只是它允許直接編寫 SQL 語句,使得數據庫訪問更加靈活。因此,準確地說,MyBatis 提供了一種“半自動化”的 ORM 實現,是一種 “SQL Mapping” 框架。

2. 功能架構

Mybatis的功能架構分爲三層:

這裏寫圖片描述

  • API接口層:提供給外部使用的接口 API,開發人員通過這些本地 API 來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。

  • 數據處理層:負責具體的 SQL 查找、SQL 解析、SQL 執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。

  • 基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作爲最基礎的組件,爲上層的數據處理層提供最基礎的支撐。

3. 框架架構

這裏寫圖片描述

  • 加載配置:MyBatis 應用程序根據XML配置文件加載運行環境,創建 SqlSessionFactory,SqlSessionFactory,配置來源於兩個地方,一處是配置文件,一處是 Java 代碼的註解,將 SQL 的配置信息加載成爲一個個 MappedStatement 對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。

  • SQL 解析:當 API 接口層接收到調用請求時,會接收到傳入 SQL 的 ID 和傳入對象(可以是 Map、JavaBean 或者基本數據類型),Mybatis 會根據 SQL 的 ID 找到對應的 MappedStatement,然後根據傳入參數對象對 MappedStatement 進行解析,解析後可以得到最終要執行的 SQL 語句和參數。

  • SQL 執行:SqlSession 將最終得到的 SQL 和參數拿到數據庫進行執行,得到操作數據庫的結果。

  • 結果映射:將操作數據庫的結果按照映射的配置進行轉換,可以轉換成 HashMap、JavaBean 或者基本數據類型,並將最終結果返回,用完之後關閉 SqlSession。

3.1 SqlSessionFactory

每個基於 MyBatis 的應用都是以一個 SqlSessionFactory 的實例爲核心的。SqlSessionFactory 是單個數據庫映射關係經過編譯後的內存映像。SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置文件或一個預先定製的 Configuration 的實例構建出 SqlSessionFactory 的實例。SqlSessionFactory 是創建 SqlSession 的工廠。

3.2 SqlSession

SqlSession 是執行持久化操作的對象,它完全包含了面向數據庫執行 SQL 命令所需的所有方法,可以通過 SqlSession 實例來直接執行已映射的 SQL 語句。在使用完 SqlSession 後我們應該使用 finally 塊來確保關閉它。

4. MyBatis 的優點

  1. 簡單小巧易於上手,方便瀏覽修改 SQL 語句
  2. 解除 SQL 與程序代碼的耦合
  3. 提供映射標籤,支持對象與數據庫的 ORM 字段關係映射
  4. 提供 xml 標籤,支持編寫動態 SQL

參考鏈接

發佈了39 篇原創文章 · 獲贊 207 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章