通过IService中提供的Lambda方法,简化复杂/动态sql语句的编写

这篇具有很好参考价值的文章主要介绍了通过IService中提供的Lambda方法,简化复杂/动态sql语句的编写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

案例:

要求实现一个根据复杂条件查询用户的接口,查询条件如下:

1. name:用户名关键字,可以为空
2. status:用户状态,可以为空
3. minBalance:最小余额,可以为空
4. maxBalance:最大余额,可以为空

可以理解成一个用户的后台管理界面,管理员可以自己选择条件来筛选用户,因此上述条件不一定存在,需要做判断。

如果用mybatis编写,我们可以通过xml映射实现动态sql语句,如下图所示,但是这样比较麻烦。

通过IService中提供的Lambda方法,简化复杂/动态sql语句的编写,MybatisPlus,学习笔记,sql,java,数据库

我们可以先构建条件构造器,再通过IService中的list方法进行查询。代码如下:

@GetMapping("/list")
@ApiOperation("根据id集合查询用户")
public List<UserVO> queryUsers(UserQuery query){
    // 1.组织条件
    String username = query.getName();
    Integer status = query.getStatus();
    Integer minBalance = query.getMinBalance();
    Integer maxBalance = query.getMaxBalance();
    LambdaQueryWrapper<User> wrapper = new QueryWrapper<User>().lambda()
            .like(username != null, User::getUsername, username)
            .eq(status != null, User::getStatus, status)
            .ge(minBalance != null, User::getBalance, minBalance)
            .le(maxBalance != null, User::getBalance, maxBalance);
    // 2.查询用户
    List<User> users = userService.list(wrapper);
    // 3.处理vo
    return BeanUtil.copyToList(users, UserVO.class);
}

但是这样还是比较复杂,我们甚至可以不用构建条件构造器,直接调用lambdaQuery方法即可,代码如下:

@GetMapping("/list")
@ApiOperation("根据id集合查询用户")
public List<UserVO> queryUsers(UserQuery query){
    // 1.组织条件
    String username = query.getName();
    Integer status = query.getStatus();
    Integer minBalance = query.getMinBalance();
    Integer maxBalance = query.getMaxBalance();
    // 2.查询用户
    List<User> users = userService.lambdaQuery()
            .like(username != null, User::getUsername, username)
            .eq(status != null, User::getStatus, status)
            .ge(minBalance != null, User::getBalance, minBalance)
            .le(maxBalance != null, User::getBalance, maxBalance)
            .list();
    // 3.处理vo
    return BeanUtil.copyToList(users, UserVO.class);
}

需要注意的是lambdaQuery方法中除了可以构建条件,还需要在链式编程的最后添加一个list(),这是在告诉MP我们的调用结果需要是一个list集合。这里不仅可以用list(),可选的方法有:

.one():最多1个结果
.list():返回集合结果
.count():返回计数结果

MybatisPlus会根据链式编程的最后一个方法来判断最终的返回结果。文章来源地址https://www.toymoban.com/news/detail-821800.html

到了这里,关于通过IService中提供的Lambda方法,简化复杂/动态sql语句的编写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于Expression Lambda表达式树的通用复杂动态查询构建器——《原型篇一》[已开源]

    续接上编,本篇来讲讲俄罗斯套娃的设计与实现。 首先简单地完善一下前面提到的例子,代码如下: 测试实体类 独立条件类 条件组类 枚举   接下来,先构建查询条件描述器对象,由于例子代码比较简略,仅用于方便说明设计思路和方法,如果哪位看官直接拿来实用,请先备

    2024年02月06日
    浏览(28)
  • 基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇一》[已开源]

    在 上一篇 中 构思了把查询子句描述出来的数据结构,那么能否用代码将其表达出来,如何表达呢? 再次回顾考察,看下面的查询子句: 如上所示,有两个 独立的 条件 分别为 Id1 和 Id10 ,用一个逻辑操作符 and 连接起来。 再看下面这条,后面也是两个独立条件通过操作符

    2024年02月06日
    浏览(40)
  • 基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇二》已开源

    接续[上篇之预告] 本篇来讲讲,如何根据前面设计的查询描述器构造出可执行的表达式。正如标题所示,实现手段将采用 Expression Lambda 技术。 先来看看主角 System.Linq.Expressions.Expression 长什么样,都有些什么东西,能做什么。 先看看它的类图: System.Linq.Expressions.ConstantExpres

    2024年02月06日
    浏览(33)
  • 【C#】Sql Server 设置IN查询方法内的参数,固定参数、动态参数以及通过分隔含有逗号隔开的字符串转数据集

    在平时使用sql语句查询时,in查询肯定少不了,多数用于一些数据统计或者测试类。in查询并不建议放到实际常用的查询列表里。 此篇文章主要简单聊聊,in查询方法内的参数设置方式,以及通过分隔函数将含有逗号隔开的字符串转为数据集进行查询 在 SQL Server 中,你可以使

    2024年02月15日
    浏览(44)
  • 外观模式:简化复杂系统

    欢迎来到设计模式系列的第十一篇文章!在之前的文章中,我们已经学习了许多常用的设计模式,今天我们将继续介绍另一个非常有用的设计模式——外观模式。 外观模式简介 外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。 外观

    2024年02月09日
    浏览(36)
  • 通过国家网络风险管理方法提供安全的网络环境

    印度尼西亚通过讨论网络安全法草案启动了其战略举措。不过,政府和议会尚未就该法案的多项内容达成一致。另一方面,制定战略性、全面的网络安全方法的紧迫性从未像今天这样重要。 其政府官方网站遭受了多起网络攻击,引发了人们对国家网络安全状况的信任程度的担

    2024年02月03日
    浏览(40)
  • 这10个Lambda表达式必须掌握,简化你的代码,提高生产力

    Lambda 表达式(lambda expression)是一个匿名函数 ,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 Lambda表达式可以表示闭包,和传统数学上的意义有区别。 文末有本文重点总结,关于技术类问题可

    2024年02月05日
    浏览(30)
  • 外观模式:简化复杂子系统的访问与使用

    外观模式是一种结构型设计模式,它提供了一个统一的接口,用于简化复杂子系统的访问和使用。通过外观模式,可以隐藏子系统的复杂性,并将其封装在一个高层接口之后,使得客户端可以通过调用这个外观接口来间接地访问子系统的功能。外观模式有助于降低系统的耦合

    2024年02月10日
    浏览(35)
  • 【C语言】——递归函数,用递归简化并实现复杂问题

    不多废话了,直接开始。 递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢? 递归其实是⼀种解决问题的方法,在C语言中,递归就是函数调用自己。 写⼀个史上最简单的C语言递归代码: 上述就是一个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式

    2024年02月03日
    浏览(29)
  • 【C语言】——函数递归,用递归简化并实现复杂问题

    不多废话了,直接开始。 递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢? 递归其实是⼀种解决问题的方法,在C语言中,递归就是函数调用自己。 写⼀个史上最简单的C语言递归代码: 上述就是一个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式

    2024年02月05日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包