解释程序public R<List<DishDto>> list(Dish dish){ //构造查询条件 LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(dish.getCategoryId() != null ,Dish::getCategoryId,dish.getCategoryId()); //添加条件,查询状态为1(起售状态)的菜品 queryWrapper.eq(Dish::getStatus,1); //添加排序条件 queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime); List<Dish> list = dishService.list(queryWrapper); List<DishDto> dishDtoList = list.stream().map((item) -> { DishDto dishDto = new DishDto(); BeanUtils.copyProperties(item,dishDto); Long categoryId = item.getCategoryId();//分类id //根据id查询分类对象 Category category = categoryService.getById(categoryId); if(category != null){ String categoryName = category.getName(); dishDto.setCategoryName(categoryName); } //当前菜品的id Long dishId = item.getId(); LambdaQueryWrapper<DishFlavor> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(DishFlavor::getDishId,dishId); List<DishFlavor> dishFlavorList = dishFlavorService.list(lambdaQueryWrapper); dishDto.setFlavors(dishFlavorList); return dishDto; }).collect(Collectors.toList()); return R.success(dishDtoList); }
时间: 2023-06-11 09:06:34 浏览: 208
这段程序是一个查询菜品的方法,需要传入一个 Dish 对象作为查询条件。首先,利用 LambdaQueryWrapper 构造查询条件,其中 eq 方法表示相等条件,orderByAsc 和 orderByDesc 表示升序和降序排序条件。然后,调用 dishService 的 list 方法进行查询,得到一个菜品列表。接着,将菜品列表转化为 DishDto 列表,其中 DishDto 是一个数据传输对象,用于将菜品信息传输给前端页面。在转化过程中,首先使用 BeanUtils 将菜品对象属性复制到 DishDto 对象中,然后根据 categoryId 查询分类对象,将分类名称设置到 DishDto 对象中,最后根据菜品 id 查询菜品口味列表,将菜品口味设置到 DishDto 对象中。最终返回 DishDto 列表。
相关问题
解释程序 @GetMapping("/dish/{id}") public R<List<DishDto>> dish(@PathVariable("id") Long SetmealId){ LambdaQueryWrapper<SetmealDish> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SetmealDish::getSetmealId,SetmealId); //获取套餐里面的所有菜品 这个就是SetmealDish表里面的数据 List<SetmealDish> list = setmealDishService.list(queryWrapper); List<DishDto> dishDtos = list.stream().map((setmealDish) -> { DishDto dishDto = new DishDto(); //其实这个BeanUtils的拷贝是浅拷贝,这里要注意一下 BeanUtils.copyProperties(setmealDish, dishDto); //这里是为了把套餐中的菜品的基本信息填充到dto中,比如菜品描述,菜品图片等菜品的基本信息 Long dishId = setmealDish.getDishId(); Dish dish = dishService.getById(dishId); BeanUtils.copyProperties(dish, dishDto); return dishDto; }).collect(Collectors.toList()); return R.success(dishDtos); }
这段代码是一个 Spring Boot 的 RESTful API 接口方法,处理 GET 请求,请求路径为 "/dish/{id}",其中的 {id} 是一个路径参数,表示 Setmeal 的 ID。
该方法会返回一个 R 对象,其中包含了一个 DishDto 类型的 List,表示 Setmeal 中的菜品列表。DishDto 是一个数据传输对象,包含了菜品的基本信息,例如菜品描述、菜品图片等。
在方法实现中,首先根据 Setmeal ID 从数据库表 SetmealDish 中查询出所有与该 Setmeal 相关的菜品,然后使用 Java 8 的 Stream API 对每个菜品进行处理,将其转换为 DishDto 对象,并将基本信息填充到 DishDto 对象中,最后将所有 DishDto 对象收集到一个 List 中并返回。
需要注意的是,BeanUtils 的拷贝是浅拷贝,如果 Dish 对象中包含了其他对象的引用,那么这些引用也会被拷贝,但是拷贝后的对象只是一个新的引用,不会创建新的对象。
@RestController @RequestMapping("/dish") @Slf4j public class DishController { @Autowired private DishService dishService; @Autowired private DishFlavorService dishFlavorService; @Autowired private CategoryService categoryService; /** * 新增菜品 * @param dishDto * @return */ @PostMapping() public R<String> save(@RequestBody DishDto dishDto){ dishService.saveWithFlavor(dishDto); return R.success("新增菜品成功!!"); } @GetMapping("/page") public R<Page> page(int page,int pageSize,String name){ //构造一个分页构造器对象 Page<Dish> objectPage = new Page<>(page, pageSize); Page<DishDto> dishDtoPage = new Page<>(); //条件构造器 LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>(); //添加过滤条件 queryWrapper.like(name!=null,Dish::getName,name); //添加排序条件 queryWrapper.orderByDesc(Dish::getUpdateTime); //执行分页查询 dishService.page(objectPage,queryWrapper); //对象拷贝 BeanUtils.copyProperties(objectPage,dishDtoPage,"records"); List<Dish> records = objectPage.getRecords(); List<DishDto> list = records.stream().map((item)->{ DishDto dishDto = new DishDto(); BeanUtils.copyProperties(item, dishDto); Long categoryId = item.getCategoryId();//分类id Category category = categoryService.getById(categoryId);//根据id查询分类对象 if (category != null){ String categoryName = category.getName(); dishDto.setCategoryName(categoryName); } return dishDto; }).collect(Collectors.toList()); dishDtoPage.setRecords(list); return R.success(objectPage); } } 请备注一下这段代码
这段代码是一个基于Spring Boot框架的RestController,其中包含了两个接口:一个是新增菜品的接口,另一个是分页查询菜品的接口。其中,新增菜品的接口使用了POST请求方式,接收一个DishDto对象作为参数,返回一个R<String>对象;分页查询菜品的接口使用了GET请求方式,接收三个参数:page、pageSize和name,返回一个R<Page>对象。在分页查询菜品的接口中,使用了LambdaQueryWrapper进行条件查询和排序,同时使用了BeanUtils进行对象拷贝,最终返回一个包含DishDto对象的Page对象。
阅读全文