解释程序 @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); }
时间: 2023-06-12 18:03:35 浏览: 145
这段代码是一个 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对象。
@Data public class Dish implements Serializable { private Long id;//主键 private String name;//菜品名称 private Long categoryId;//所属分类id private BigDecimal price;//菜品价格 private String code;//商品码 private String image;//图片 private String description;//描述信息 private Integer status;//0 停售 1 起售 private Integer sort;//顺序 @TableField(fill = FieldFill.INSERT) @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; @TableField(fill = FieldFill.INSERT) private Long createUser; @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser; //===================数据表中不存在下面字段,仅仅用于页面显示=================== //菜品口味列表 @TableField(exist = false) private List<DishFlavor> flavors = new ArrayList<>(); //菜品分类名称 @TableField(exist = false) private String categoryName; @TableField(exist = false) private Integer copies; }利用springboot分页查询
可以使用Spring Data JPA提供的PagingAndSortingRepository接口来实现分页查询,具体步骤如下:
1.在DishRepository中继承PagingAndSortingRepository接口。
```
public interface DishRepository extends PagingAndSortingRepository<Dish, Long> {
}
```
2.在DishService中定义一个方法来实现分页查询。
```
@Service
public class DishService {
@Autowired
private DishRepository dishRepository;
public Page<Dish> findDishByPage(int pageNum, int pageSize) {
Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
Pageable pageable = PageRequest.of(pageNum - 1, pageSize, sort);
return dishRepository.findAll(pageable);
}
}
```
3.在DishController中调用该方法。
```
@RestController
@RequestMapping("/dishes")
public class DishController {
@Autowired
private DishService dishService;
@GetMapping("/page")
public Page<Dish> findDishByPage(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) {
return dishService.findDishByPage(pageNum, pageSize);
}
}
```
其中,PageRequest.of()方法用于创建分页请求对象,findAll()方法用于执行分页查询操作。在方法中还可以设置排序方式,例如按照创建时间倒序排序。
阅读全文