解决mybatis plus 一对多分页查询问题
换了很多姿势使用mybatis-plus分页还是有问题
问题
比如: 订单表跟订单信息表是一对多关系,分页每页查询出来的数据是以订单商品表为主的,万一 一个订单有十个商品的话,那就只能查询一条单了,这明显就存在问题,
我需要的是每页的条数是以订单表为主的,如果你遇到跟我同样的问题请往下看......
mapper层
/**
* 分页获取订单数据
*
* @param orderPara 订单传参数类
* @return
*/
public IPage<Orders> selectOrdersList(@Param("page") Page<Orders> page, @Param(Constants.WRAPPER) Wrapper<Orders> wrapper, @Param("orderPara") OrderParaVo orderPara);
/**
* 获取订单商品信息数据
*
* @param orderNo 订单号
* @return 订单商品数据
*/
public List<OrderItem> selectOrderItemList(String orderNo);
xml
使用collection标签的select属性来映射
<resultMap id="BaseResultMap" type="xxx.xxx.xxx.Orders">
...
这里订单表字段忽略
<collection property="orderItemsList" ofType="xxx.xxx.xxx.OrderItem" select="selectOrderItemList" column="order_no"/>
</resultMap>
property: 对应映射的订单商品类(private List<OrderItem> orderItemsList;)
ofType: 订单商品类的包名路径
select: 查询订单商品的名称
column: 两表关联的条件字段(数据库的)
sql
<!--分页获取订单数据-->
<select id="selectOrdersList" resultMap="BaseResultMap" parameterType="xxx.xxx.xxx.vo.OrderParaVo">
select
<include refid="Orders_Base_Column_List"/>
from orders
<where>
<if test="orderPara.memberId != null">
orders.member_id = #{orderPara.memberId}
</if>
</where>
order by orders.create_time desc ${ew.customSqlSegment}
</select>
注意: orderPara是传值Vo类在mapper层订单的别名,这样使用实体传值的话能传多个参数进来。
<!--获取订单商品信息数据-->
<select id="selectOrderItemList" resultType="xxx.xxx.xxx.OrderItem">
select
<include refid="OrderItem_Base_Column_List"/>
from order_item
<where>
<if test="orderNo != null">
order_item.order_no = #{orderNo}
</if>
</where>
</select>
controller
这里直接调用mapper层了,需要规范的话,在service层写个接口调用mapper,然后controller再调用业务层,所有的业务层代码写在service实现层就好了......
@GetMapping("listOrdersList")
public AjaxResult test(@RequestBody OrderParaVo orderParaVo) {
QueryWrapper<Orders> queryWrapper = new QueryWrapper<>();
Page<Orders> page = new Page<Orders>(orderParaVo.getPageNum(), orderParaVo.getPageSize());
IPage<Orders> userPageList = ordersMapper.selectOrdersList( page, queryWrapper,orderParaVo);
return AjaxResult.success(userPageList);
}
如有其它办法能解决这个问题的话请下方留言哦,非常感谢!
如遇到问题进qq群讨论:837146509