解决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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM