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;
}