Mybatis的簡介及主要Mapping的寫法

最近項目裏用到Mybtis,這裏主要總結一下Mybatis的一些知識,很簡單。分享出來:

首先,在分佈式大項目中一般都是(Mybits+Spring+Dubbo/JSF+redis/R2M),爲什麼呢? 接着往下看:

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。

優點:

靈活:mybatis不會對應用程序或者數據庫的現有設計強加任何影響。 sql寫在xml裏,便於統一管理和優化。通過sql基本上可以實現我們不使用數據訪問框架可以實現的所有功能,或許更多。
解除sql與程序代碼的耦合:通過提供DAL層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。
提供映射標籤,支持對象與數據庫的orm字段關係映射
提供對象關係映射標籤,支持對象關係組建維護
提供xml標籤,支持編寫動態sql。

每個MyBatis應用程序主要都是使用SqlSessionFactory實例的,一個SqlSessionFactory實例可以通過SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder可以從一個xml配置文件或者一個預定義的配置類的實例獲得。

總體流程:

(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)返回處理結果將最終的處理結果返回。

功能架構:

這裏寫圖片描述

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

接下來拋出個問題;爲什麼總是和Spring整合在一塊呢.?

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

Mybtis最主要的優點就是動態SQL,SQL和代碼分離,適合大項目中sql底層的改動,和維護;

下面上代碼解圖簡單說下mapped具體寫法和調用;
首先,map是由Spring 引入;
這裏寫圖片描述

接着;

這裏寫圖片描述

具體map是:

這裏寫圖片描述

調用時:

這裏寫圖片描述

注意map的id 和alias、namspace即可。