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年农历春节马上就要到了,祝大家好运绵绵。

                                       

相关内容

热门资讯

穿越天山遇见四季童话:新疆深度... 穿越天山遇见四季童话:新疆深度旅行指南与秘境故事 序章:一封来自西域的情书 每年六月,当伊犁河谷的薰...
从戈壁到花海:一位新疆本地向导... 从戈壁到花海:一位新疆本地向导的四季旅行手记 在新疆生活了近二十年,我依然记得第一次被这片土地震撼的...
穿越军 - 穿越中国亲子挑战赛... 以前总带孩子去各地旅游,打卡景点、吃美食,回来之后孩子除了照片,什么都没留下,直到带他参加穿越军亲子...
2026最新山东旅行社综合实力... 随着 2026 年旅游市场持续升温,山东凭借 "一山一水一圣人" 的独特魅力和丰富的文旅资源,成为国...
二十年,再赴大熊山 人间忽晚,山河已秋。一别大熊山,已是整整二十载。 那时我匆匆登临,步履轻快,眼里只有山川壮阔、林木葱...