详细注释!【瑞吉外卖】订单信息 用户姓名显示

导入资料里的实体类以及ordersDto后

搭好框架entity-mapper-service-controller

在OrdersController中编写

    @Autowired
    private OrdersService ordersService;

    @Autowired
    private UserService userService;

    /**
     * 分页查询订单信息
     * @param page
     * @param pageSize
     * @param number
     * @param beginTime
     * @param endTime
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(int page , int pageSize, Long number, String beginTime, String endTime){
//        log.info("page:{},pageSize:{},number:{},beginTime:{},endTime:{}",
//                page,pageSize,number,beginTime,endTime);

        //构造分页构造器
        Page<Orders> pageInfo = new Page(page,pageSize);
        //返回ordersDtoPage里的数据,泛型为OrdersDto
        Page<OrdersDto> ordersDtoPage = new Page<>();

        //构造条件查询对象
        LambdaQueryWrapper<Orders> queryWra
这段代码可能会存在逻辑错误,具体表现为:每个OrdersDto对象的OrderDetails属性都会被设置成完全相同的List<OrderDetail>对象。这是因为在for循环中,每次都是对同一个OrdersDto对象进行属性设置,而List<OrderDetail>对象的赋值操作是引用传递,因此所有OrdersDto对象的OrderDetails属性都指向了同一个List<OrderDetail>对象。 为了解决这个问题,可以将OrdersDto对象的创建放在for循环内部,即每次都创建一个新的OrdersDto对象来存储该订单信息和明细,避免了多个OrdersDto对象共享同一个List<OrderDetail>对象的问题。修改后的代码如下所示: ``` List<OrdersDto> ordersDtoList = new ArrayList<>(); for(Orders orders : ordersPage.getRecords()) { OrdersDto ordersDto = new OrdersDto(); BeanUtils.copyProperties(orders, ordersDto); LambdaQueryWrapper<OrderDetail> orderDetailQueryWrapper = new LambdaQueryWrapper<>(); orderDetailQueryWrapper.eq(OrderDetail::getOrderId, orders.getId()); orderDetailQueryWrapper.gt(OrderDetail::getNumber, 0); orderDetailQueryWrapper.orderByAsc(OrderDetail::getName); List<OrderDetail> orderDetailList = orderDetailService.list(orderDetailQueryWrapper); ordersDto.setOrderDetails(orderDetailList); ordersDtoList.add(ordersDto); } ``` 同时,由于OrdersDto对象的创建和属性设置都在for循环内部,因此也可以考虑使用Stream API来进行简化,如下所示: ``` List<OrdersDto> ordersDtoList = ordersPage.getRecords().stream().map(orders -> { OrdersDto ordersDto = new OrdersDto(); BeanUtils.copyProperties(orders, ordersDto); LambdaQueryWrapper<OrderDetail> orderDetailQueryWrapper = new LambdaQueryWrapper<>(); orderDetailQueryWrapper.eq(OrderDetail::getOrderId, orders.getId()); orderDetailQueryWrapper.gt(OrderDetail::getNumber, 0); orderDetailQueryWrapper.orderByAsc(OrderDetail::getName); List<OrderDetail> orderDetailList = orderDetailService.list(orderDetailQueryWrapper); ordersDto.setOrderDetails(orderDetailList); return ordersDto; }).collect(Collectors.toList()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值