Mybatis 查询结果映射到实体对象的List属性,List中元素自动去重问题

10 Mybatis 专栏收录该内容
7 篇文章 0 订阅

mybatis中编码如下所示:

    <resultMap id="RM-BizGroupRelatedEventInfo" type="com.XXX.bean.BizGroupRelatedEventInfo">
        <result column="event_id" property="id" jdbcType="BIGINT" />
        <result column="event_name" property="name" jdbcType="VARCHAR" />
        <result column="image_obj" property="imageObj" jdbcType="VARCHAR" />
        <result column="inst_id" property="instId" jdbcType="BIGINT" />
        <result column="inst_name" property="teamName" jdbcType="VARCHAR" />
        <result column="description" property="description" jdbcType="VARCHAR" />
        <collection property="versionList" ofType="java.lang.String" javaType="java.util.List">
            <result column="event_version"/>
        </collection>
        <collection property="statusList" ofType="java.lang.Integer" javaType="java.util.List">
            <result column="event_version_status"/>
        </collection>
        <collection property="platforms" ofType="java.lang.Integer" javaType="java.util.List">
            <result column="platform"/>
        </collection>
    </resultMap>
    <select id="listRelatedEventInfoByGroupIdAndType" resultMap="RM-BizGroupRelatedEventInfo">
        select
        e.id event_id, e.name event_name, e.image_obj image_obj, e.description description, ev.version event_version, ev.status event_version_status, bep.platform platform, bi.id inst_id, bi.name inst_name
        from biz_event e, biz_event_version ev,	biz_event_version_group evg, biz_event_platform bep, biz_event_customer bec, biz_inst bi
        where 1 = 1
        and ev.id = evg.event_version_id
        and ev.event_id = e.id
        and evg.group_id = #{groupId,jdbcType=BIGINT}
        and evg.group_type = #{type,jdbcType=TINYINT}
        and bep.event_id = e.id
        and bec.event_id = e.id
        and e.inst_id = bi.id
    </select>

1,问题:

    查询出的结果中BizGroupRelatedEventInfo 对象的statusList 属性预期的正常结果应为[2,6,2],事实却是[2,6],也就是其中的元素被去重了。

2,解决:

    好在本人只用到的是statusList中的最新元素(即最后一个元素2),既然后面的被前面的给覆盖了,那么就把自己想要的结果倒序过来,放在第一个位置:

更改后的sql如下,也就是添加了 order by e.id, ev.id desc,将原来默认的e.id, ev.id asc 中的ev.id倒序了过来:

    <select id="selectRelatedEventInfoByGroupIdAndType" resultMap="RM-BizGroupRelatedEventInfo">
        select
        e.id event_id, e.name event_name, e.image_obj image_obj, e.description description, ev.version event_version, ev.status event_version_status, bep.platform platform, bi.id inst_id, bi.name inst_name
        from biz_event e, biz_event_version ev,	biz_event_version_group evg, biz_event_platform bep, biz_event_customer bec, biz_inst bi
        where 1 = 1
        and ev.id = evg.event_version_id
        and ev.event_id = e.id
        and evg.group_id = #{groupId,jdbcType=BIGINT}
        and evg.group_type = #{type,jdbcType=TINYINT}
        and bep.event_id = e.id
        and bec.event_id = e.id
        and e.inst_id = bi.id
        order by e.id, ev.id desc
    </select>

这样得到的statusList就是[2,6], 这个2是最新的一个状态值。

改变前如果statusList集合为[3,4,6],则改变后为[6,4,3],因为改变前获取的是最后一个元素6,改变后获取的则是第一个元素,是同一个值,所以暂时解决了本次遇到的问题。

备注:

    本人遇到的这种情况的解决问题是:只是用到了list类型属性中的一个值。对于仍需要全部list类型属性全部值(不去重)的话,本解决方法不适用,希望以后能够想到解决办法,如果路过的大佬知道解决方法的话,也期待能够指教一下。
  • 3
    点赞
  • 3
    评论
  • 10
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p> 本课程适合有JAVA和数据库基础人员。 </p> <p> 本课程使用Eclipse和<span style="font-size:13.3333px;">IntelliJ IDEA两种开发工具详细讲解了MyBatis各种语法并且讲解了MyBatis逆向工程和MyBatis两种常用插件:MyBatis Plus和通用Mapper。</span> </p> <p> <span style="font-size:13.3333px;">本课程从理论和实际案例两方面充分讲解了MyBatis各种技术细节和应用场景并且以绘图方式讲解了各种MyBatis较难技术点。</span> </p> <p> <span style="font-size:13.3333px;">相信可以通过本课程学习读者能够掌握MyBatis学习过程各种技巧和实际案例。</span> </p> <p> <span style="font-size:13.3333px;">本课程设计大致技术点如下所示。</span> </p> <p>       1.Eclipse、IntelliJ IDEA环境下开发MyBatis </p> <span></span>      2.MyBatis多种方式CRUD<br />       3.MyBatis配置文件详解<br />       4.MyBatis映射文件详解<br />       5.使用MyBatis调用存储过程<br />       6.动态SQL<br />       7.关联查询<br />       8.延迟加载<br />       9.整合一级、二级缓存<br />       10.逆向工程<br />       11.事务操作<br />       12.MyBatis处理多个参数问题<br />       13.鉴别器和别名<br />       14.各种方式模糊查询<br />       15.MyBatis核心源码分析<br />       16.MyBatis拦截器<br />       17.MyBatis批量更新操作<br />       18.PageHelper<br />       19.MyBatis Plus详解<br />       20.通用Mapper详解<br /><p>    希望大家可以通过本课程学习深入掌握MyBatis及其各种插件用法从而提高对数据操作效率 </p> <p> <br /></p>
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值