MyBatis 爲何須要通用 Mapper ?

1、通用 Mapper 的用途 ?

我我的最先用 MyBatis 時,先是徹底手寫,而後用上了 MyBatis 代碼生成器(簡稱爲 MBG),在使用 MBG 過程當中,發現一個很麻煩的問題,若是數據庫字段變化很頻繁,就須要反覆從新生成代碼,而且因爲 MBG 覆蓋生成代碼和追加方式生成 XML,致使每次從新生成都須要大量的比對修改。除了這個問題外,還有一個問題,僅僅基礎的增刪改查等方法,就已經產生了大量的 XML 內容,尚未添加一個本身手寫的方法,代碼可能就已經幾百行了,內容多,看着比較礙事。spring

由於不少人都在使用 MBG,MBG 中定義了不少經常使用的單表方法,爲了解決前面提到的問題,也爲了兼容 MBG 的方法避免項目重構太多,在 MBG 的基礎上結合了部分 JPA 註解產生了通用 Mapper。通用 Mapper 能夠很簡單的讓你獲取基礎的單表方法,也很方便擴展通用方法。使用通用 Mapper 能夠極大的提升你的工做效率。數據庫

2、快速入門

爲了讓你更快速的瞭解通用 Mapper 的優點,這裏會更簡潔的讓你瞭解整個過程。mybatis

首先在 Maven 項目的 pom.xml 中添加通用 Mapper 依賴:架構

clipboard.png

接下來,開始具體的使用。app

1. 配置實體類

經過 MBG 配合 專用代碼生成器 能夠直接生成實體類等基礎代碼,爲了不信息量過大,這裏看成手工編寫和配置。學習

有以下類:測試

clipboard.png

在上面類中,咱們給主鍵添加了 @Id,標記該字段爲數據庫主鍵。還有一個通用 Mapper 的特殊註解 @KeySql,配置的 useGeneratedKeys = true 和 MyBatis 中的 useGeneratedKeys 含義相同,意思是說使用 JDBC 的方式獲取數據庫自增的主鍵值。spa

clipboard.png

通過上面簡單的配置後,至關於就有了 MyBatis 中的 <resultMap> 關係映射了,特別注意,這個映射關係只對通用 Mapper 有效,本身手寫方法時,須要本身處理映射關係。給你們推薦一個Java架構交流羣:874811168 進羣一塊兒學習,一塊兒進步。xml

2.建立 Mapper 接口

根據上述實體類,建立對應的 CountryMapper 接口以下:blog

這裏繼承了 tk.mybatis.mapper.common.Mapper 接口,在接口上指定了泛型類型 Country。當你繼承了 Mapper 接口後,此時就已經有了針對 Country 的大量方法,方法以下:

clipboard.png

這些方法中和 MBG 生成的大部分方法都一致,還有一部分 MBG 以外的經常使用方法。

3.配置通用 Mapper

爲了讓上述方法能夠直接使用,還須要配置通用 Mapper,讓項目在啓動的時候,把上述方法都自動生成好,這樣在運行時就可使用上面全部的方法。

根據不一樣的開發環境,須要不一樣的配置方式,完整的內容能夠 集成通用 Mapper,咱們這裏以最多見的 Spring 和 MyBatis 集成爲例。

在集成 Spring 的環境中使用 MyBatis 接口方式時,須要配置 MapperScannerConfigurer,在這種狀況下使用通用 Mapper,只須要修改配置以下:

注意官方的包名和這裏 tk 包名的區別:

1.tk.mybatis.spring.mapper.MapperScannerConfigurer
2.org.mybatis.spring.mapper.MapperScannerConfigurer
3.給你們推薦一個Java架構交流羣:874811168 進羣一塊兒學習

只有第一部分從 org 換成了 tk。

此時通用 Mapper 最簡單的配置就完成了,完整的配置能夠看這裏 和 Spring 集成。

4.簡單使用

下面是一個簡單的測試用例,實際使用中,能夠直接注入 CountryMapper

clipboard.png

該測試完整地址:Spring 集成測試用例

通用 Mapper 只是提供了基礎的大量方法,遇到沒有的方法時,你能夠正常按照 MyBatis 的用法手寫,和正經常使用法沒有任何區別。

5.瞭解更多

上面的簡單的介紹已經能夠應用到真正的項目中了,可是有不少細節這裏都沒有涉及,若是你準備加入通用 Mapper,你能夠先按上述內容引入項目,而後經過更詳細的文檔去了解更多的細節,有不少你可能想要可是 MBG 不存在的方法,在這裏都有,並且若是你想實現本身的通用方法,能夠很輕鬆的進行擴展。

相關文章
相關標籤/搜索