Mybatis Plus LambdaQueryWrapper的具体用法

 更新时间:2023年11月09日 11:04:29   作者:后端码匠  
Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加简便的查询语法,同时也避免了SQL注入的风险,感兴趣的可以了解一下

前言

为了更方便的实现动态 SQL,Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加简便的查询语法,同时也避免了 SQL 注入的风险。

LambdaQueryWrapper 实现了 QueryWrapper 的全部功能,并提供了基于 Lambda 表达式的查询方式,使得查询语法更加优雅。使用 LambdaQueryWrapper,可以方便的实现各种查询条件的拼接,如 whereandorinlikebetween 等条件。

LambdaQueryWrapper 通过函数式编程的方式,提供了多种方法用于实现各种查询条件的拼接,这些方法包括 eq、ne、gt、ge、lt、le、in、notIn、like、notLike、between、notBetween、isNull、isNotNull 等。

与QueryWrapper对比

LambdaQueryWrapper 和 QueryWrapper 都是 Mybatis Plus 中的查询条件封装类,其中 LambdaQueryWrapper 是基于 Lambda 表达式的实现,而 QueryWrapper 是基于字符串的实现。它们的优缺点如下:

LambdaQueryWrapper 优点

  • 代码简洁,易读易写,使用 Lambda 表达式可避免手写字符串繁琐容易出错
  • 类型安全,LambdaQueryWrapper 在编译期间就能够捕获类型错误避免运行时出现类型错误
  • 更加灵活,LambdaQueryWrapper 支持链式调用,支持多个条件之间的 and 和 or 关系组合,支持子查询等复杂查询操作。

LambdaQueryWrapper 缺点

  • LambdaQueryWrapper 基于 Lambda 表达式实现,可能存在一些性能问题,在大数据量查询时可能会影响查询性能。

QueryWrapper 优点

  • 在少量数据查询时,QueryWrapper 通常比 LambdaQueryWrapper 更快,因为它不需要解析 Lambda 表达式
  • QueryWrapper 更加灵活,可以使用字符串直接拼接 SQL,支持 SQL 函数等更多高级查询操作
  • 对于老旧代码,QueryWrapper 更加适合兼容扩展

QueryWrapper 缺点

  • 代码可读性和可维护性较差,手写 SQL 字符串容易出错,并且不易于维护修改
  • 使用字符串拼接 SQL,容易受到 SQL 注入攻击需要特别注意防范
  • 编译期不能捕获类型错误,需要在运行时才能发现类型错误。

综上推荐使用 LambdaQueryWrapper(此外,LambdaQueryWrapper 还具有良好的兼容性和扩展性,可以轻松适应不同的业务需求,提高开发效率和代码质量)。

案例

简单查询

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUsername, "张三")
        .and(w -> w.between(User::getAge, 18, 30)
                .or().eq(User::getGender, 1))
        .orderByDesc(User::getCreateTime);

List<User> userList = userMapper.selectList(wrapper);

首先创建了一个 LambdaQueryWrapper 对象,然后通过 eq 方法添加一个等于条件,表示查询用户名为“张三”的用户。接着,使用 and 方法添加一个条件组,该组包含了一个 between 条件和一个 or 条件,分别表示查询年龄在 18 到 30 之间的用户,或者查询性别为 1 的用户。注意,条件组中的多个条件之间默认是 and 的关系,可以通过 or 方法切换为 or 的关系。最后,使用 orderByDesc 方法对查询结果进行排序,按照创建时间倒序排列。

使用 LambdaQueryWrapper 进行查询时,还可以通过 select 方法来自定义查询字段,从而实现对查询结果的灵活控制。

select

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 20)
        .select(User::getId, User::getUserName, User::getAge);

List<User> userList = userMapper.selectList(wrapper);

首先通过 LambdaQueryWrapper 对象创建了一个查询条件,然后使用 eq 方法添加了一个等于条件,表示查询年龄为 20 的用户。接着,通过 select 方法来自定义查询字段,只查询 id、username、age 三个字段,这些字段是以逗号分隔的字符串形式传入的。最后,调用 selectList 方法执行查询操作,得到查询结果。

到此这篇关于Mybatis Plus LambdaQueryWrapper的具体用法的文章就介绍到这了,更多相关Mybatis Plus LambdaQueryWrapper内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java微服务实战项目尚融宝接口创建详解

    Java微服务实战项目尚融宝接口创建详解

    这篇文章主要介绍了Java微服务实战项目尚融宝的接口创建流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 学习Java中的日期和时间处理及Java日历小程序的编写

    学习Java中的日期和时间处理及Java日历小程序的编写

    这篇文章主要介绍了学习Java中的日期和时间处理及Java日历小程序的编写,这个日历小程序仅用简单的算法实现没有用到date类等,但是带有图形界面,需要的朋友可以参考下
    2016-02-02
  • 使用Java桥接模式打破继承束缚优雅实现多维度变化

    使用Java桥接模式打破继承束缚优雅实现多维度变化

    这篇文章主要为大家介绍了使用Java桥接模式打破继承束缚,优雅实现多维度变化,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • IDEA2022搭建Spring Cloud多模块项目的详细过程

    IDEA2022搭建Spring Cloud多模块项目的详细过程

    这篇文章主要介绍了IDEA2022搭建Spring Cloud多模块项目,网上有很多教程父模块都是通过maven的方式创建的,然后子模块是通过Spring Initalizr方式创建,这种方式父模块无法管理子模块的依赖仲裁,需要每个子模块自行管理,就失去了父模块的用处了
    2022-10-10
  • SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据

    SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据

    在处理大量数据时,为了提高效率和性能,通常需要采用批量插入的方式,本文主要介绍了SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Java二叉搜索树基础原理与实现方法详解

    Java二叉搜索树基础原理与实现方法详解

    这篇文章主要介绍了Java二叉搜索树基础原理与实现方法,结合图文与实例形式详细分析了Java二叉搜索树的基本概念、原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

    java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

    这篇文章主要介绍了java实现无符号数转换、字符串补齐、md5、uuid、随机数示例,需要的朋友可以参考下
    2014-04-04
  • 详解Java中实现SHA1与MD5加密算法的基本方法

    详解Java中实现SHA1与MD5加密算法的基本方法

    这篇文章主要介绍了详解Java中实现SHA1与MD5加密算法的基本方法,安全哈希算法第一版和消息摘要算法第五版也是通常人们最常用的加密算法,需要的朋友可以参考下
    2016-04-04
  • 在idea环境下构建springCloud项目

    在idea环境下构建springCloud项目

    本篇文章主要介绍了在idea环境下构建springCloud项目,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java的动态代理模式之JDK代理详解

    Java的动态代理模式之JDK代理详解

    这篇文章主要介绍了Java的动态代理模式之JDK代理详解,代理对象,不需要实现接口,但是目标对象要实现接口,否则不能用动态代理,JDK 实现代理只需要使用 newProxyInstance 方法,但是该方法需要接收三个参数,需要的朋友可以参考下
    2023-11-11

最新评论