Mybatis以 paramDTO对象集合 进行批量查询去重问题
admin
2024-05-10 12:01:54

    在上一篇文章 Mybatis框架,以 paramDTO对象集合形式进行批量查询  中,我介绍了如何以 paramDTO 对象集合 的形式进行批量数据查询。在文章末尾,也说了批量查询中存在的一些坑。我们运行下面的SQL,来看看 以对象集合 的方式批量查询中的错误。

SELECT u.id,u.is_deleted,u.NAME,u.age,u.create_date FROM rk_user u 
WHEREu.is_deleted = 'n' AND (( 1 = 1 AND u.NAME = "张三三" AND u.age = 28 ) OR ( 1 = 1 AND u.NAME = "刘丽丽" AND u.age = 27 ) OR ( 1 = 1 AND u.NAME = "李四" AND u.age = 25 ) OR ( 1 = 1 AND u.NAME = "王小二" AND u.age = 18 ) OR ( 1 = 1 AND u.NAME = "李四" AND u.age = 25 ) ) 
ORDER BYu.id DESC,u.create_date DESC;

       在上面的SQL (name + age) 的组合条件中, (u.NAME = "李四" AND u.age = 25) 的组合重复了,之所以会出现重复,是因为在入参 paramDTOList 中出现重复的数据。

       paramDTOList中出现重复的 paramDTO 有时会导致查询的结果出现有重复的数据,因此需要对入参参数 paramDTOList 去重,对 SQL 进行去重。

      对SQL去重比较简单,我们使用 DISTINCT 关键字即可实现。但对 paramDTOList 去重,不能直接使用 paramDTOList = paramDTOList.stream().distinct().collect(Collectors.toList()) , 因为 paramDTO 是一个对象,不是某个属性。

                                  

       paramDTOList 集合对象去重,有好几种方式,具体实现可以参考我的文章: List集合DTO对象去重的三种方法   ,我推荐直接重写 paramDTO 对象中的 hashCode()、equals() 函数,或者在 paramDTO 对象上添加 lombok组件 的 @Data 注解。

        2023年农历春节马上就要到了,祝大家好运绵绵。

                                       

相关内容

热门资讯

修文猕猴桃成熟上市!奉上修文秋... 秋光正好,果香漫山。经过一整个夏天阳光雨露的滋养,修文贵长猕猴桃,9月10日后陆续成熟上市。果肉绵密...
多重礼遇!惠州送出“惠师文旅大... 2026年9月10日是我国第42个教师节。南都记者从惠州市教育局获悉,为庆祝2026年教师节,大力弘...
把音乐厅搬进喀斯特溶洞是什么体...   近日,一场融合多元艺术形式的洞穴音乐会在贵州省修文县举行,五百余名观众在喀斯特溶洞之中,感受了一...
教师专享福利!北京这些景区免票... 新京报讯 据首都教育消息,教师节将至,北京多家景区为老师们准备了专属免票福利!这份优惠合集已整理好,...
黑茶,喝的是一种境界与健康 在专门用来喝黑茶的茶具“飘逸杯”里,黑茶茶汤看起来并不像“黑茶”这个名字那样黑黢黢的一团。 玻璃器皿...