MybatisPlus實戰技術分享合集 代碼生成器 多表連接查詢 分組查詢 一口氣幹完

来源:https://www.cnblogs.com/javazhishitupu/archive/2023/01/10/17040237.html
-Advertisement-
Play Games

一、MybatisPlusMax簡介 MybatisPlusMax是MybatisPlus的增強包,秉承只拓展不修改的理念,對MybatisPlus做增強。 正如MybatisPlus是對MyBatis的增強,MybatisPlusMax是對MybatisPlus的增強,拓展理念一脈相承。 Myba ...


一、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工具類,實現andor 交替出現時複雜業務報表查詢。具體使用場景舉例:

((industry = ?) OR (industry = ?)) AND ((round = ?) OR (round = ?) OR (round = ?))

MybatisPlus·業務報表·複雜SQL

(三)多表連接查詢

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

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

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

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

(四)零SQL分組查詢

分組查詢由於涉及到新增欄位,因此普通的單表查詢並不合適,不滿足DO與資料庫表結構一一對應的關係。作者通過對MybatisPlus源代碼的閱讀,找到了依然能夠像單表查詢的形式處理分組查詢。

視頻教程

(五)MybatisPlus代碼生成器

只要你想偷懶,那麼Java代碼生成器便是偷懶的利器,Java代碼生成器以MybatisPlus為基礎,通過在全局yml文件中復用資料庫,讀取資料庫元數據信息,一件生成domain、mapper、service、controller等Spring MVC風格代碼,以單表查詢為主,兼顧多表連接查詢,是你的開發好幫手。

文字教程MybatisPlus代碼生成器

視頻教程

四、後記

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

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

喜歡本文就【♥️推薦♥️】一下,激勵我持續創作。這個Github同樣精彩,收到您的star我會很激動。本文歸檔在專題博客,視頻講解在B站


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文簡介 點贊 + 關註 + 收藏 = 學會了 學習 Fabric.js,我的建議是看文檔不如看 demo。 本文實現的功能:將元素拖進到畫布中並生成對應的圖形或圖片。 效果如下圖所示: 思路 要實現以上效果,需要考慮以下幾點: 元素有拖拽功能。 能在畫布中生成對應的元素。 畫佈有可能縮放。 畫佈有 ...
  • 儘量不要用== ==的比較過程 以 [] == ![] 為例 左邊 [] 是個數組 右邊 ![] 是個表達式,表示對數組取反,需要對數組進行布爾判定,數組是對象所以是true,取反之後為false,所以就相當於比較 == 兩邊數據類型不一樣會將數據轉變成原始類型 ,原始類型有 null 、 unde ...
  • 路線規劃 簡介 路線規劃常用於出行路線的提前預覽,我們提供4種類型的路線規劃,分別為:駕車、步行、公交和騎行,滿足各種的出行場景。 高德開放平臺 本例是駕車路線規劃功能和位置選擇地圖api:chooseLocation 示例: 1、在頁面的 js 文件中,實例化 AMapWX 對象,請求進行駕車路線 ...
  • 前一段時間做項目,頻繁使用到上傳圖片組件,而且只上傳一個封面,於是想著自定義一個圖片封面上傳組件。先來看一下效果: 第一張圖片是上傳之前,第二張圖片是上傳成功後,第3張圖片是滑鼠放上去之後的效果! 首先整理需求,圖片上傳我們使用照片牆的方式,只能上傳一張圖片,圖片上傳成功後不能繼續上傳,如果想要更換 ...
  • 電銷是什麼?就是坐席拿著電話給客戶打電話嗎?no no no,讓我們一起走進京音平臺之電銷系統。 京音平臺2020年初開始建設,過去的兩年多的時間里,經歷了跌宕起伏,有經驗、有教訓,整體來說平臺經歷了人工、自動化階段,目前處於初步智能化階段,希望可以將過去的一些心路歷程分享給大家,共同交流、共同進... ...
  • 1高階函數 1.1 數學概念 回顧下數學知識: y=f(x) 這是最開始接觸的普通函數 y=g(f(x)) 這個就是我們接觸到的高階函數 在數學和電腦科學中,高階函數至少應當是滿足下麵一個條件的函數: 1)接受一個或者多個函數作為參數 2)輸出一個函數 程式中我們的高階函數也類似 示例計數器的函數 ...
  • Redis 數據結構-雙向鏈表 最是人間留不住,朱顏辭鏡花辭樹。 1、簡介 Redis 之所以快主要得益於它的數據結構、操作記憶體資料庫、單線程和多路 I/O 復用模型,進一步窺探下它常見的五種基本數據的底層數據結構。 Redis 常見數據類型對應的的底層數據結構。 String:簡單動態字元串。 L ...
  • 前言 今天給大家介紹的是Python爬蟲批量下載相親網站圖片數據,在這裡給需要的小伙伴們代碼,並且給出一點小心得。 首先是爬取之前應該儘可能偽裝成瀏覽器而不被識別出來是爬蟲,基本的是加請求頭,但是這樣的純文本數據爬取的人會很多,所以我們需要考慮更換代理IP和隨機更換請求頭的方式來對相親網站圖片數據進 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...