MyBatis-Plus:条件构造器Wrapper

这篇具有很好参考价值的文章主要介绍了MyBatis-Plus:条件构造器Wrapper。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.Wrapper概述

1.1.Wrapper的继承关系

1.2.Wapper介绍 

1.3.各个构造器使用区别

1.4.构造器常用方法

2.Wrapper常用构造器介绍

2.1.QueryWrapper

2.2.UpdateWrapper

2.3.LambdaQueryWrapper

2.4.AbstractWrapper

3. Lambda条件构造器

3.1.示例

4.鸣谢


​​​​​1.Wrapper概述

        我们在实际操作数据库的时候会涉及到很多的条件。所以MP为我们提供了一个功能强大的条件构造器 Wrapper 。使用它可以让我们非常方便的构造条件。

        Wrapper是MyBatis-Plus提供的一种查询条件封装类,用于构建查询条件。它是一个抽象类,有三个具体的实现类,分别是QueryWrapper、UpdateWrapper和LambdaQueryWrapper。其中,QueryWrapper和LambdaQueryWrapper用于构建查询条件,UpdateWrapper用于构建更新条件。

        使用Wrapper可以方便地构建复杂的查询条件,支持链式调用,可以通过and、or等方法将多个条件组合起来。同时,Wrapper还提供了一些常用的方法,如eq、ne、gt、ge、lt、le等,可以方便地构建等值、不等值、大于、小于等各种条件。

        另外,LambdaQueryWrapper是MyBatis-Plus 3.x新增的功能,它支持使用Lambda表达式构建查询条件,使得代码更加简洁易读。

1.1.Wrapper的继承关系

MyBatis-Plus:条件构造器Wrapper

Wrapper  条件构造抽象类
    -- AbstractWrapper 查询条件封装,用于生成 sql 中的 where 语句。
        -- QueryWrapper Entity 对象封装操作类,用于查询。
        -- UpdateWrapper Update 条件封装操作类,用于更新。
        -- AbstractLambdaWrapper 使用 Lambda 表达式封装 wrapper
            -- LambdaQueryWrapper 使用 Lambda 语法封装条件,用于查询。
            -- LambdaUpdateWrapper 使用 Lambda 语法封装条件,用于更新。

MybatisPlus的EntityWrapper,在3.0版本以上就没了,改为了QueryWrapper。 

1.2.Wapper介绍 

Wrapper : 条件构造抽象类,最顶端父类

AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

QueryWrapper : Entity 对象封装操作类,不是用lambda语法

UpdateWrapper : Update 条件封装,用于Entity对象更新操作

AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。

LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper

LambdaUpdateWrapper : Lambda 更新封装Wrapper

1.3.各个构造器使用区别

        1)QueryWrapper、QueryChainWrapper只能指定需要的数据库列名;
        2)LambdaQueryWrapper、LambdaQueryChainWrapper可以通过Lambda获取数据库列名;
        3)QueryWrapper 、LambdaQueryWrapper不能使用链式查询的方式,必须借助BaseMapper来执行;
        4)QueryChainWrapper、LambdaQueryChainWrapper可以使用链式查询的方式,如list(),one();

1.4.构造器常用方法

