【MybatisPlus】LambdaQueryWrapper和QueryWapper的區別

個人主頁:金鱗踏雨

個人簡介:大家好,我是金鱗,一個初出茅廬的Java小白

目前狀況:22屆普通本科畢業生,幾經波折了,現在任職于一家國內大型知名日化公司,從事Java開發工作

我的博客:這里是CSDN,是我學習技術,總結知識的地方。希望和各位大佬交流,共同進步 ~

MyBatisPlus的條件查詢構造器?

MyBatis-Plus 是一個基于 MyBatis 的增強工具庫,旨在簡化 MyBatis 的使用并提供更多的便利功能。其中,QueryWrapper?和 LambdaQueryWrapper?都是 MyBatis-Plus 提供的查詢條件構造器,用于構建 SQL 查詢語句的條件部分。

QueryWrapper?

QueryWrapper?是 MyBatis-Plus 最基礎的查詢條件構造器之一。它通過鏈式調用的方式構建查詢條件,并使用普通的字符串作為字段名、操作符和值。它的使用方式類似于傳統的 SQL 查詢。

LambdaQueryWrapper??

LambdaQueryWrapper?是在 QueryWrapper?的基礎上增加了使用 Lambda 表達式的功能,使得構建查詢條件更加類型安全、易讀,并且能夠在編譯時進行語法檢查。它通過方法引用的方式來指定實體類的屬性,并提供了豐富的方法來構建查詢條件。

類圖

  • Wrapper:條件構造抽象類,最頂端父類
  • AbstractWrapper:用于查詢條件封裝,生成 sql 的 where 條件
  • QueryWrapper:Entity 對象封裝操作類,不是用lambda語法
  • UpdateWrapper:Update 條件封裝,用于Entity對象更新操作
  • AbstractLambdaWrapper :?Lambda 語法使用 Wrapper統一處理解析 lambda 獲取 column。
  • ?LambdaQueryWrapper :用于Lambda語法使用的查詢Wrapper
  • ?LambdaUpdateWrapper :?Lambda 更新封裝Wrapper

簡單使用

public class User {private Long id;private String name;private Integer age;private LocalDateTime createTime;// 其他字段...// 省略 getter 和 setter 方法
}
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25).like("name", "John").orderByDesc("create_time").last("limit 10");
List<User> userList = userMapper.selectList(queryWrapper);
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 25).like(User::getName, "John").orderByDesc(User::getCreateTime).last("limit 10");
List<User> userList = userMapper.selectList(lambdaQueryWrapper);

我們首先構建了 QueryWrapper?或 LambdaQueryWrapper?對象,并設置查詢條件。然后,創建了一個 Page 對象來指定要查詢的頁碼每頁數量。最后,通過調用映射器接口的 selectPage() 方法來執行分頁查詢,得到分頁后的結果。

注意,selectPage()?方法返回的是一個 Page對象,其中包含了分頁后的數據和總記錄數等信息。

如果你希望在構建查詢條件時具有更好的類型安全性和易讀性,推薦使用 LambdaQueryWrapper?。如果簡單查詢條件已經滿足需求,或者需要更靈活的拼接查詢條件,可以使用 QueryWrapper?。

注意:lambdaQueryWrapper.eq(User::getAge, 25)

里面的?User::getAge 表示查詢 age 值為25的用戶。這是一種 Java 8+ 中的語法,用于方法引用,直接引用了實體類的屬性和方法

優缺點

LambdaQueryWrapper

  • 優點:類型安全、易讀性高,可以直接使用實體類的屬性和方法。
  • 缺點:在某些復雜查詢操作下可能不支持。

QueryWrapper

  • 優點:更靈活,支持復雜查詢操作和 SQL 片段拼接。
  • 缺點:類型不安全、可讀性較差。

一般情況下,如果你的查詢條件相對簡單且你更注重代碼的清晰性和類型安全性,可以優先考慮使用 LambdaQueryWrapper。但如果你需要進行復雜的查詢操作,特別是涉及到復雜的 SQL 片段拼接等情況,可能需要使用 QueryWrapper

文章到這里就結束了,如果有什么疑問的地方,可以在評論區指出~

