首页 > 数据库 >使用LambdaWrapper实现去重查询方式

使用LambdaWrapper实现去重查询方式

来源:互联网 2026-03-25 19:25:04

目录用LambdaWrapper去实现去重查询我们知道QueryWrapper转换成LambdaWrapper总结用LambdaWrapper去实现去重查询我们知道LambdaWrapper比较好用,但是LambdaWrapper却不能实现select(String s)那只需要进行QueryWrapper与LambdaQueryWrapper的混合使用就可以了,所以巧妙转换很重要@Override public Integer getCountAbPressure(String customerI

目录
  • 用LambdaWrapper去实现去重查询
    • LambdaWrapper的限制与破局思路
    • QueryWrapper与LambdaWrapper的混合使用技巧
  • 总结

    用LambdaWrapper去实现去重查询

    LambdaWrapper的限制与破局思路

    熟悉MyBatis-Plus的朋友都知道,LambdaWrapper在类型安全和代码可读性上确实好用,但它在使用上有个不大不小的“门槛”:它本身不直接提供类似select(String columns)这样的方法来指定包含DISTINCT等关键字的复杂查询字段。

    遇到需要去重查询的场景,难道就要放弃Lambda语法的优雅吗?其实不然。一个常见的思路是,让QueryWrapper和LambdaQueryWrapper来个“混合双打”——先用QueryWrapper构建核心的SELECT部分,再无缝切换到Lambda表达式来完善条件。这个转换过程,就是解决问题的关键。

    @Override
    public Integer getCountAbPressure(String customerId, LocalDateTime firstDay, LocalDateTime lastDay, List list, Integer type) {
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.select("DISTINCT version")
                .lambda()
                .eq(CustomerBodyMetricsEntity::getCustomerId, customerId)
                .ge(CustomerBodyMetricsEntity::getVersion, DateTimeUtil.dateTimeToTimestamp(firstDay))
                .le(CustomerBodyMetricsEntity::getVersion, DateTimeUtil.dateTimeToTimestamp(lastDay))
                .in(CustomerBodyMetricsEntity::getMetric, list)
                .ne(CustomerBodyMetricsEntity::getLabel, 20);
        return this.count(wrapper);
    }
    

    QueryWrapper与LambdaWrapper的混合使用技巧

    从上面的代码片段就能看出,实现这种混合使用的“魔法”其实异常简单。在创建了QueryWrapper并调用了select(“DISTINCT version”)之后,只需要紧接着调用一个.lambda()方法,整个Wrapper就立刻“变身”,后续所有条件都可以用Lambda表达式来书写了。

    这种方式既保留了SQL指定字段的灵活性,又享受了Lambda表达式带来的编译期检查和代码智能提示的好处,可以说是两全其美。

    总结

    总而言之,当LambdaWrapper遇上需要DISTINCT或复杂字段选择的查询时,别急着否定它。记住“QueryWrapper打头,.lambda()接棒”这个组合技,就能轻松跨越这个小小的障碍。上面分享的方案在实践中被证明是可靠且高效的,希望能为大家在开发中提供一种清晰的解决思路。

    侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

    热游推荐

    更多
    湘ICP备14008430号-1 湘公网安备 43070302000280号
    All Rights Reserved
    本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
    上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
    抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
    适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。