天天看點

Java單體應用 - 常用架構 - 08.MyBatisMyBatis 簡介

原文位址: http://www.work100.net/training/monolithic-frameworks-mybatis.html 更多教程: 光束雲 - 免費課程

MyBatis 簡介

請參照如上

章節導航

進行閱讀

1.什麼是MyBatis

MyBatis 是一款優秀的持久層架構,它支援定制化 SQL、存儲過程以及進階映射。

MyBatis 内部封裝了 JDBC,使開發者隻需關注 SQL 語句本身,而不用再花費精力去處理諸如

注冊驅動

建立 Connection

配置 Statement

等繁雜過程。

Mybatis 通過

xml

注解

的方式将要執行的各種 Statement(Statement、PreparedStatement 等)配置起來,并通過 Java 對象和 Statement 中 SQL 的動态參數進行映射生成最終執行的 SQL 語句,最後由 MyBatis 架構執行 SQL 并将結果映射成 Java 對象并傳回。

2.MyBatis體系結構

接口層

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

資料處理層

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

基礎支撐層

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

Java單體應用 - 常用架構 - 08.MyBatisMyBatis 簡介

3.MyBatis的工作流程

首先在 MyBatis 啟動的時候我們需要去解析配置檔案,包括全局配置檔案(

mybatis-config.xml

)以及映射器配置檔案,這裡面包含了我們怎麼控制 MyBatis 的行為和我們要對資料庫下達的指令,也就是我們的

SQL

的資訊,我們會把這些資訊解析成一個

Configuration

對象。

接下來就是我們操作資料庫的接口,它在應用程式和資料庫中間,代表我們和資料庫之間的一次連接配接,這個就是

SqlSession

我們要獲得一個會話,必須有一個會話工廠

SqlSessionFactory

,SqlSessionFactory 中又必須包含我們所有的配置資訊,是以 MyBatis 通過一個

builder

來建立 SqlSessionFactory。

我們知道 MyBatis 是對

JDBC

的封裝,也就意味着底層一定會出現 JDBC 的一些核心對象,比如執行

SQL

Statement

,結果集

ResultSet

在 MyBatis 裡面,

SqlSession

隻是提供給應用的一個接口,還不是 SQL 的真正執行對象。

通過代碼中可以看到,SqlSession 中持有一個

Executor

對象,用來封裝對資料庫的操作。

在執行器 Executor 執行

query

或者

update

操作的時候,我們會建立一系列的對象來處理參數,執行 SQL,處理結果集。

我們可以簡化成一個

StatementHandler

對象,下面是 MyBatis 的主要流程圖:

Java單體應用 - 常用架構 - 08.MyBatisMyBatis 簡介

SqlSessionFactoryBuilder

每一個 MyBatis 的應用程式的入口是

SqlSessionFactoryBuilder

,它的作用是通過XML配置檔案建立

Configuration

對象(當然也可以在程式中自行建立),然後通過

build

方法建立

SqlSessionFactory

沒有必要每次通路 Mybatis 就建立一次

SqlSessionFactoryBuilder

,通常的做法是建立一個全局的對象就可以了。

SqlSessionFactory

SqlSessionFactory

對象由

SqlSessionFactoryBuilder

建立。

它的主要功能是建立

SqlSession

對象,和

SqlSessionFactoryBuilder

對象一樣,沒有必要每次通路 Mybatis 就建立一次

SqlSessionFactory

SqlSessionFactory

對象一個必要的屬性是

Configuration

對象,它是儲存 Mybatis 全局配置的一個配置對象,通常由

SqlSessionFactoryBuilder

從 XML 配置檔案建立。

SqlSession

SqlSession

對象的主要功能是完成一次資料庫的通路和結果的映射,它類似于資料庫的

session

概念,由于不是線程安全的,是以

SqlSession

對象的作用域需限制方法内。

SqlSession

的預設實作類是

DefaultSqlSession

,它有兩個必須配置的屬性:

  • Configuration
  • Executor

Executor

對象在建立

Configuration

對象的時候建立,并且緩存在

Configuration

對象裡。

Executor

對象的主要功能是調用

StatementHandler

通路資料庫,并将查詢結果存入緩存中(如果配置了緩存的話)。

StatementHandler

StatementHandler

是真正通路資料庫的地方,并調用

ResultSetHandler

處理查詢結果。

ResultSetHandler

4.MyBatis與Hibernate

區分 資料庫封裝機制(ORM) 說明

Hibernate

全自動

實作了 POJO 和資料庫表之間的映射,以及 SQL 的自動生成和執行。

MyBatis

半自動

其着力點,是在 POJO 類與 SQL 語句之間的映射關系。

也就是說,MyBatis 并不會為程式員自動生成 SQL 語句。

具體的 SQL 需要程式員自己編寫,然後通過 SQL 語句映射檔案,将 SQL 所需的參數,以及傳回的結果字段映射到指定 POJO。

是以,MyBatis 成為了“全自動”ORM 的一種有益補充。

5.MyBatis的特點

  • 在 XML 檔案中配置 SQL 語句,實作了 SQL 語句與代碼的分離,給程式的維護帶來了很大便利。
  • 因為需要程式員自己去編寫 SQL 語句,程式員可以結合資料庫自身的特點靈活控制 SQL 語句,是以能夠實作比 Hibernate 等全自動 ORM 架構更高的查詢效率,能夠完成複雜查詢。
  • 簡單,易于學習,易于使用,上手快。
Java單體應用 - 常用架構 - 08.MyBatisMyBatis 簡介

上一篇:

Spring MVC

下一篇:

Druid 簡介
如果對課程内容感興趣,可以掃碼關注我們的

公衆号

QQ群

,及時關注我們的課程更新
Java單體應用 - 常用架構 - 08.MyBatisMyBatis 簡介
Java單體應用 - 常用架構 - 08.MyBatisMyBatis 簡介