個人主頁:金鱗踏雨
個人簡介:大家好,我是金鱗,一個初出茅廬的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
。
文章到這里就結束了,如果有什么疑問的地方,可以在評論區指出~
希望能和大佬們一起努力,諸君頂峰相見
再次感謝各位小伙伴兒們的支持!!!