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月12日,游客在殷墟博物馆“甲骨文展厅”内参观。位于河南省安阳市的殷墟博物馆新馆是首个全景式展现商...
浦江之夜赴美好相逢,第37届上... 9月12日晚,黄浦江畔灯火璀璨,第37届上海旅游节大巡游在外滩中山东一路上演。不少观众早早便来到外滩...
美丽中国丨秋韵紫鹊界 梯田入画... 这是9月11日拍摄的紫鹊界梯田(无人机照片)。 金秋九月,湖南省娄底市新化县紫鹊界梯田稻谷渐次成熟。...
中国之巅奏响《共同的节日》,千... 千吨阻尼器,“迎世赛、游上海旅游节”。9月13日,由上海市文化和旅游局指导推出上海旅游·会客│巅峰之...