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

                                       

相关内容

热门资讯

可赏、可逛、可购,贵安这处冬日... 1月29日,记者来到贵州梅园,冬日暖阳洒满山岗,这片1800余亩的梅园里,5万余株寒梅竞相吐蕊,27...
来发记榴莲主题餐厅试营业:进博... 鲁网1月30日讯 青砖黛瓦映南洋风情,果香四溢聚四海宾朋。1月16日,首届马来西亚(青岛)榴莲节在市...
千年宫廷酒如何讲出新故事?剑南... 在白酒行业深度调整与存量竞争的双重挑战背景下,品牌如何破圈创新、精准触达消费者、实现业绩增长?当消费...
“聚势赢新”,太白酒以四大主张... 文 | 晏清 1月30日,“太白聚势,老酒赢新——太白酒2026新品上市暨老酒封藏启动仪式”在西安隆...
山海之约,静待启幕——直击黔酒... 来源:市场资讯 (来源:遵义晚报) 椰风海韵间,一场跨越千里的“风味对话”即将开启。2026年1月3...