MyBatis-Plus:条件构造器Wrapper

  • eq:equals,等于

  • gt:greater than ,大于 >

  • ge:greater than or equals,大于等于≥

  • lt:less than,小于<

  • le:less than or equals,小于等于≤

  • between:相当于SQL中的BETWEEN

  • like:模糊匹配。like(“name”,“黄”),相当于SQL的name like ‘%黄%’

  • likeRight:模糊匹配右半边。likeRight(“name”,“黄”),相当于SQL的name like ‘黄%’

  • likeLeft:模糊匹配左半边。likeLeft(“name”,“黄”),相当于SQL的name like ‘%黄’

  • notLike:notLike(“name”,“黄”),相当于SQL的name not like ‘%黄%’

  • isNull

  • isNotNull

  • and:SQL连接符AND

  • or:SQL连接符OR

  • in: in(“age",{1,2,3})相当于 age in(1,2,3)

  • groupBy: groupBy(“id”,“name”)相当于 group by id,name

  • orderByAsc :orderByAsc(“id”,“name”)相当于 order by id ASC,name ASC

  • orderByDesc :orderByDesc (“id”,“name”)相当于 order by id DESC,name DESC

 

2.Wrapper常用构造器介绍

        字面来理解,就是定义各种各样的条件,相当于sql语句中的(where),wrapper条件构造器是一个接口,是一个顶级父类,它下面有各种实现类,今天重点介绍LambdaQueryWrapper和LambdaUpdateWrapper

2.1.QueryWrapper

        QueryWrapper是用于查询的Wrapper条件构造器,可以通过它来构建SELECT语句中的WHERE条件

    @Test
    public void testQueryWrapper() {
    // 查询条件构造器
    QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
    wrapper.eq("banner_id", id);
    // 查询操作
    List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);


    //我们可以引入lambda,避免在代码中写类似的于banner_id的硬编码
    QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
    wrapper.lambda().eq(BannerItem::getBannerId, id);
    List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
    }

2.2.UpdateWrapper

        QueryWrapper是用于查询的Wrapper条件构造器,可以通过它来构建SELECT语句中的WHERE条件:

SQL SET 字段
        例: set("name", "老李头")
        例: set("name", "")--->数据库字段值变为空字符串
        例: set("name", null)--->数据库字段值变为null    

    @Test
    public void testUpdateWrapper() {

    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();

    updateWrapper.set("age", 20).eq("name", "张三");

    int affectedRows = userMapper.update(null, updateWrapper);

    }

2.3.LambdaQueryWrapper

        Lambda条件构造器是一种更加便捷、类型安全的Wrapper条件构造器,可以通过Lambda表达式来构建WHERE条件

作用:

        1)字段检查,防止字段写错

        2)防止传入的数据为null作为条件

书写方式如下:

        1)引入对象

        2)调用函数

为了简化lambda的使用,我们可以改写成LambdaQueryWrapper构造器,语法如下:

LambdaQueryWrapper<BannerItem> wrapper = new QueryWrapper<BannerItem>().lambda();
wrapper.eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);

我们可以再次将QueryWrapper<BannerItem>.lambda()简化,变成这个样子

LambdaQueryWrapper<BannerItem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);

链式查询
MyBatis-Plus还提供了一种链式查询的方式,和上面的代码效果一样。
但是这种写法偏向于炫技,可读性没有上面的代码强,大家可以根据需要自行选择方式。

List<BannerItem> bannerItems = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getBannerId, id)
                        .list();

如果只想查询一条记录,例如通过id查询某条记录的详情,使用.one()即可,例如

BannerItem bannerItem = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getId, id)
                        .one();

2.4.AbstractWrapper

完整的AbstractWrapper方法可以参照: https://baomidou.com/guide/wrapper.html#abstractwrapper

3. Lambda条件构造器

​        前面在使用条件构造器时列名都是用字符串的形式去指定。这种方式无法在编译期确定列名的合法性。

         所以MP提供了一个Lambda条件构造器可以让我们直接以实体类的方法引用的形式来指定列名。

Lambda条件构造器相比于传统的Wrapper条件构造器,具有以下几个好处:

  1. 更加简洁易懂:Lambda条件构造器使用Lambda表达式来构建WHERE条件,代码更加简洁易懂,不需要繁琐的字符串拼接(避免硬编码)。

  2. 更加类型安全:Lambda条件构造器在编译时就能检查出类型错误,避免在运行时出现类型转换异常的问题。

  3. 更加灵活:Lambda条件构造器支持链式调用,可以方便地组合多个条件,还支持自定义SQL片段,更加灵活

3.1.示例

要执行的查询对应的SQL如下

SELECT 
	id,user_name,PASSWORD,NAME,age,address 
FROM 
	USER 
WHERE 
	age > 18 AND address = '狐山'

如果使用之前的条件构造器写法如下

    @Test
    public void testLambdaWrapper(){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.gt("age",30);
        queryWrapper.eq("address","黄山");
        List<User> users = userMapper.selectList(queryWrapper);
    }