希望能和大佬們一起努力,諸君頂峰相見

再次感謝各位小伙伴兒們的支持!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35669.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

可視化應用:提升教育領域的學習與理解

在教育領域&#xff0c;可視化應用作為一種強大的工具&#xff0c;已經開始發揮著重要的作用。通過將抽象的概念和復雜的數據轉化為直觀的圖形和圖表&#xff0c;可視化應用能夠提升學生的學習效果和理解能力。本文將探討可視化應用在教育領域中的重要性&#xff0c;以及它在不…

電路基礎之電容

電容器&#xff08;Capacitor&#xff09;是由兩個導體電極之間夾著一個電介質而組成的元件。這兩個電極可以是金屬板、箔片、涂層等&#xff0c;而電介質則是放置在電極之間的絕緣材料。電容器的基本構成包括以下幾個要素&#xff1a; 電極&#xff1a;電容器的電極是兩個導體…

Ubuntu系統kubeadm安裝K8S_v1.25.x容器使用docker(K8S_v1.24版本以后依然使用docker容器管理)

安裝所需要的全部文檔請點擊這里下載 系統是&#xff1a; rootk8s-master:~# cat /etc/lsb-release DISTRIB_IDUbuntu DISTRIB_RELEASE22.04 DISTRIB_CODENAMEjammy DISTRIB_DESCRIPTION“Ubuntu 22.04.3 LTS” rootk8s-master:~# uname -a Linux k8s-master 5.15.0-76-generi…

js合并數組對象(將數組中具有相同屬性對象合并到一起,組成一個新的數組)

一、根據數組對象中某一key值&#xff0c;合并相同key值的字段&#xff0c;到同一個數組對象中&#xff0c;組成新的數組 1.原數組&#xff1a; var array [{ id: 1, name: Alice },{ id: 2, name: Bob },{ id: 1, age: 25 },{ id: 3, name: Charlie, age: 30 } ];2.合并后數…

C++隱式調用和explicit關鍵字

隱式類型轉換 #include <iostream> using namespace std;class Point { public:int x, y;Point(int x 0, int y 0): x(x), y(y) {} };void displayPoint(const Point& p) {cout << "(" << p.x << "," << p.y <&l…

接口測試實戰,Jmeter正則提取響應數據-詳細整理,一篇打通...

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 在測試時&#xf…

服務器安裝JDK

三種方法 方法一&#xff1a; 方法二&#xff1a; 首先登錄到Oracle官網下載JDK JDK上傳到服務器中&#xff0c;記住文件上傳的位置是在哪里&#xff08;我放的位置在/www/java&#xff09;&#xff0c;然后看下面指示進行安裝 方法三&#xff1a; 首先登錄到Oracle官網下載…

Skywalking-9.6.0系列之本地源碼編譯并啟動

Skywalking相信有很多人使用過&#xff0c;通過容器或者下載安裝包進行安裝的&#xff0c;今天從源代碼角度&#xff0c;拉取、構建、啟動。 官方文檔步驟簡潔明了&#xff0c;我這邊會結合自己遇到的一些問題做出總結。 當前構建資源版本&#xff1a; MAC 10.15.7IDEA 2021.…

基于STM32CUBEMX驅動TMOS模塊STHS34PF80(1)----獲取ID

基于STM32CUBEMX驅動TMOS模塊STHS34PF80----1.獲取ID 概述樣品申請視頻教程所有功能接口最小系統圖生成STM32CUBEMX串口配置IIC配置IO口設置串口重定向 模塊地址參考demoIIC寫函數IIC讀函數參考程序初始化獲取ID主函數 概述 STHS34PF80 是一款非冷卻、工廠校準的紅外運動和存在…

端口輸入的數據為什么要打拍?

一次作者在開發圖像時候&#xff0c;對輸入的圖像沒有打拍&#xff0c;直接輸出給顯示終端&#xff0c;時好時壞&#xff0c;或者圖像顏色不正確&#xff0c;最終經過打拍解決了此問題。 //配置為16-Bit SDR ITU-R BT.656模式時pixel_data[23:16]為高阻。always (posedge pixe…

