开始

这里默认定义的数据记录数是10条
image.png

数了数,只有6 条记录,第一页上。
image.png

第二页是5条订单数据
image.png
这里展示有50条数据
image.png
数据库内只有26条数据
image.png
image.png
主要问题是订单表和订单商品表是一对多的关系,一对多 就会引起这种情况
image.png

image.png

官方
image.png

image.png

前端先查询拿到所有的订单号,再去根据这些订单去后端查询关联的商品信息。
第二种方式也是mybatis嵌套的方式,把sql语句拆分。

先查询订单的信息
image.png
再根据订单id再去查询商品的关联信息。
image.png
把原来方法复制一份出来改个名字。
image.png

  1. <select id="queryMyOrdersDoNotUse" resultMap="myOrderVO" parameterType="map">
  2. select
  3. od.id as orderId,
  4. od.created_time as createdTime,
  5. od.pay_method as payMethod,
  6. od.real_pay_amount as realPayAmout,
  7. od.post_amount as postAmount,
  8. os.order_status as orderStatus,
  9. oi.item_id as itemId,
  10. oi.item_name as itemName,
  11. oi.item_img as itemImg,
  12. oi.item_spec_id as itemSepcId,
  13. oi.item_spec_name as itemSpecName,
  14. oi.buy_counts as buyCounts,
  15. oi.price as price
  16. from
  17. orders od
  18. left join
  19. order_status os
  20. on od.id=os.order_id
  21. left join
  22. order_items oi
  23. on od.id=oi.order_id
  24. where
  25. od.user_id=#{paramMap.userId}
  26. and
  27. od.is_delete=0
  28. <if test="paramMap.orderStatus!=null">
  29. and os.order_status=#{paramMap.orderStatus}
  30. </if>
  31. order by
  32. od.updated_time ASC
  33. </select>

修改

改成2个表的关联
image.png

 select
    od.id as orderId,
    od.created_time as createdTime,
    od.pay_method as payMethod,
    od.real_pay_amount as realPayAmout,
    od.post_amount as postAmount,
    os.order_status as orderStatus,
    from
    orders od
    left join
        order_status os
    on od.id=os.order_id
    where
        od.user_id=#{paramMap.userId}
    and
        od.is_delete=0
        <if test="paramMap.orderStatus!=null">
            and os.order_status=#{paramMap.orderStatus}
        </if>
    order by
    od.updated_time ASC

select属性
image.png

在下面定义这个select
image.png
商品和订单关联必须要传入订单号。把这里的orderId传过来。
image.png

返回类型就是VO
image.png

image.png

 <select id="getSubItems" resultType="com.imooc.pojo.vo.MySubOrderItemVO">

 </select>

image.png

 <select id="getSubItems" resultType="com.imooc.pojo.vo.MySubOrderItemVO" parameterType="String">
    select
    oi.item_id as itemId,
    oi.item_name as itemName,
    oi.item_img as itemImg,
    oi.item_spec_id as itemSepcId,
    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>

只在xml内定义方法也是可以的。不过IDEA的插件 会提示你 对应的mapper类没有这个接口方法
image.png

测试

maven install

image.png
数据库内的订单表确实是只有26条数据
image.png

mybatis的嵌套查询使用PageHelper遇到的分页问题

结束