Mybatis之collection標籤嵌套查詢(select)的寫法

業務:查詢一種商品,展示該商品多種規格。

GroupDetailsVo :

package com.community.api.vo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import lombok.Data;


/**
 * 團購詳情vo
 *
 * @author admin
 * @date 2019 -11-20 15:29:51
 */
@Data
public class GroupDetailsVo implements Serializable{

    private Long groupById;

    /**
     * 團購狀態 2:未開始 3:團購中 4:已結束
     */
    private Byte groupBuyStatus;

    /**
     * 主圖
     */
    private String mainPicture;

    /**
     * 商品名稱
     */
    private String name;

    /**
     * 詳情
     */
    private String content;

    /**
     * 配送方式 1:自提 2:上門
     */
    private String deliveryType;

    /**
     *滿額免費配送
     */
    private BigDecimal freeDeliveryPrice;

    /**
     *已賣總數量
     */
    private Integer sellNumber;

    /**
     * 原價
     */
    private BigDecimal originalPrice;

    /**
     * 團購價
     */
    private BigDecimal groupByPrice;

    /**
     * 開始時間
     */
    private Date startTime;

    /**
     *
     * 結束時間
     */
    private Date endTime;

    /**
     * 單、多規格詳情vo
     */
    private List<StandardDetailsVo> standardDetailsVos;

}

StandardDetailsVo :

package com.community.api.vo;

import java.io.Serializable;

import lombok.Data;


/**
 * 單、多規格詳情vo
 *
 * @author admin
 * @date 2019 -11-25 09:36:39
 */
@Data
public class StandardDetailsVo implements Serializable{

    /**
     * 規格id
     */
    private Long standardId;

    /**
     * 規格名稱
     */
    private String standardName;

}

接口名:

/**
     * 獲取團購詳情
     * @param groupBuyId
     * @return
     * @author admin
     * @date 2019 -11-21 17:05:20
     */
    List<GroupDetailsVo> getGroupDetails (@Param("groupBuyId")Long groupBuyId);

mapper:

//collection標籤內的select爲本mapper內的方法名、column爲查詢條件的列名、property爲實體類List名字,見上面實體類<單、多規格詳情vo>字段名字。
<resultMap id="StandardResultMap" type="com.community.api.vo.GroupDetailsVo">
    <result column="group_buy_status" property="groupBuyStatus"/>
    <result column="name" property="name"/>
    <result column="main_picture" property="mainPicture"/>
    <result column="content" property="content"/>
    <result column="delivery_type" property="deliveryType"/>
    <result column="free_delivery_price" property="freeDeliveryPrice"/>
    <result column="start_time" property="startTime"/>
    <result column="end_time" property="endTime"/>
    <result column="group_by_id" property="groupById"/>
    <result column="sell_number" property="sellNumber"/>
    <result column="original_price" property="originalPrice"/>
    <result column="group_by_price" property="groupByPrice"/>
    <collection property="standardDetailsVos" column="group_by_id" javaType="ArrayList"
                ofType="com.community.api.vo.StandardDetailsVo" select="getStandardId" />
  </resultMap>

<!--獲取團購詳情-->
  <select id="getGroupDetails" resultMap="StandardResultMap">
    SELECT
      ANY_VALUE(a.group_buy_status) AS group_buy_status,
      ANY_VALUE(a.name) AS `name`,
      ANY_VALUE(a.main_picture) AS main_picture,
	  ANY_VALUE(a.content) AS content,
	  ANY_VALUE(a.delivery_type) AS delivery_type,
	  ANY_VALUE(a.free_delivery_price) AS free_delivery_price,
      ANY_VALUE(a.start_time) AS start_time,
      ANY_VALUE(a.end_time) AS end_time,
      ANY_VALUE(gbs.group_by_id) AS group_by_id,
	  ANY_VALUE(SUM(gbs.sell_number)) AS sell_number,
      ANY_VALUE(MIN(gbs.original_price)) AS original_price,
      ANY_VALUE(MIN(gbs.group_by_price)) AS group_by_price,
      ANY_VALUE(gbs.standard_id) AS standard_id,
      ANY_VALUE(gbs.standard_name) AS standard_name
    FROM
      group_buy a
    LEFT JOIN group_buy_standard gbs ON a.group_buy_id = gbs.group_by_id
    WHERE gbs.group_by_id = #{groupBuyId}
    GROUP BY gbs.group_by_id
  </select>

  <!--collection嵌套查詢規格信息-->
  <select id="getStandardId" resultMap="StandardIdMap" parameterType="java.lang.Long" >
  SELECT
    standard_id,
    standard_name
  FROM group_buy_standard
  WHERE group_by_id = #{groupBuyId}
  </select>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章