修改菜品
涉及接口:
- 根据id查询菜品
- 根据类型查询分类(已实现)
- 文件上传(已实现)
- 修改菜品
根据id查询菜品
控制层
/**
* 根据id查询菜品
* @param id
* @return
*/
@GetMapping("/{id}")
@ApiOperation("根据id查询菜品")
public Result<DishVO> getById(@PathVariable Long id) {
log.info("根据id查询菜品:", id);
DishVO dishVo = dishService.getByIdWithFlavor(id); // 根据id查询菜品数据及其对应的口味信息
return Result.success(dishVo);
}
服务层及其实现类
/**
* 根据id查询菜品数据及其对应的口味信息
* @param id
* @return
*/
DishVO getByIdWithFlavor(Long id);
/**
* 根据id查询菜品数据及其对应的口味信息
* @param id
* @return
*/
public DishVO getByIdWithFlavor(Long id) {
// 根据id查询菜品表
Dish dish = dishMapper.getById(id); // "select * from dish where id = #{id}"
// 根据菜品id查询口味表
List<DishFlavor> dishFlavors = dishFlavorMapper.getByDishId(id);
// 封装数据到Vo
DishVO dishVO = new DishVO();
BeanUtils.copyProperties(dish, dishVO);
dishVO.setFlavors(dishFlavors);
return dishVO;
}
Mapper
/**
* 根据菜品id查询口味表
* @param dishId
* @return
*/
@Select("select * from dish_flavor where dish_id = #{dishId}")
List<DishFlavor> getByDishId(Long dishId);
修改菜品
控制层
/**
* 修改菜品
* @param dishDTO
* @return
*/
@PutMapping
@ApiOperation("修改菜品")
public Result update(@RequestBody DishDTO dishDTO) { // 和新增的时候前端传过来的数据差不多,区别是这id是必须的
log.info("修改菜品:", dishDTO);
dishService.updateWithFlavor(dishDTO);
return Result.success();
}
服务层及其实现类
/**
* 根据id修改菜品的基本信息和口味信息
* @param dishDTO
*/
void updateWithFlavor(DishDTO dishDTO);
/**
* 根据id修改菜品的基本信息和口味信息
* @param dishDTO
*/
public void updateWithFlavor(DishDTO dishDTO) {
// dishDTO中除了菜品基本信息,还有口味信息,更新菜品表的时候可以直接传DTO,但是传实际的菜品对象更合理
Dish dish = new Dish();
BeanUtils.copyProperties(dishDTO, dish);
// 修改菜品表的基本信息
dishMapper.update(dish);
// 删除原有的口味信息
dishFlavorMapper.deleteByDishId(dish.getId());
// 重新弄插入口味数据
List<DishFlavor> flavors = dishDTO.getFlavors();
if(flavors != null && flavors.size() > 0) { // 判断有口味数据
flavors.forEach(dishFlavor -> {
dishFlavor.setDishId(dishDTO.getId()); // 重新设置dishId
});
// 批量插入,直接传入集合对象
dishFlavorMapper.insertBatch(flavors);
}
}
Mapper及动态xml
- 根据id动态修改菜品表中的菜品信息
/**
* 根据id动态修改菜品表中的菜品信息
* @param dish
*/
@AutoFill(value = OperationType.UPDATE)
void update(Dish dish);
<update id="update">
update dish
<set>
<if test="name != null">name = #{name},</if>
<if test="categoryId != null">category_id = #{categoryId},</if>
<if test="price != null">price = #{price},</if>
<if test="image != null">image = #{image},</if>
<if test="description != null">description = #{description},</if>
<if test="status != null">status = #{status},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateUser != null">update_user = #{updateUser},</if>
</set>
where id = #{id}
</update>