最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus 條件構(gòu)造器Wrapper使用示例詳解(最新整理)

 更新時(shí)間:2025年06月11日 11:19:23   作者:愿你天黑有燈下雨有傘  
條件構(gòu)造器是 MyBatis-Plus 框架中用于動態(tài)構(gòu)建 SQL 條件的核心工具類,通過鏈?zhǔn)骄幊谭绞綄?shí)現(xiàn)復(fù)雜查詢條件的組合,本文給大家介紹MyBatis-Plus條件構(gòu)造器Wrapper使用示例,感興趣的朋友一起看看吧

一、條件構(gòu)造器概述

條件構(gòu)造器(Wrapper)是 MyBatis-Plus 框架中用于動態(tài)構(gòu)建 SQL 條件的核心工具類,通過鏈?zhǔn)骄幊谭绞綄?shí)現(xiàn)復(fù)雜查詢條件的組合。其主要作用包括:

  • 替代傳統(tǒng) XML 中的動態(tài) SQL 標(biāo)簽
  • 提供類型安全的條件構(gòu)建方式
  • 支持 Lambda 表達(dá)式語法
  • 實(shí)現(xiàn)復(fù)雜的 AND/OR 條件組合

注意:MyBatis-Plus 3.x+ 版本已棄用 EntityWrapper,推薦使用 QueryWrapperLambdaQueryWrapper。

二、核心 Wrapper 類型

類型說明版本要求
QueryWrapper<T>通用條件構(gòu)造器3.0+
UpdateWrapper<T>更新操作條件構(gòu)造器3.0+
LambdaQueryWrapper<T>Lambda 語法條件構(gòu)造器3.0.5+

三、基礎(chǔ)使用示例

  1. 簡單條件構(gòu)建

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 25)
       .like("name", "張")
       .between("create_time", startDate, endDate)
       .orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);

2. Lambda 表達(dá)式構(gòu)建

LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getAge, 25)
             .like(User::getName, "張")
             .between(User::getCreateTime, startDate, endDate)
             .orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);

3. 嵌套條件構(gòu)建

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.and(w -> w.eq("age", 25).or().like("name", "張"))
       .between("create_time", startDate, endDate)
       .orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);

4. 更新操作條件構(gòu)建

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
             .set("name", "新名字")
             .set("age", 30);
int result = userMapper.update(null, updateWrapper);

四、常用方法說明

條件構(gòu)建方法

方法名說明示例
eq等于eq("age", 25)
ne不等于ne("age", 25)
gt大于gt("age", 25)
ge大于等于ge("age", 25)
lt小于lt("age", 25)
le小于等于le("age", 25)
like模糊查詢like("name", "張")
notLike非模糊查詢notLike("name", "張")
between范圍查詢between("age", 20, 30)
notBetween非范圍查詢notBetween("age", 20, 30)
inIN 查詢in("age", Arrays.asList(20, 25, 30))
notInNOT IN 查詢notIn("age", Arrays.asList(20, 25, 30))
isNullIS NULL 查詢isNull("age")
isNotNullIS NOT NULL 查詢isNotNull("age")

排序方法

方法名說明示例
orderByAsc升序排序orderByAsc("id")
orderByDesc降序排序orderByDesc("id")

嵌套條件方法

方法名說明示例
andAND 嵌套條件and(w -> w.eq("age", 25).or().like("name", "張"))
orOR 嵌套條件or(w -> w.eq("age", 25).or().like("name", "張"))

五、LambdaQueryWrapper 優(yōu)勢

LambdaQueryWrapper 使用 Lambda 表達(dá)式,具有以下優(yōu)勢:

  • 類型安全:避免字段名拼寫錯(cuò)誤
  • 代碼可讀性高:直接使用實(shí)體類字段
  • IDE 自動補(bǔ)全:方便快速構(gòu)建條件

六、注意事項(xiàng)

  • 空值處理:條件構(gòu)造器會自動忽略 null
  • SQL 注入:避免直接拼接用戶輸入,使用參數(shù)綁定防止 SQL 注入
  • 性能優(yōu)化:復(fù)雜條件查詢時(shí),合理使用索引

七、更多示例 QueryWrapper

示例 1. 簡單查詢

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 25)
       .like("name", "張")
       .between("create_time", startDate, endDate)
       .orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);

2. 復(fù)雜查詢

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.and(w -> w.eq("age", 25).or().like("name", "張"))
       .and(w -> w.between("create_time", startDate, endDate))
       .orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);

3. 刪除操作

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNull("email");
int result = userMapper.delete(wrapper);

4. 更新操作

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("id", 1);
User user = new User();
user.setName("新名字");
user.setAge(30);
int result = userMapper.update(user, wrapper);

LambdaQueryWrapper

示例 1. 簡單查詢

LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getAge, 25)
             .like(User::getName, "張")
             .between(User::getCreateTime, startDate, endDate)
             .orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);

2. 復(fù)雜查詢

LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.and(w -> w.eq(User::getAge, 25).or().like(User::getName, "張"))
             .and(w -> w.between(User::getCreateTime, startDate, endDate))
             .orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);

UpdateWrapper 示例

1. 簡單更新

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
             .set("name", "新名字")
             .set("age", 30);
int result = userMapper.update(null, updateWrapper);

2. 復(fù)雜更新

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.like("name", "a")
             .and(w -> w.gt("age", 20).or().isNull("email"))
             .set("name", "小黑")
             .set("email", "dhsjfghr");
int result = userMapper.update(null, updateWrapper);

到此這篇關(guān)于MyBatis-Plus 條件構(gòu)造器Wrapper使用指南的文章就介紹到這了,更多相關(guān)MyBatis-Plus 條件構(gòu)造器Wrapper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis 擴(kuò)展BaseTypeHandler 轉(zhuǎn)換泛型 JSON 列表的解決方法

    MyBatis 擴(kuò)展BaseTypeHandler 轉(zhuǎn)換泛型 JSON 列表的解

    本文詳細(xì)介紹了MyBatis中處理JSON轉(zhuǎn)換的bug及其解決方法,文章還介紹了如何處理抽象類和自定義對象的JSON轉(zhuǎn)換,并提供了一個(gè)基類AbstractListTypeHandler作為示例,最后,文章附上了MyBatis內(nèi)建的javaTypeAlias鏈接,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java中stream.map和stream.forEach的區(qū)別

    Java中stream.map和stream.forEach的區(qū)別

    本文主要介紹了Java中stream.map和stream.forEach的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Maven 命令行打包 和 pom.xml的常用配置詳解

    Maven 命令行打包 和 pom.xml的常用配置詳解

    這篇文章主要介紹了Maven 命令行打包 和 pom.xml的常用配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解快速排序算法中的區(qū)間劃分法及Java實(shí)現(xiàn)示例

    詳解快速排序算法中的區(qū)間劃分法及Java實(shí)現(xiàn)示例

    這篇文章主要介紹了詳解快速排序算法中的區(qū)間劃分法及Java實(shí)現(xiàn)示例,文中分別介紹了快排時(shí)兩種區(qū)間劃分的思路,需要的朋友可以參考下
    2016-04-04
  • Java21增強(qiáng)對Emoji表情符號處理示例詳解

    Java21增強(qiáng)對Emoji表情符號處理示例詳解

    這篇文章主要為大家介紹了Java21增強(qiáng)對Emoji表情符號處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java程序順序結(jié)構(gòu)中邏輯控制語句詳解流程

    Java程序順序結(jié)構(gòu)中邏輯控制語句詳解流程

    在程序開發(fā)的過程之中一共會存在有三種程序邏輯:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),對于之前所編寫的代碼大部分都是順序結(jié)構(gòu)的定義,即:所有的程序?qū)凑斩x的代碼順序依次執(zhí)行
    2021-10-10
  • Java正則替換手機(jī)號代碼實(shí)例

    Java正則替換手機(jī)號代碼實(shí)例

    本文的主要內(nèi)容是Java語言中正則表達(dá)式替換手機(jī)號的第4到第7位,實(shí)現(xiàn)方法十分簡單,同時(shí)涉及了一些正則表達(dá)式的相關(guān)用法,需要的朋友可以參考下。
    2017-09-09
  • SpringBoot使用Redis緩存MySql的方法步驟

    SpringBoot使用Redis緩存MySql的方法步驟

    本文主要介紹了SpringBoot使用Redis緩存MySql的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用MybatisPlus實(shí)現(xiàn)sql日志打印優(yōu)化

    使用MybatisPlus實(shí)現(xiàn)sql日志打印優(yōu)化

    本文主要介紹了使用MybatisPlus實(shí)現(xiàn)sql日志打印優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Java使用EasyExcel導(dǎo)出Excel的全流程詳解

    Java使用EasyExcel導(dǎo)出Excel的全流程詳解

    在 Java 后端開發(fā)中,Excel 導(dǎo)出是非常常見的需求,涉及報(bào)表、數(shù)據(jù)分析或業(yè)務(wù)導(dǎo)出,本文將結(jié)合 阿里 EasyExcel 庫,詳細(xì)講解 Excel 導(dǎo)出流程,包括工具類設(shè)計(jì)、樣式、列寬策略、對象映射、輸出流處理,需要的朋友可以參考下
    2025-11-11

最新評論

南京市| 宁安市| 师宗县| 瑞金市| 西乌| 丰城市| 旺苍县| 黄平县| 石楼县| 五常市| 鄂托克旗| 武城县| 巩义市| 荣成市| 宁陵县| 广丰县| 新津县| 新兴县| 衡南县| 日照市| 紫阳县| 凤山县| 建德市| 德令哈市| 安宁市| 吉安县| 突泉县| 神木县| 瑞金市| 县级市| 永济市| 南雄市| 灵寿县| 定远县| 玉溪市| 鲜城| 宁阳县| 得荣县| 瑞金市| 洱源县| 汪清县|