皮皮奶 2024-06-13 11:18 采纳率: 33.3%
浏览 8
已结题

关于#Mybatis#的问题:怎么办重复数据如下"KSDM":37,"KSMC":"呼吸内科门诊","ksdm":37,"ksmc":"呼吸内科门诊"xml文件填写

问题:
使用mybatis的时候返回数据会重复,怎么办
重复数据如下
"KSDM":37,"KSMC":"呼吸内科门诊","ksdm":37,"ksmc":"呼吸内科门诊"
xml文件填写


```xml
    <resultMap id="yspb_ghks_ygdm_map" type="com.example.demo.bean.ms_yspb">
        <result property="GHXE" column="GHXE"/>
        <result property="YYXE" column="YYXE"/>
        <result property="GZRQ" column="GZRQ" jdbcType="DATE"/>
        <result property="ZBLB" column="ZBLB"/>
        <result property="YGRS" column="YGRS"/>
        <result property="YYRS" column="YYRS"/>
        <collection property="ms_ghks2List" ofType="com.example.demo.bean.ms_ghks2" javaType="java.util.List">
            <result property="KSDM" column="KSDM" jdbcType="BIGINT"/>
            <result property="KSMC" column="KSMC" jdbcType="VARCHAR"/>
        </collection>
        <collection property="gy_ygdmList" ofType="com.example.demo.bean.gy_ygdm" javaType="java.util.List">
            <result property="YGXM" column="YGXM" jdbcType="VARCHAR"/>
        </collection>
    </resultMap>
    <select id="selectysxxMapList" parameterType="java.util.HashMap" resultMap="yspb_ghks_ygdm_map"   >
        SELECT
        MS_GHKS.KSDM,
        MS_GHKS.KSMC,
        GY_YGDM.YGXM,
        MS_YSPB.GHXE,
        MS_YSPB.YYXE,
        MS_YSPB.GZRQ,
        MS_YSPB.ZBLB,
        MS_YSPB.YGRS,
        MS_YSPB.YYRS
        FROM MS_YSPB
        left join MS_GHKS on MS_YSPB.KSDM=MS_GHKS.KSDM
        left join GY_YGDM on MS_GHKS.KSDM=GY_YGDM.KSDM
        WHERE
        (MS_YSPB.GZRQ <![CDATA[ >= ]]> date'2024-06-02') and
        (MS_YSPB.GZRQ <![CDATA[ <= ]]> date'2024-06-03')
        and MS_YSPB.KSDM
                <foreach collection="KSDMs" item="KSDM" open="in (" close=")" separator=",">
                    #{KSDM}
                </foreach>
        and MS_YSPB.PBWC=1
    </select>



  • 写回答

11条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-06-13 11:19
    关注

    🕖上午好,题主!目前:🟢[在线]
    📢参考通义千问、由郭老师整理提供!
    📣今日诗号:春水碧于天,画船听雨眠。

    问题原因在于你的 SQL 查询结果中,KSDMKSMC 字段重复出现,导致 MyBatis 在映射数据时,将相同的数据重复填充到 ms_ghks2List 集合中。

    解决方案:

    1. 优化 SQL 查询语句: 避免在查询结果中出现重复字段。

      SELECT DISTINCT
          MS_GHKS.KSDM,
          MS_GHKS.KSMC,
          GY_YGDM.YGXM,
          MS_YSPB.GHXE,
          MS_YSPB.YYXE,
          MS_YSPB.GZRQ,
          MS_YSPB.ZBLB,
          MS_YSPB.YGRS,
          MS_YSPB.YYRS
      FROM MS_YSPB
      LEFT JOIN MS_GHKS ON MS_YSPB.KSDM = MS_GHKS.KSDM
      LEFT JOIN GY_YGDM ON MS_GHKS.KSDM = GY_YGDM.KSDM
      WHERE (MS_YSPB.GZRQ >= date'2024-06-02')
        AND (MS_YSPB.GZRQ <= date'2024-06-03')
        AND MS_YSPB.KSDM IN
          <foreach collection="KSDMs" item="KSDM" open="(" close=")" separator=",">
              #{KSDM}
          </foreach>
        AND MS_YSPB.PBWC = 1
      

      SELECT 语句中添加 DISTINCT 关键字,可以去除查询结果中的重复行。

    2. 使用嵌套查询: 将查询 MS_GHKS 表的逻辑放到子查询中,避免重复字段。

      SELECT 
          (SELECT KSDM FROM MS_GHKS WHERE KSDM = MS_YSPB.KSDM) AS KSDM,
          (SELECT KSMC FROM MS_GHKS WHERE KSDM = MS_YSPB.KSDM) AS KSMC,
          GY_YGDM.YGXM,
          MS_YSPB.GHXE,
          MS_YSPB.YYXE,
          MS_YSPB.GZRQ,
          MS_YSPB.ZBLB,
          MS_YSPB.YGRS,
          MS_YSPB.YYRS
      FROM MS_YSPB
      LEFT JOIN GY_YGDM ON MS_YSPB.KSDM = GY_YGDM.KSDM
      WHERE (MS_YSPB.GZRQ >= date'2024-06-02')
        AND (MS_YSPB.GZRQ <= date'2024-06-03')
        AND MS_YSPB.KSDM IN
          <foreach collection="KSDMs" item="KSDM" open="(" close=")" separator=",">
              #{KSDM}
          </foreach>
        AND MS_YSPB.PBWC = 1
      

      将查询 KSDMKSMC 的逻辑放到子查询中,可以确保每个字段只出现一次。

    选择哪种方案取决于你的具体需求和数据库性能。建议先尝试使用 DISTINCT 关键字优化查询语句,如果性能不佳,再考虑使用嵌套查询。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月13日
  • 创建了问题 6月13日

悬赏问题

  • ¥30 代码本地运行正常,但是TOMCAT部署时闪退
  • ¥15 关于#python#的问题
  • ¥15 主机可以ping通路由器但是连不上网怎么办
  • ¥15 数据库一张以时间排好序的表中,找出多次相邻的那些行
  • ¥50 关于DynamoRIO处理多线程程序时候的问题
  • ¥15 kubeadm部署k8s出错
  • ¥15 Abaqus打不开cae文件怎么办?
  • ¥20 双系统开机引导中windows系统消失问题?
  • ¥15 小程序准备上线,软件开发公司需要提供哪些资料给甲方
  • ¥15 关于生产日期批次退货退款,库存回退的问题