AtCoder Beginner Contest 314-A/B/C

A - 3.14 題目要求輸出圓周率保留小數幾位后的結果 用字符串來存儲長串的圓周率&#xff0c;截取字符串就可以了。 #include<iostream> using namespace std; int main() {string s"3.1415926535897932384626433832795028841971693993751058209749445923078164062…

C#多線程開發詳解

C#多線程開發詳解 持續更新中。。。。。一、為什么要使用多線程開發1.提高性能2.響應性3.資源利用4.任務分解5.并行計算6.實時處理 二、多線程開發缺點1.競態條件2.死鎖和饑餓3.調試復雜性4.上下文切換開銷5.線程安全性 三、多線程開發涉及的相關概念常用概念(1)lock(2)查看當前…

NanoPi NEO移植LVGL8.3.5到1.69寸ST7789V屏幕

移植前準備 移植好fbtft屏幕驅動 參考鏈接&#xff1a;友善之臂NanoPi NEO利用fbtft驅動點亮1.69寸ST7789V2屏幕 獲取源碼 名稱地址描述lvglhttps://github.com/lvgl/lvgl.gitlvgl-8.3.5lv_drivershttps://github.com/lvgl/lv_drivers.gitlv_drivers-6.1.1 創建工程目錄 創…

RF PCB的9條改進型建議

1.小功率的RF的PCB設計中,主要使用標準的FR4材料(絕緣特性好、材質均勻、介電常數ε=4,10%)。主要使用4層~6層板,在成本非常敏感的情況下可以使用厚度在1mm以下的雙面板,要保證反面是一個完整的地層,同時由于雙面板的厚度在1mm以上,使得地層和信號層之間的FR4介質較厚,…

Linux | curl命令調用接口時查看調用時長和詳情

關注wx&#xff1a; CodingTechWork 引言 在服務器中通過curl命令調用接口時&#xff0c;我們經常需要分析一些時長。本文主要總結兩種方式進行處理。 curl命令 使用time命令 time curl -k -u <username>:<password> https://127.0.0.1/xxxx -vvv 使用文本 編…

HTML <span> 標簽

定義和用法 <span> 標簽被用來組合文檔中的行內元素。 瀏覽器支持 元素ChromeIEFirefoxSafariOpera<span>YesYesYesYesYes所有瀏覽器都支持 <span> 標簽。 HTML 與 XHTML 之間的差異 NONE 提示和注釋: 提示:請使用 <span> 來組合行內元素,以便…

旋轉圖像(旋轉矩陣)

原題鏈接 旋轉圖像備戰技術面試&#xff1f;力扣提供海量技術面試資源&#xff0c;幫助你高效提升編程技能&#xff0c;輕松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/rotate-image/ 算法分析 若矩陣的行列數為N&#xff0c;設i表示行索引&#xff0c;i屬…

win10中Docker安裝、構建鏡像、創建容器、Vscode連接實例

Docker方便一鍵構建項目所需的運行環境&#xff1a;首先構建鏡像(Image)。然后鏡像實例化成為容器(Container)&#xff0c;構成項目的運行環境。最后Vscode連接容器&#xff0c;方便我們在本地進行開發。下面以一個簡單的例子介紹在win10中實現&#xff1a;Docker安裝、構建鏡像…

Flutter BottomSheet 三段式拖拽

BottomSheetBehavior 追蹤 BottomSheet系統默認實現效果準備要實現的功能點&#xff1a;定義三段式狀態&#xff1a;BottomSheetBehavoir閥值定義1. 未達到滾動閥值&#xff0c;恢復狀態2. 達到滾動閥值&#xff0c;更新狀態 前面倒是有講過Android原生的BottomSheetBehavior&a…

Flask 框架集成Bootstrap

前面學習了 Flask 框架的基本用法&#xff0c;以及模板引擎 Jinja2&#xff0c;按理說可以開始自己的 Web 之旅了&#xff0c;不過在啟程之前&#xff0c;還有個重要的武器需要了解一下&#xff0c;就是著名的 Bootstrap 框架和 Flask 的結合&#xff0c;這將大大提高開發 Web …