开始
这里默认定义的数据记录数是10条
数了数,只有6 条记录,第一页上。
第二页是5条订单数据
这里展示有50条数据
数据库内只有26条数据
主要问题是订单表和订单商品表是一对多的关系,一对多 就会引起这种情况
官方
前端先查询拿到所有的订单号,再去根据这些订单去后端查询关联的商品信息。
第二种方式也是mybatis嵌套的方式,把sql语句拆分。
先查询订单的信息
再根据订单id再去查询商品的关联信息。
把原来方法复制一份出来改个名字。
<select id="queryMyOrdersDoNotUse" resultMap="myOrderVO" parameterType="map">
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,
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
orders od
left join
order_status os
on od.id=os.order_id
left join
order_items oi
on od.id=oi.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>
修改
改成2个表的关联
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属性
在下面定义这个select
商品和订单关联必须要传入订单号。把这里的orderId传过来。
返回类型就是VO
<select id="getSubItems" resultType="com.imooc.pojo.vo.MySubOrderItemVO">
</select>
<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类没有这个接口方法
测试
maven install
数据库内的订单表确实是只有26条数据
mybatis的嵌套查询使用PageHelper遇到的分页问题