欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-Plus的條件構(gòu)造器QueryWrapper & UpdateWrapper示例詳解

 更新時間:2024年01月11日 10:22:05   作者:IT·陳寒  
Mybatis-Plus的條件構(gòu)造器QueryWrapper和UpdateWrapper為開發(fā)者提供了強大、靈活的條件構(gòu)建工具,能夠大大簡化數(shù)據(jù)庫操作的代碼,通過本文的介紹,讀者可以更加深入地理解這兩個條件構(gòu)造器的使用方法,并在實際項目中靈活應(yīng)用,感興趣的朋友跟隨小編一起看看吧

1. 引言

在數(shù)據(jù)庫操作中,條件查詢和條件更新是非常常見的需求。為了簡化代碼,Mybatis-Plus提供了強大的條件構(gòu)造器——QueryWrapperUpdateWrapper。本文將深入探討這兩個條件構(gòu)造器的使用方法,并通過示例代碼幫助讀者更好地理解和應(yīng)用。

2. Mybatis-Plus簡介

Mybatis-Plus 是基于Mybatis的一個增強工具庫,旨在簡化開發(fā),提高效率。它提供了豐富的功能,包括代碼生成器、性能優(yōu)化、條件構(gòu)造器等。其中,條件構(gòu)造器是Mybatis-Plus中的一個核心功能,用于構(gòu)建靈活的查詢和更新條件。

在這里插入圖片描述

3. QueryWrapper

3.1 基本用法

QueryWrapper用于構(gòu)建查詢條件,可以通過鏈?zhǔn)秸{(diào)用的方式組裝各種查詢條件。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public class QueryWrapperExample {
    public static void main(String[] args) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // 等值條件
        queryWrapper.eq("name", "John");
        // 不等值條件
        queryWrapper.ne("age", 25);
        // 大于條件
        queryWrapper.gt("create_time", "2022-01-01");
        // 小于等于條件
        queryWrapper.le("update_time", "2023-01-01");
        // 模糊查詢
        queryWrapper.like("email", "@gmail.com");
        // 排序
        queryWrapper.orderByAsc("age");
        // 使用Lambda表達(dá)式
        queryWrapper.lambda().eq(User::getName, "Alice");
        // 打印SQL語句
        System.out.println("SQL: " + queryWrapper.getSqlSelect());
    }
}

上述代碼演示了QueryWrapper的基本用法,通過不同的方法添加等值、不等值、范圍、模糊等查詢條件,同時支持Lambda表達(dá)式。

3.2 動態(tài)條件拼接

在實際應(yīng)用中,我們經(jīng)常需要根據(jù)不同條件的存在與否來動態(tài)構(gòu)建查詢條件。QueryWrapper提供了一系列的條件拼接方法,例如and、or、nested等。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public class DynamicQueryWrapperExample {
    public static void main(String[] args) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // 動態(tài)條件拼接
        queryWrapper.and(wrapper -> wrapper.eq("name", "John").ne("age", 25))
                    .or(wrapper -> wrapper.gt("create_time", "2022-01-01").le("update_time", "2023-01-01"));
        // 打印SQL語句
        System.out.println("SQL: " + queryWrapper.getSqlSelect());
    }
}

在上述代碼中,通過andor方法,我們可以根據(jù)需要動態(tài)拼接查詢條件,使得代碼更加靈活。

3.3 Lambda表達(dá)式的高級用法

QueryWrapper支持Lambda表達(dá)式,可以進(jìn)一步簡化代碼,提高可讀性。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public class LambdaQueryWrapperExample {
    public static void main(String[] args) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // Lambda表達(dá)式
        queryWrapper.lambda().eq(User::getName, "John")
                             .ne(User::getAge, 25)
                             .like(User::getEmail, "@gmail.com");
        // 打印SQL語句
        System.out.println("SQL: " + queryWrapper.getSqlSelect());
    }
}

通過lambda方法,我們可以使用實體類的屬性名而不是字符串,使得代碼更加健壯和易維護。

4. UpdateWrapper

