原文位址: http://www.work100.net/training/monolithic-frameworks-mybatis.html 更多教程: 光束雲 - 免費課程
MyBatis 簡介
序号 | 文内章節 | 視訊 |
---|---|---|
1 | 什麼是MyBatis | - |
2 | MyBatis體系結構 | |
3 | MyBatis的工作流程 | |
4 | MyBatis與Hibernate | |
5 | 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執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次資料庫操作。
基礎支撐層
負責最基礎的功能支撐,包括連接配接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,将他們抽取出來作為最基礎的元件。為上層的資料處理層提供最基礎的支撐。

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 的主要流程圖:
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) | 說明 |
---|---|---|
| | 實作了 POJO 和資料庫表之間的映射,以及 SQL 的自動生成和執行。 |
| | 其着力點,是在 POJO 類與 SQL 語句之間的映射關系。 |
也就是說,MyBatis 并不會為程式員自動生成 SQL 語句。
具體的 SQL 需要程式員自己編寫,然後通過 SQL 語句映射檔案,将 SQL 所需的參數,以及傳回的結果字段映射到指定 POJO。
是以,MyBatis 成為了“全自動”ORM 的一種有益補充。
5.MyBatis的特點
- 在 XML 檔案中配置 SQL 語句,實作了 SQL 語句與代碼的分離,給程式的維護帶來了很大便利。
- 因為需要程式員自己去編寫 SQL 語句,程式員可以結合資料庫自身的特點靈活控制 SQL 語句,是以能夠實作比 Hibernate 等全自動 ORM 架構更高的查詢效率,能夠完成複雜查詢。
- 簡單,易于學習,易于使用,上手快。
上一篇:
Spring MVC下一篇:
Druid 簡介如果對課程内容感興趣,可以掃碼關注我們的
公衆号
,及時關注我們的課程更新
QQ群