Mybatis-Plus的条件构造器QueryWrapper & UpdateWrapper示例详解

 更新时间:2024年01月11日 10:22:05   作者:IT·陈寒  
Mybatis-Plus的条件构造器QueryWrapper和UpdateWrapper为开发者提供了强大、灵活的条件构建工具,能够大大简化数据库操作的代码,通过本文的介绍,读者可以更加深入地理解这两个条件构造器的使用方法,并在实际项目中灵活应用,感兴趣的朋友跟随小编一起看看吧

1. 引言

在数据库操作中,条件查询和条件更新是非常常见的需求。为了简化代码,Mybatis-Plus提供了强大的条件构造器——QueryWrapperUpdateWrapper。本文将深入探讨这两个条件构造器的使用方法,并通过示例代码帮助读者更好地理解和应用。

2. Mybatis-Plus简介

Mybatis-Plus 是基于Mybatis的一个增强工具库,旨在简化开发,提高效率。它提供了丰富的功能,包括代码生成器、性能优化、条件构造器等。其中,条件构造器是Mybatis-Plus中的一个核心功能,用于构建灵活的查询和更新条件。

在这里插入图片描述

3. QueryWrapper

3.1 基本用法

QueryWrapper用于构建查询条件,可以通过链式调用的方式组装各种查询条件。

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表达式
        queryWrapper.lambda().eq(User::getName, "Alice");
        // 打印SQL语句
        System.out.println("SQL: " + queryWrapper.getSqlSelect());
    }
}

上述代码演示了QueryWrapper的基本用法,通过不同的方法添加等值、不等值、范围、模糊等查询条件,同时支持Lambda表达式。

3.2 动态条件拼接

在实际应用中,我们经常需要根据不同条件的存在与否来动态构建查询条件。QueryWrapper提供了一系列的条件拼接方法,例如andornested等。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public class DynamicQueryWrapperExample {
    public static void main(String[] args) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // 动态条件拼接
        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方法,我们可以根据需要动态拼接查询条件,使得代码更加灵活。

3.3 Lambda表达式的高级用法

QueryWrapper支持Lambda表达式,可以进一步简化代码,提高可读性。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public class LambdaQueryWrapperExample {
    public static void main(String[] args) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // Lambda表达式
        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用于构建更新条件,与QueryWrapper类似,也支持链式调用和Lambda表达式。

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表达式
        updateWrapper.lambda().set(User::getName, "Alice").eq(User::getAge, 30);
        // 打印SQL语句
        System.out.println("SQL: " + updateWrapper.getSqlSet());
    }
}

UpdateWrapper的基本用法与QueryWrapper类似,可以通过链式调用添加等值、不等值、范围、模糊等更新条件。

4.2 动态条件拼接

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
public class DynamicUpdateWrapperExample {
    public static void main(String[] args) {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        // 动态条件拼接
        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方法,我们可以动态拼接更新条件,更好地适应各种业务场景。

4.3 Lambda表达式的高级用法

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
public class LambdaUpdateWrapperExample {
    public static void main(String[] args) {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        // Lambda表达式
        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 动态SQL的使用

QueryWrapperUpdateWrapper提供了丰富的条件构造方法,但对于一些特定、复杂的业务场景,可能需要使用动态SQL。Mybatis-Plus也支持动态SQL的编写,可以通过@SqlParser注解来实现。

@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 自定义条件构造器

在某些场景下,可能需要根据具体业务需求自定义条件构造器。Mybatis-Plus提供了AbstractWrapper类,开发者可以继承并实现自己的条件构造器。

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

6. 总结

Mybatis-Plus的条件构造器QueryWrapperUpdateWrapper为开发者提供了强大、灵活的条件构建工具,能够大大简化数据库操作的代码。通过本文的介绍,读者可以更加深入地理解这两个条件构造器的使用方法,并在实际项目中灵活应用。在未来,随着Mybatis-Plus的不断更新和完善,我们可以期待更多更强大的功能和特性的加入。希望本文能够帮助开发者更好地利用Mybatis-Plus进行数据库操作,提高开发效率。

到此这篇关于Mybatis-Plus的条件构造器QueryWrapper &amp; UpdateWrapper详解的文章就介绍到这了,更多相关Mybatis-Plus QueryWrapper &amp; UpdateWrapper内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java正则替换括号中的逗号实现示例

    java正则替换括号中的逗号实现示例

    本文主要介绍了java正则替换括号中的逗号实现示例,主要介绍了两种示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 解决SpringBoot整合ElasticSearch遇到的连接问题

    解决SpringBoot整合ElasticSearch遇到的连接问题

    这篇文章主要介绍了解决SpringBoot整合ElasticSearch遇到的连接问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java关键字super的骚操作详解

    java关键字super的骚操作详解

    关键字super在Java中用于引用当前类的父类(即超类)的构造方法、访问父类的成员变量和方法,它提供了一种方便的方式来处理继承关系中的父类操作,下面我们就来看看它有哪些骚操作吧
    2023-09-09
  • java ArrayBlockingQueue的方法及缺点分析

    java ArrayBlockingQueue的方法及缺点分析

    在本篇内容里小编给大家整理的是一篇关于java ArrayBlockingQueue的方法及缺点分析,对此有兴趣的朋友们可以跟着学习下。
    2021-01-01
  • 使用Cloud Toolkit在IDEA中极速创建dubbo工程

    使用Cloud Toolkit在IDEA中极速创建dubbo工程

    这篇文章主要介绍了使用Cloud Toolkit在IDEA中极速创建dubbo工程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • springboot+feign+Hystrix整合(亲测有效)

    springboot+feign+Hystrix整合(亲测有效)

    本文主要介绍了springboot+feign+Hystrix整合,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • Spring框架中部署log4j.xml的详细步骤

    Spring框架中部署log4j.xml的详细步骤

    Log4j是一个常用的日志记录工具,它可以帮助我们记录应用程序的运行日志并进行灵活的配置,在Spring框架中,我们可以很方便地部署log4j.xml配置文件来管理日志记录,这篇文章主要介绍了Spring框架中部署log4j.xml的详细步骤并提供相应的代码示例,需要的朋友可以参考下
    2023-09-09
  • jfreechart画折线图的方法

    jfreechart画折线图的方法

    这篇文章主要为大家详细介绍了jfreechart画折线图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • IDEA自动生成类图和时序图的操作指南

    IDEA自动生成类图和时序图的操作指南

    idea 的强大之处在于此,它包含了很多小插件,我们不需要再次下载相关插件,只需要在idea中小小的设置一下就可以了,本文我介绍了IDEA自动生成类图和时序图的操作指南,我用的是idea2020版本,需要的朋友可以参考下
    2024-05-05
  • Jtable和JTree的写法示例代码

    Jtable和JTree的写法示例代码

    这篇文章主要介绍了Jtable和JTree的基本概念,常用构造方法,以及二者的通用写法,需要的朋友可以了解下。
    2017-09-09

最新评论