一、MybatisPlusMax簡介
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包中抽離出來的代碼,方便用戶更好的使用和解藕,
1、DAO快取
給DAO層透明化的增加快取,能夠極大的提高介面的回應效率,透明化意味著不知不覺間具備了快取的能力,業務代碼零感知,這里使用的是Redis分布式快取,Redis是繼Mysql之后必備的組件,因此默認快取使用Redis分布式快取,
有關DAO更多內容,請查看視頻教程增強MybatisPlus!一行代碼整合Redis分布式快取!
2、自增自減零SQL編程
通過自定義CustomLambdaUpdateWrapper包裝器,實作零SQL編程,
public boolean updateUserAge(Long userId) {
CustomLambdaUpdateWrapper<User> wrapper = new CustomLambdaUpdateWrapper<>();
wrapper.incr(User::getAge, 1).eq(User::getUserId, userId);
return update(wrapper);
}
視頻教程自增自減
3、復雜業務報表
通過封裝WrapperUtils工具類,實作and和or 交替出現時復雜業務報表查詢,具體使用場景舉例:
((industry = ?) OR (industry = ?)) AND ((round = ?) OR (round = ?) OR (round = ?))
MybatisPlus·業務報表·復雜SQL
(三)多表連接查詢
在我們使用Lambda風格搞定單表查詢之后,因業務需要,多表連接查詢必不可少!為此作者在此方面也做了不少努力,既然選擇零SQL編程,那么便堅持到底,
在這里需要說明幾點,有不少聲音認為,單表使用MybatisPlus,多表使用MyBatis,有這種想法的朋友可以更近一步,不然便是自欺欺人,掛著MybatisPlus之名干MyBatis之實,
實際上,MyBatis使用join來完成連表查詢,本身是有性能缺陷的,資料庫資料量膨脹越來越快,join連表查詢的弊端愈發明顯,《阿里巴巴開發者手冊》明令禁止使用join查詢,你還在堅持什么呢?
以Lambda版MybatisPlus單表查詢為基礎,通過Java記憶體拼裝,完成多表連接查詢是全新的選擇,視頻教程如下:
- MybatisPlus多表連接查詢
- MybatisPlus多表連接查詢合集說明
- MybatisPlus多表連接查詢一對一單條記錄查詢
- MybatisPlus多表連接查詢一對一查詢串列資料
- MybatisPlus多表連接查詢一對一分頁查詢資料
- MybatisPlus多表連接查詢一對多查詢串列資料
- MybatisPlus多表連接查詢一對多分頁查詢資料
- MybatisPlus多表連接查詢結語總結
- 用代碼生成器自動化實作MybatisPlus多表連接查詢
- MybatisPlus多表連接查詢過濾敏感欄位屬性
- MyBatis多表連接查詢開啟二級快取臟資料案例分析
- MybatisPlus多表連接查詢之二級快取
(四)零SQL分組查詢
分組查詢由于涉及到新增欄位,因此普通的單表查詢并不合適,不滿足DO與資料庫表結構一一對應的關系,作者通過對MybatisPlus源代碼的閱讀,找到了依然能夠像單表查詢的形式處理分組查詢,
視頻教程
- MybatisPlus Lambda運算式 聚合查詢 分組查詢 lambdaQuery groupby
- MybatisPlus Lambda分組查詢 優雅高效統計部門人數
- MybatisPlus Lambda運算式 聚合查詢 分組查詢 COUNT SUM AVG MIN MAX
(五)MybatisPlus代碼生成器
只要你想偷懶,那么Java代碼生成器便是偷懶的利器,Java代碼生成器以MybatisPlus為基礎,通過在全域yml檔案中復用資料庫,讀取資料庫元資料資訊,一件生成domain、mapper、service、controller等Spring MVC風格代碼,以單表查詢為主,兼顧多表連接查詢,是你的開發好幫手,
文字教程MybatisPlus代碼生成器
視頻教程
- Java代碼生成器 本地代碼生成器
- Java代碼生成器 基于SpringBoot MybatisPlus風格 重制版
- Java代碼生成器2.0(重制版)
四、后記
作者叫賽泰先生,主要技術分享平臺在B站,是一位MybatisPlus粉,基于MybatisPlus做實戰技術分享,希望能對喜歡MybatisPlus的你有所幫助,
另外有MybatisPlus技術學習群,添加微信dream4s付費進群(個位數),請注明來意,
喜歡本文就【??推薦??】一下,激勵我持續創作,這個Github同樣精彩,收到您的star我會很激動,本文歸檔在專題博客,視頻講解在B站,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541645.html
標籤:其他
