目录用LambdaWrapper去实现去重查询我们知道QueryWrapper转换成LambdaWrapper总结用LambdaWrapper去实现去重查询我们知道LambdaWrapper比较好用,但是LambdaWrapper却不能实现select(String s)那只需要进行QueryWrapper与LambdaQueryWrapper的混合使用就可以了,所以巧妙转换很重要@Override public Integer getCountAbPressure(String customerI
熟悉MyBatis-Plus的朋友都知道,LambdaWrapper在类型安全和代码可读性上确实好用,但它在使用上有个不大不小的“门槛”:它本身不直接提供类似select(String columns)这样的方法来指定包含DISTINCT等关键字的复杂查询字段。
遇到需要去重查询的场景,难道就要放弃Lambda语法的优雅吗?其实不然。一个常见的思路是,让QueryWrapper和LambdaQueryWrapper来个“混合双打”——先用QueryWrapper构建核心的SELECT部分,再无缝切换到Lambda表达式来完善条件。这个转换过程,就是解决问题的关键。
@Override public Integer getCountAbPressure(String customerId, LocalDateTime firstDay, LocalDateTime lastDay, Listlist, 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并调用了select(“DISTINCT version”)之后,只需要紧接着调用一个.lambda()方法,整个Wrapper就立刻“变身”,后续所有条件都可以用Lambda表达式来书写了。
这种方式既保留了SQL指定字段的灵活性,又享受了Lambda表达式带来的编译期检查和代码智能提示的好处,可以说是两全其美。
总而言之,当LambdaWrapper遇上需要DISTINCT或复杂字段选择的查询时,别急着否定它。记住“QueryWrapper打头,.lambda()接棒”这个组合技,就能轻松跨越这个小小的障碍。上面分享的方案在实践中被证明是可靠且高效的,希望能为大家在开发中提供一种清晰的解决思路。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述