《Spring Boot》手把手,直到你擁有【MyBatis Generator】-07

Liam Weng
Dec 30, 2021

文章摘要

呈上篇文章中所提到,我們來稍微整理一下利用「Mybatis」建立 ORM&SQL 語法的流程:

  1. 建立資料後對應資料表欄位,手動創建實體類,其中還得確認命名問題
  2. 建立Mapper or DAO層,手動撰寫 SQL 語法
  3. 在service 層中注入Mapper or DAO層

除非此表所需的都是較複雜的SQL語法,不然此篇文章,將帶來
『MyBatis Generator』可直接替開發者們省去了第1、2步驟,
也屬於與 Mybatis成雙出現的實用工具。

一、實作 『MyBatis Generator』

Ⅰ、新增「generatorConfig.xml」至 resources 底下,順便核對一下我們的目錄結構。

以下是我的設定檔,可至底下的連結(github)中複製,當然也可以參考
官網範例」自行根據需求設定。

大部分的說明,已有註解,就不再贅述,
下方延伸閱讀,提供其他大神更詳細的介紹。

Ⅱ、新增 pom.xml,plugin 如下:

Ⅲ、新增後,reload Maven Project
就能發現如下圖紅色框框部分

雙擊紅色的選項or右鍵run也可以產生。

如下,如果是參照我的設定檔,結果會是如下,有4個檔案被新建出來。

二、概述 『MyBatis Generator』產生的檔案

Ⅰ、PlayerDomMapper.class」 為DAO層,所以常用的SQL語法的定義都在這邊,其中根據 「generatorConfig.xml」設定而產出不同,如依照上圖設定,除了一般的「CRUD」方法已外,還有根據主鍵……等,以「CRUD」為己基礎,而產出的方法, 可參考下圖,為此類別其中的一部份,有2個不同的「Select」方法。

其中紅色框部分,意指該方法的實做部分,位於「PlayerDomSqlProvider.class」的「selectByExample」方法,其他同理。

Ⅱ、PlayerDomSqlProvider.class」呈上方的 selectByExample方法,他利用了 JAVA String 組建了 SQL 語法並返回, 含有 example的方法都是在這 class訂義的。

Ⅲ、PlayerDom.class」為 PO 層,作為與資料表欄位的鏡像屬性。

Ⅳ、「PlayerDomExample」為一些常用的SQL方法,其根據資料庫欄位型別而產出,如下圖,id 為 varchar 類型,該 class會產出 varchar 類型所有可能使用的SQL語法,並用JAVA方法訂義在此 Class。

三、使用『MBG』的正確姿勢

由於產生器產生的方法皆由插件產出,不可能就直接 corver 100%的業務需求,此時我們可以利用,原先的「PlayerMapper.class」去繼承「PlayerDomMapper.class」,並把那些自訂義的 SQL 語句,如上篇教學一樣 寫在 PlayerMapper.class 就可以喽~

而 Service 層也只需要注入PlayerMapper.class 即可,這樣以後就算結構上有調整,重新產出時只需要注意自訂義的SQL即可。
重新產出的就放心交給產生器吧~

結尾

Serivice層的改動,就直接上到 github了,這些小兒科,就不在一一說明、附圖教學了,有興趣的讀者們可以直接前往複製。

本邊文章中指介紹了,annotation 的模式,有興趣的讀者可在「generatorConfig.xml」的javaClientGenerator標籤 type部分
切換產出 XML 模式,自己動手試試,並觀察其中的差異。

PS:此篇文章只介紹了,我較常使用的設定部分,「generatorConfig.xml」的部分,可以點下方連結,有詳盡的介紹,可根據自己的需求調優,

⚠️ 寫文新手,如有錯誤還請不吝嗇多多指教,非常感恩🙇‍♂️

--

--