如果使用Lambda条件构造器写法如下

    @Test
    public void testLambdaWrapper2(){
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.gt(User::getAge,30);
        queryWrapper.eq(User::getAddress,"黄山");
        List<User> users = userMapper.selectList(queryWrapper);
    }

4.鸣谢

[1] https://blog.csdn.net/lt326030434/article/details/106571670文章来源地址https://www.toymoban.com/news/detail-502762.html

到了这里,关于MyBatis-Plus:条件构造器Wrapper的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis-Plus条件构造器[常用的模糊查询、排序查询、逻辑查询和指定字段查询案例]

    Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客  Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客 MyBaits-Plus中@TableField和@TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作(通过id更新和条件更新)_心态还需努力呀的博客

    2024年02月06日
    浏览(88)
  • 【MyBatis Plus】深入探索 MyBatis Plus 的条件构造器,自定义 SQL语句,Service 接口的实现

    在前文中,介绍了 MyBatis Plus 的一些基础功能,我们发现使用MyBatis Plus 可以非常简单的就实现对单表的增删改查操作。但是这些操作对应的 SQL 语句都非常简单,如果是面对一些复杂的 SQL 或者多表查询这样的情况,就需要我们自己来重新组织 SQL 语句了。 本文将重点探索 M

    2024年02月07日
    浏览(50)
  • Java中使用es条件构造器BoolQueryBuilder

    由于es在java中查询没法像mybatis那样方便,而且es的构造器使用也比较繁琐,理解不是很方便,所以写一篇文章来记录es构造器BoolQueryBuilder查询时各种条件的构造的正确姿势。 1.构造准备 2.条件构造 must可用filter代替,查询效率会更高,因为must会对结果进行_score评估 3.构造完成

    2024年02月11日
    浏览(54)
  • MybatisPlus-CRUD,不带条件构造器的常用方法

    BaseMapper中封装好了增删改查的方法 后面直接调用就好了 测试类 ----------------------------------------------------------------- ServiceImpl中封装了方法(特别注意批量添加只有serviceImpl中有) 测试类

    2024年02月14日
    浏览(33)
  • MyBatisPlus详解(二)条件构造器Wrapper、自定义SQL、Service接口

    MyBatisPlus详解系列文章: MyBatisPlus详解(一)项目搭建、@TableName、@TableId、@TableField注解与常见配置 2.1.1 Wrapper 在BaseMapper接口提供的相关方法中,除了以id作为where条件, 还支持更加复杂的where条件,即条件构造器Wrapper : Wrapper是条件构造器的抽象类,其下有很多默认实现,继承

    2024年04月25日
    浏览(49)
  • Mybatisplus 传参参数为自定义sql, 使用条件构造器作为参数

    1 pom依赖 2 mapper 接口文件 3 mapper 的xml配置文件 4 查询 5 测试,生成的两个sql语句如下 注意 :不同的版本,可能会有部分区别,总之注意下版本

    2024年02月22日
    浏览(50)
  • Java中构造器详解(类的五成员之三:构造器)

    先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。 Java的基本单位是类,类中包含五个部分,这篇写的是 构造器 。 (1)变量 (2)方法 (3)构造器 (4)初始化块 (5)内部类 ①构造器是处于Java类中的一个方法,最大的作用创建对象时执行

    2024年02月08日
    浏览(43)
  • 7.5 构造器详解

    7.5 构造器详解 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点: 必须和类的名字相同 必须没有返回类型,也不能写void 一个类即使什么都不写都会存在一个构造方法。 构造器的作用 可以实例化一些初始值,比如一些游戏

    2024年02月14日
    浏览(38)
  • Java 构造器

    2024年02月12日
    浏览(114)
  • 单例模式与构造器模式

    单例模式(Singleton Pattern):创建型模式,提供了一种创建对象的最佳方式,这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建 在应用程序运行期间,单例模式只会在全局作用域下创建一次实例对象,让所有需要调用的地方都共享这一单

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包