咱們都知道Mybatis
是一個很是小巧靈活的ORM框架,深受國內廣大開發者的喜好,咱們知道它的出現某種程度是爲了消除全部的JDBC代碼和參數的手工設置以及結果集的封裝問題;基於這個一點,咱們就能夠知道MyBatis
實際上就是對JDBC的封裝,因此這節咱們就來看下MyBatis
是怎樣對JDBC封裝的,從而能夠借鑑學習其餘優秀框架在解決問題之初從架構設計層面的思考,而後經過執行流程分析,進一步深入理解Mybatis
的工做原理。
sql
首先咱們先來了解下MyBatis
的架構設計
數據庫
MyBatis
總共把功能架構分紅了四部分:緩存
提供給外部使用的接口API,開發人員經過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理, Mybatis
提供了兩種方式服務器
SqlSession
接口中提供的接口方法<T> T selectOne(String statement,Object parameter); <E>List<E> selectList(String statement,Object parameter); int insert(String statement,Object parameter); int update(String statement,Object parameter); int delete(String statement,Object parameter);
數據處理層這部分主要就 JDBC 的核心內容了,包括參數映射、類型轉換、SQL 解析、 SQL 執行以及結果的封裝,這部份內容就能夠理解成 JDBC 的核心內容,這裏有幾個重要類mybatis
MyBatis支持兩種 SQL
解析的方式,一種 xml、一種是註解;兩種方式對於一些基礎的 CRUD 區別不大,使用註解來映射簡單語句會使代碼顯得更加簡潔,但對於稍微複雜一點的語句, Java 註解不只力不從心,還會讓你本就複雜的 SQL 語句更加混亂不堪。所以,若是你須要作一些很複雜的操做,最好用 XML來映射語句架構
這部分主要是框架抽取出來的通用組件包括數據源管理、事務管理、配置加載和緩存處理;爲上層的數據處理層提供最基礎的支撐app
一般狀況下,咱們是會使用 POOLED 的,他能夠幫咱們節省不少寶貴的系統資源框架
JDBC
/MANAGED
)它經過一個頂層的 Transaction
接口以及其不一樣實現JdbcTransaction
和 ManagedTransaction
來實現對事務的管理∶
JdbcTransaction
ManagedTransaction
對事務的管理,在和 Spring
整合以後,一般會用 Spring
的事務管理器源碼分析
這部分是 MyBatis
啓動時核心配置文件的方式,嚴格來講也能夠不算在架構層面,不過MyBatis
也是提供了兩種方式,一個是xml的方式,也是用的比較多的,一種是使用 Java API的方式好比在配置環境的時候學習
<?xmL version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <!--省略--> </environment> </environments> </configuration>
Environment environment = new Environment("development",transactionFactory,dataSource); Configuration configuration = new Configuration(environment)) ;
雖然 MyBatis
提供這兩種方式,可是通常狀況下仍是使用 xml 的比較方便
小結:
這節內容主要從總體架構上分析了 Mybatis
的架構設計,其實是對JDBC的作了一些抽取和封裝,主要分紅了三層