增強MybatisPlus擴充新功能 實戰MybatisPlus大合集

賽泰先生發表於2023-01-10

mybatis-plus-max簡介

MybatisPlusMax是MybatisPlus的增強包,秉承只擴充不修改的理念,對MybatisPlus做增強。

正如MybatisPlus是對MyBatis的增強,MybatisPlusMax是對MybatisPlus的增強,擴充理念一脈相承。

顯而易見,MybatisPlus依然進入軟體成熟期,對其進行微小的修改會慎之又慎,向其提交修改PR週期較長,基於此考慮,為了更好的使用MybatisPlus,作者決定擴充第三方功能包。

當MybatisPlusMax程式碼逐步成熟後,作者願意一次性捐獻給MybatisPlus官方團隊,以方便使用者更好的使用MybatisPlus。

與MybatisPlus的淵源

MyBatis粉

早期的作者也是MyBatis粉,如果你是從拼接SQL時代過來的,受夠了在Java程式碼中拼接SQL字串,那麼MyBatis絕對讓你愛不釋手。

隨著MyBatis的重度使用,也暴露出一些問題:訪問資料庫極其囉嗦,單表CURD兜兜轉轉需要寫一大堆程式碼,每個專案有很多張表,每個開發會做很多專案,此時的MyBatis從開發端來講需要完善。

MybatisPlus初版

MybatisPlus敏銳的發現MyBatis的痛點,著手對MyBatis重複業務程式碼進行封裝,於是便形成了早期版本MybatisPlus。

早期的MyBatisPlus欄位名等魔法值充斥著Java程式碼裡,並且為了構建查詢條件,需要編寫及其囉嗦的程式碼,很多MyBatis使用者對此嗤之以鼻。被噴的原因如下:大量的欄位名魔法值充斥在Java程式碼裡,與早期的拼接SQL字串有何區別;非常簡單的查詢條件,在XML檔案中很容易完成,使用MybatisPlus構造查詢條件囉囉嗦嗦,不知所云。

早期的MybatisPlus為了改進MyBatis的使用的想法是好的,可是在落地實踐過程中帶來了更大的問題,因此處於不溫不火的狀態。

MybatisPlus新生

Java 8帶來了Lambda表示式,為MybatisPlus重構程式碼帶來了新的基礎能力。MybatisPlus基於Java 8新特性進行程式碼重構,為其帶來了新生,使用Lambda語法,幹掉了Java程式碼裡的欄位名等魔法值,此時的MybatisPlus真正展示出吸引力。

作者粉的是Lambda表示式版本的MybatisPlus,不管是查詢條件的構建,還是欄位的選取,均使用Lambda表示式(方法引用)來完成,Java程式碼變得清爽。

方法引用效能

使用方法引用來替換欄位名,是否會產生效能問題呢?會也不會。會是因為經過一層包裝,效能確實有損耗,不會是因為MybatisPlus在使用反射的地方使用了快取,有效的解決了中間過程耗時操作,因此可以認為Lambda版的MybatisPlus的效能略有下降。用略微下降一點效能的代價置換開發的靈活性,這一點是值得的。

況且現代伺服器硬體逐年提高,從系統總體而言考慮,利大於弊。

基於方法引用實現編碼,在遇到程式碼重構是有多爽就不用多說了。小步快跑、敏捷開發等,造成的屎山程式碼不勝列舉,程式碼重構的地位變得愈發重要。

作者的努力

作者是MybatisPlus粉,因此在系統元件選擇態度更為積極。

零SQL函數語言程式設計時代

在Lambda表示式加持下的MybatisPlus,零SQL函數語言程式設計成為了可能。零SQL是隻儘量少顯示的編寫SQL語句,能不寫就不寫,對於疑難雜症,退回使用MyBatis XML更為方便,此時也不能一條道走到黑。

MybatisPlusMax

MybatisPlusMax不是新內容新,是從common包中抽離出來的程式碼,方便使用者更好的使用和解藕。

DAO快取

給DAO層透明化的增加快取,能夠極大的提高介面的響應效率,透明化意味著不知不覺間具備了快取的能力,業務程式碼零感知。這裡使用的是Redis分散式快取,Redis是繼Mysql之後必備的元件,因此預設快取使用Redis分散式快取。

有關DAO更多內容,請檢視影片教程增強MybatisPlus!一行程式碼整合Redis分散式快取!

多表連線查詢

在我們使用Lambda風格搞定單表查詢之後,因業務需要,多表連線查詢必不可少!為此作者在此方面也做了不少努力,既然選擇零SQL程式設計,那麼便堅持到底。

在這裡需要說明幾點,有不少聲音認為,單表使用MybatisPlus,多表使用MyBatis,有這種想法的朋友可以更近一步,不然便是自欺欺人,掛著MybatisPlus之名幹MyBatis之實。

實際上,MyBatis使用join來完成連表查詢,本身是有效能缺陷的,資料庫資料量膨脹越來越快,join連表查詢的弊端愈發明顯。《阿里巴巴開發者手冊》明令禁止使用join查詢,你還在堅持什麼呢?

以Lambda版MybatisPlus單表查詢為基礎,透過Java記憶體拼裝,完成多表連線查詢是全新的選擇。影片教程如下:

Java程式碼生成器

只要你想偷懶,那麼Java程式碼生成器便是偷懶的利器,Java程式碼生成器以MybatisPlus為基礎,透過在全域性yml檔案中複用資料庫,讀取資料庫後設資料資訊,一件生成domain、mapper、service、controller等Spring MVC風格程式碼,以單表查詢為主,兼顧多表連線查詢,是你的開發好幫手。

文字教程MybatisPlus程式碼生成器

影片教程

後記

作者叫賽泰先生,主要技術分享平臺在B站,是一位MybatisPlus粉,基於MybatisPlus做實戰技術分享,希望能對喜歡MybatisPlus的你有所幫助。

另外有MybatisPlus技術學習群,新增UP微信dream4s付費進群(個位數),請註明來意。

相關文章