背景,作者在最近的开发中遇到一个问题:用户在页面填写了几条数据,前端使用字符串集合透传,但是在查看详情时,查看接口只返回了一条数据。经过核查发现,用户在页面填写了几条相同的内容,比如1、鸡你太美 2、鸡你太美 3、鸡你太美,类似的三条一模一样的数据,结果集只返回一条。
原因:在从数据库查询数据时,使用了mybatis的resultMap结果集来返回数据,对于上面的列表,作者是使用List来返回,使用mybatis的 collection标签来映射集合,而结果中的Object对象只有一个属性,结果自动去重。
下面是我的ResultMap映射
<resultMap id="AnnouncementManageResult" type="com.hp.wisdomadmin.dao.model.operateManage.AnnouncementManage">
<result column="id" property="id"/>
<result column="ann_type" property="annType"/>
<result column="ann_title" property="annTitle"/>
<result column="ann_content" property="annContent"/>
<result column="ann_status" property="annStatus"/>
<result column="ann_release_time" property="annReleaseTime"/>
<result column="ann_create_time" property="annCreateTime"/>
<result column="early_warn_sort" property="earlyWarnSort"/>
<result column="start_correct_cycle_time" property="startCorrectCycleTime"/>
<result column="end_correct_cycle_time" property="endCorrectCycleTime"/>
<result column="main_provider" property="mainProvider"/>
<result column="ability_remarks" property="abilityRemarks"/>
<result column="release_time" property="releaseTime"/>
<result column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="notice_modal_term" property="noticeModalTerm"/>
<result column="more_url" property="moreUrl"/>
<result column="pop_box_release_time" property="popBoxPublishTime"/>
<collection property="popBoxAnnouncementList" ofType="com.hp.wisdomadmin.model.operateManage.PopBoxAnnouncement">
<result column="popBoxAnnouncement" property="announcementContent"/>
</collection>
</resultMap>
collection中的ofType是一个对象,下面是对象的属性
@Data
public class PopBoxAnnouncement {
private String announcementContent;
}
解决方案:在集合的映射对象中新增一个id,也就是一个唯一的元素,防止自动去重。例如:
@Data
public class PopBoxAnnouncement {
private Integer id;
private String announcementContent;
}