Mybatis-plus查询条件拒绝自动去重问题
更新时间:2025年12月08日 08:56:52 作者:春卷-huachun
文章讨论了在使用MyBatis进行多表数据关联查询时,由于主键ID重复导致数据被覆盖的问题,通过在实体类中添加伪列主键,并在查询中使用该伪列字段,可以确保每条数据都有一个唯一的标识,从而避免数据被去重
问题描述
当进行多表数据关联时候,使用mybatis结果集封装数据,mybatis会将主键id作为map的key值,如果后面有重复的主键id,那么将会覆盖之前的数据,很显然这不是多表关联查询数据想要看到的结果,如此以来,最终结果会比实际结果少很多,因为数据被去重了。
以下是正常使用的数据结果集声明
<resultMap type="com.hhmt.delivery.pojo.model.vo.HhAdxAdSeatVo" id="JoinResultMap">
省略...
</resultMap>
<resultMap id="HhAdxAdSeatRelationListResult"
省略...
</resultMap>正常的查询
<select id="selectHhAdxAdSeatRelationList" resultMap="HhAdxAdSeatRelationListResult">
SELECT
<include refid="Join_Column_List"/>,
省略...
</select>此时查询出来的结果被去重了,本来分页查10条结果却只有4条数据
解决办法
使用伪列,让每一条数据都有一个唯一的id,这样在存入map时候就不会覆盖数据
1.实体类中添加伪列主键
@TableId private Long rowNum;
2.查询中添加伪列字段
<!-- 结果集指定唯一id -->
<resultMap type="com.hhmt.delivery.pojo.model.vo.HhAdxAdSeatVo" id="JoinResultMap">
<id property="rowNum" column="rowNum"/>
省略...
</resultMap>
<!-- 查询中给一个唯一伪列ID -->
<select id="selectHhAdxAdSeatRelationList" resultMap="HhAdxAdSeatRelationListResult">
SELECT
@rowNum:=@rowNum+1 as rowNum,
<include refid="Join_Column_List"/>,
<include refid="com.hhmt.delivery.dao.HhAdxMediaInfoMapper.Join_Column_List"/>,
<include
省略...
</select>这样,最终查询的数据将不会被去重
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot集成thymeleaf渲染html模板的步骤详解
这篇文章主要给大家详细介绍了SpringBoot集成thymeleaf如何使实现html模板的渲染,文中有详细的代码示例,具有一定的参考价值,需要的朋友可以参考下2023-06-06
单台Spring Cloud Eureka升级到三台Eureka高可用集群
今天小编就为大家分享一篇关于单台Spring Cloud Eureka升级到三台Eureka高可用集群,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-12-12


最新评论