需求分析:
在菜品管理列表页面点击修改按钮,跳转到修改菜品页面,在修改页面回显菜品相关信息并进行修改,最后点击确认按钮完成修改操作
梳理交互过程:
1、页面发送ajax请求,请求服务器获取分类数据,用于菜品分类下拉框中数据展示(前面新增菜品时已经实现)
2、页面发送ajax请求,请求服务端,根据id查询当前菜品信息,用于菜品信息回显
3、页面发送请求,请求服务端进行图片下载,用于图片回显(已实现)
4、点击保存按钮,页面发送ajax请求,将修改后的菜品相关数据以json形式提交到服务器
数据回显:在DishService中编写方法
/** * 根据id查询菜品信息和对应的口味信息 * @param id * @return */ @Override public DishDto getByIdWithFlavor(Long id) { //查询菜品基本信息,从dish表查询 Dish dish = this.getById(id); DishDto dishDto = new DishDto(); BeanUtils.copyProperties(dish, dishDto); //查询当前菜品口味信息,从dish_flavor表中查询 LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DishFlavor::getDishId, id); List<DishFlavor> flavors = dishFlavorService.list(queryWrapper); dishDto.setFlavors(flavors); return dishDto; }
/** * 根据id查询菜品信息和对应口味信息 * @param id * @return */ @GetMapping("/{id}") public R<DishDto> get(@PathVariable Long id){ DishDto dishDto = dishService.getByIdWithFlavor(id); return R.success(dishDto); }
更新菜品信息和口味信息
/** * //根据id更新菜品信息和对应的口味信息 * @param dishDto */ @Override public void updateWithFlavor(DishDto dishDto) { //更新dish表基本信息 this.updateById(dishDto); //清理当前菜品对应的口味数据---dish_flavor表的delete操作 LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DishFlavor::getDishId, dishDto.getId()); dishFlavorService.remove(queryWrapper); //添加当前提交过来的口味数据---dish_flavor表的insert操作 List<DishFlavor> flavors = dishDto.getFlavors(); //新添加的flavor中没有dishId flavors = flavors.stream().map((item) -> { item.setDishId(dishDto.getId()); return item; }).collect(Collectors.toList()); dishFlavorService.saveBatch(flavors); }
/** * 修改菜品 * @param dishDto * @return */ @PutMapping public R<String> update(@RequestBody DishDto dishDto){ dishService.updateWithFlavor(dishDto); return R.success("修改成功"); }
如果不删除直接保存,且在原有口味上加了新口味,则dish_flavor表中已经有的id会和前端传过来未经修改的flavors中的id相同,出现duplicate key异常标签:flavors,return,修改,菜品,dish,dishDto,id From: https://www.cnblogs.com/fxzm/p/17207239.html