UpdateWrapper用于構(gòu)建更新條件,與QueryWrapper類似,也支持鏈?zhǔn)秸{(diào)用和Lambda表達(dá)式。

4.1 基本用法

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
public class UpdateWrapperExample {
    public static void main(String[] args)
 {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        // 等值條件
        updateWrapper.eq("name", "John");
        // 不等值條件
        updateWrapper.ne("age", 25);
        // 大于條件
        updateWrapper.gt("create_time", "2022-01-01");
        // 小于等于條件
        updateWrapper.le("update_time", "2023-01-01");
        // 模糊查詢
        updateWrapper.like("email", "@gmail.com");
        // 使用Lambda表達(dá)式
        updateWrapper.lambda().set(User::getName, "Alice").eq(User::getAge, 30);
        // 打印SQL語句
        System.out.println("SQL: " + updateWrapper.getSqlSet());
    }
}

UpdateWrapper的基本用法與QueryWrapper類似,可以通過鏈?zhǔn)秸{(diào)用添加等值、不等值、范圍、模糊等更新條件。

4.2 動態(tài)條件拼接

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
public class DynamicUpdateWrapperExample {
    public static void main(String[] args) {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        // 動態(tài)條件拼接
        updateWrapper.and(wrapper -> wrapper.eq("name", "John").ne("age", 25))
                      .or(wrapper -> wrapper.gt("create_time", "2022-01-01").le("update_time", "2023-01-01"));
        // 打印SQL語句
        System.out.println("SQL: " + updateWrapper.getSqlSet());
    }
}

通過andor方法,我們可以動態(tài)拼接更新條件,更好地適應(yīng)各種業(yè)務(wù)場景。

4.3 Lambda表達(dá)式的高級用法

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
public class LambdaUpdateWrapperExample {
    public static void main(String[] args) {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        // Lambda表達(dá)式
        updateWrapper.lambda().set(User::getName, "Alice")
                             .eq(User::getAge, 30)
                             .like(User::getEmail, "@gmail.com");
        // 打印SQL語句
        System.out.println("SQL: " + updateWrapper.getSqlSet());
    }
}

通過lambda方法,我們可以使用實體類的屬性名,使得代碼更加簡潔和可讀。

5. 拓展功能與未來展望

5.1 動態(tài)SQL的使用

QueryWrapperUpdateWrapper提供了豐富的條件構(gòu)造方法,但對于一些特定、復(fù)雜的業(yè)務(wù)場景,可能需要使用動態(tài)SQL。Mybatis-Plus也支持動態(tài)SQL的編寫,可以通過@SqlParser注解來實現(xiàn)。

@SqlParser(filter = true)
public interface UserMapper extends BaseMapper<User> {
    @Select("<script> SELECT * FROM user WHERE 1=1 "
            + "<if test=\"name != null\"> AND name = #{name} </if>"
            + "<if test=\"age != null\"> AND age = #{age} </if>"
            + "</script>")
    List<User> selectUsers(@Param("name") String name, @Param("age") Integer age);
}

5.2 自定義條件構(gòu)造器

在某些場景下,可能需要根據(jù)具體業(yè)務(wù)需求自定義條件構(gòu)造器。Mybatis-Plus提供了AbstractWrapper類,開發(fā)者可以繼承并實現(xiàn)自己的條件構(gòu)造器。

import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
public class CustomWrapper<T> extends AbstractWrapper<T, CustomWrapper<T>> {
    public CustomWrapper() {
        super();
    }
    // 自定義條件構(gòu)造方法
    public CustomWrapper<T> customCondition(String condition) {
        sql.WHERE(condition);
        return this;
    }
}

6. 總結(jié)

Mybatis-Plus的條件構(gòu)造器QueryWrapperUpdateWrapper為開發(fā)者提供了強大、靈活的條件構(gòu)建工具,能夠大大簡化數(shù)據(jù)庫操作的代碼。通過本文的介紹,讀者可以更加深入地理解這兩個條件構(gòu)造器的使用方法,并在實際項目中靈活應(yīng)用。在未來,隨著Mybatis-Plus的不斷更新和完善,我們可以期待更多更強大的功能和特性的加入。希望本文能夠幫助開發(fā)者更好地利用Mybatis-Plus進(jìn)行數(shù)據(jù)庫操作,提高開發(fā)效率。

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

相關(guān)文章

  • SpringBoot使用Redis的zset統(tǒng)計在線用戶信息

    SpringBoot使用Redis的zset統(tǒng)計在線用戶信息

    這篇文章主要介紹了SpringBoot使用Redis的zset統(tǒng)計在線用戶信息,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-04-04
  • JAVA項目常用異常處理匯總

    JAVA項目常用異常處理匯總

    這篇文章主要介紹了JAVA項目常用異常處理匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • sun?unsafe類功能及使用注意事項詳解

    sun?unsafe類功能及使用注意事項詳解

    這篇文章主要為大家介紹了unsafe類的功能及在使用中需要注意的事項詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-01-01
  • Java獲取請求頭、參數(shù)、路徑方式

    Java獲取請求頭、參數(shù)、路徑方式

    這篇文章主要介紹了Java獲取請求頭、參數(shù)、路徑方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java二維數(shù)組指定不同長度實例方法

    java二維數(shù)組指定不同長度實例方法

    在本篇內(nèi)容里小編給大家分享了一篇關(guān)于java二維數(shù)組指定不同長度實例方法,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • Java使用Graphics2D繪制SVG和PNG的方法

    Java使用Graphics2D繪制SVG和PNG的方法

    Java提供了許多圖形處理類和方法,如Graphics2D、AffineTransform、Stroke等,這些都可以用于繪制SVG圖像,Graphics2D是Java中用于繪制2D圖形的類,本文給大家介紹如何使用Graphics2D繪制SVG和PNG,需要的朋友可以參考下
    2023-06-06
  • JDK動態(tài)代理,代理接口沒有實現(xiàn)類,實現(xiàn)動態(tài)代理方式

    JDK動態(tài)代理,代理接口沒有實現(xiàn)類,實現(xiàn)動態(tài)代理方式

    這篇文章主要介紹了JDK動態(tài)代理,代理接口沒有實現(xiàn)類,實現(xiàn)動態(tài)代理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 一文帶你熟練掌握J(rèn)ava中的日期時間相關(guān)類

    一文帶你熟練掌握J(rèn)ava中的日期時間相關(guān)類

    我們在開發(fā)時,除了數(shù)字、數(shù)學(xué)這樣的常用API之外,還有日期時間類,更是會被經(jīng)常使用,比如我們項目中必備的日志功能,需要記錄異常等信息產(chǎn)生的時間,本文就帶各位來學(xué)習(xí)一下相關(guān)的日期時間類有哪些
    2023-05-05
  • Mybatis用注解寫in查詢的實現(xiàn)

    Mybatis用注解寫in查詢的實現(xiàn)

    這篇文章主要介紹了Mybatis用注解寫in查詢的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 基于java TCP網(wǎng)絡(luò)通信的實例詳解

    基于java TCP網(wǎng)絡(luò)通信的實例詳解

    本篇文章是對java中TCP網(wǎng)絡(luò)通信的實例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論