1)需求分析
2)代码开发
页面请求
①前端
注意,先把里面的ids改成id
②后端
/**
* 根据id删除分类
* @param id
* @return
*/
@DeleteMapping
public R<String> delete(Long id){
log.info("删除分类,id为:{}",id);
categoryService.removeById(id);
return R.success("分类信息删除成功");
}
3)功能完善
*entity
*mapper
*service
数据逻辑
后台逻辑
@Slf4j
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
@Autowired
private DishService dishService;
@Autowired
private SetmealService setmealService;
@Override
public void remove(Long id) {
log.info("删除分类,id为:{}",id);
LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
//添加查询条件,根据分类id进行查询其记录个数,如果有则说明该分类下有菜品
dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);
int countDish = dishService.count(dishLambdaQueryWrapper);
log.info("关联{}个菜品",countDish);
//如果已经关联菜品,抛出一个异常
if(countDish > 0){
throw new CustomException("当前分类下关联了菜品,不能删除!");
}
//套餐同理
LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
//添加查询条件,根据分类id进行查询其记录个数,如果有则说明该分类下有菜品
setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);
int countSetmeal = setmealService.count(setmealLambdaQueryWrapper);
log.info("关联{}个套餐",countSetmeal);
//如果已经关联套餐,抛出一个异常
if(countSetmeal > 0){
throw new CustomException("当前分类下关联了套餐,不能删除!");
}
//正常删除分类
super.removeById(id);
}
}
controller直接调用自定义的remove即可
自定义抛出的异常,需要在前端显示,如何做?
可以在之前做的全局异常处理方法中拦截该异常,再获取其异常信息,封装到R中反馈给前端