zoukankan      html  css  js  c++  java
  • ibatis 实现多表关联,一对多,多对多关系

    多张表关联查询,一个产品对应多张图片结果集,同时对应多个联系人实现:

    数据结构如下:  

    整体结构:

      @Data
      public class FeaturedProducts {
        private String characteristicProductId;//特色产品id
        private String productsTitle;//产品标题
        private String productsDescription;//产品描述
        private List<String> productsImage;//产品图片结果集
        private List<Contacts> contacts;//特色产品联系人结果集

      }

      list<Bean>集合结构:

      @Data
      public class Contacts {
        private String contactId;//联系人id
        private String name;//联系人姓名
        private String phone;//联系人电话
        private String qrcode;//联系人二维码

      }

    最后得到结果集:

    [
      FeaturedProducts(

        characteristicProductId=7b1e2676-067b-11ea-88ec-00ff07e25c4a,

        productsTitle=dsd, productsDescription=sdd, 

        productsImage=[

          www.222.png,

          https://mmwtest2.oss-cn-hangzhou.aliyuncs.com/image/avatarPic/upload/201712/cardPic1513777343927.jpg,

          https://mmwtest2.oss-cn-hangzhou.aliyuncs.com/image/avatarPic/upload/201712/cardPic1513777343927.jpg,

          www.444.png, https://mmwtest2.oss-cn-hangzhou.aliyuncs.com/image/avatarPic/upload/201712/cardPic1513777343927.jpg,

          https://mmwtest2.oss-cn-hangzhou.aliyuncs.com/image/avatarPic/upload/201712/cardPic1513777343927.jpg

        ],
        contacts=[

          Contacts(contactId=2a7f8080-067d-11ea-88ec-00ff07e25c4a, name=mr.wu, phone=13200000000, qrcode=www.qrcode2.com),

          。。。可有多个

        ]

      ),
      FeaturedProducts(

        characteristicProductId=d775aaae-067b-11ea-88ec-00ff07e25c4a,

        productsTitle=fdffd,    

        productsDescription=sdsdad,

        productsImage=[

          www.555.png,

          www.333.png

        ], 

        contacts=[

          Contacts(contactId=f8976924-067c-11ea-88ec-bbbbbbbbbb, name=mr.zh, phone=13700000000, qrcode=www.qrcode.com),

          。。。可有多个

        ]

      )

    ]

    ibatis  xml文件:

     1、com.mmw100.enterpriseDetailandProfile.bean.FeaturedProducts为整体结构bean;featuredProductsResultMap对应下面select查询的resultMap;characteristicProductId为分组id

    <resultMap class="com.mmw100.enterpriseDetailandProfile.bean.FeaturedProducts" id="featuredProductsResultMap" groupBy="characteristicProductId">
      <result column="characteristicProductId" property="characteristicProductId"/>
      <result column="productsTitle" property="productsTitle"/>
      <result column="productsDescription" property="productsDescription"/>
      <result property="productsImage" resultMap="enterpriseDetailSql.imagesResultMa"/>//enterpriseDetailSql为xml命名空间名;imagesResultMa 下面resultMap的id
      <result property="contacts" resultMap="enterpriseDetailSql.contactMap"/>//enterpriseDetailSql为xml命名空间名;imagesResultMa 下面resultMap的id
    </resultMap>

    2、返回List<String>结构   class定义为String
    <resultMap id="imagesResultMap" class="java.lang.String">
      <result property="url" column="image_url"/>//需要的字段名,如果有多个字段,会默认选第一个
    </resultMap>

    3、返回List<Bean>结构 class为bean目录  groupBy按照该字段分组
    <resultMap id="contactMap" class="com.mmw100.enterpriseDetailandProfile.bean.Contacts" groupBy="contactId">
      <result property="contactId" column="contactId"/>
      <result property="name" column="name"/>
      <result property="phone" column="phone"/>
      <result property="qrcode" column="qrcode"/>
    </resultMap>

    4、select 关联查询  一个商品对应多张图片,多个人员信息
    <select id="getFeaturedProducts" parameterClass="com.mmw100.enterpriseDetailandProfile.bean.EnterpriseDetailandProfileInput" resultMap="featuredProductsResultMap">
      SELECT
        cop.contact_person_id as contactId,cp.characteristic_product_id as characteristicProductId,cp.product_name as productsTitle,pi.product_image_id as imgId,pi.image_url,cp.product_description as productsDescription,cop.`name` as name,cop.telephone     AS phone,cop.wechat_qr_code as qrcode
      FROM
      characteristic_product cp
      LEFT JOIN product_image pi ON cp.characteristic_product_id=pi.product_id AND pi.del_flag='0'
      LEFT JOIN contact_person cop ON cop.characteristic_product_id=cp.characteristic_product_id AND cop.del_flag='0'
      WHERE
      cp.ex_enterprise_id=#enterpriseId#
      AND cp.del_flag='0'
      ORDER BY cp.create_time
    </select>

  • 相关阅读:
    《Think Python》第7章学习笔记
    Arrays和String单元测试
    结对编程项目-四则运算 第二周
    2018-2019-2 20175227张雪莹《Java程序设计》 实验二《Java面向对象程序设计》
    类定义
    20175227张雪莹 2018-2019-2 《Java程序设计》第六周学习总结
    结对编程项目-四则运算 第一周 阶段性总结
    迭代和JDB
    20175227张雪莹 2018-2019-2 《Java程序设计》第五周学习总结
    结对学习小组
  • 原文地址:https://www.cnblogs.com/mustanglqt/p/11868319.html
Copyright © 2011-2022 走看看