mybatis一对多关联查询映射实体对象,但是以“一”分页

mybatis的xml

<select id="queryMyOrders" resultMap="myOrdersVO" parameterType="Map">
    SELECT
      od.id as orderId,
      od.created_time as createdTime,
      od.pay_method as payMethod,
      od.real_pay_amount as realPayAmount,
      od.post_amount as postAmount,
      os.order_status as orderStatus,
      od.is_comment as isComment
    FROM
        orders od
    LEFT JOIN
        order_status os
        on od.id = os.order_id
    WHERE
        od.user_id = #{paramsMap.userId}
    AND
        od.is_delete = 0
    <if test="paramsMap.orderStatus != null">
      and os.order_status = #{paramsMap.orderStatus}
    </if>
    ORDER BY
        od.updated_time ASC
  </select>

上面的语句只查询订单,不关联订单下的商品,但是在映射的结果集里面关联查询商品

<resultMap id="myOrdersVO" type="com.ydy.pojo.vo.MyOrdersVO">
    <id column="orderId" property="orderId"/>
    <result column="createdTime" property="createdTime"/>
    <result column="payMethod" property="payMethod"/>
    <result column="realPayAmount" property="realPayAmount"/>
    <result column="postAmount" property="postAmount"/>
    <result column="orderStatus" property="orderStatus"/>
    <result column="isComment" property="isComment"/>

    <collection property="subOrderItemList"
                select="getSubItems"
                column="orderId"
                ofType="com.ydy.pojo.vo.MySubOrderItemVO">
      <result column="itemId" property="itemId"/>
      <result column="itemName" property="itemName"/>
      <result column="itemImg" property="itemImg"/>
      <result column="itemSpecName" property="itemSpecName"/>
      <result column="buyCounts" property="buyCounts"/>
      <result column="price" property="price"/>
    </collection>
  </resultMap>

collection上面是订单的映射,下面是商品的映射
商品的映射里面有个column属性,这是指下面的查询需要用到的上面的结果的属性;
ofType属性指下面映射对应的实体对象;
select属性指映射所对应的查询语句的id;

<select id="getSubItems" parameterType="String" resultType="com.ydy.pojo.vo.MySubOrderItemVO">

      select
        oi.item_id as itemId,
        oi.item_name as itemName,
        oi.item_img as itemImg,
        oi.item_spec_name as itemSpecName,
        oi.buy_counts as buyCounts,
        oi.price as price
      from
        order_items oi
      where
        oi.order_id = #{orderId}

    </select>

映射对应的实体类对象

public class MySubOrderItemVO {
    
    

    private String itemId;
    private String itemImg;
    private String itemName;
    private String itemSpecName;
    private Integer buyCounts;
    private Integer price;
}
public class MyOrdersVO {
    
    

    private String orderId;
    private Date createdTime;
    private Integer payMethod;
    private Integer realPayAmount;
    private Integer postAmount;
    private Integer isComment;
    private Integer orderStatus;

    private List<MySubOrderItemVO> subOrderItemList;
}
分页使用的pageHelper插件
/**
     * 根据用户id和订单状态查询我的订单列表
     * @param userId 用户id
     * @param orderStatus 订单状态
     * @param pageInfo 分页对象
     * @return
     */
    @Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public List<MyOrdersVO> queryMyOrders(String userId, Integer orderStatus, PageInfo pageInfo) {
    
    

        Map<String, Object> map = new HashMap<>();
        map.put("userId", userId);
        if (orderStatus != null) {
    
    
            map.put("orderStatus", orderStatus);
        }

        PageUtil.StartPage(pageInfo);
        log.info("根据用户id:{}和订单状态:{}查询我的订单列表",userId,orderStatus);
        List<MyOrdersVO> list = ordersMapper.queryMyOrders(map);
        return list;
    }

猜你喜欢

转载自blog.csdn.net/qq_40917075/article/details/122742812