首页 > 其他分享 >删除分类

删除分类

时间:2023-03-06 17:33:23浏览次数:36  
标签:删除 分类 菜品 import com id itheima

需求分析:

  在分类管理列表页面,可以对某个分类进行删除操作。需要注意的是当前分类关注了菜品或者套餐时,此分类不允许删除

代码开发

  1、页面发送ajax请求,将参数(id)提交到服务端

  2、服务端Controller接收页面提交的数据并调用Service删除数据

  3、Service调用Mapper操作数据库

/**
     * 根据id删除菜品分类
     * @param id
     * @return
     */
    @DeleteMapping()
    public R<String> delete(@RequestParam("ids") Long id){
        log.info("id:{}", id);
        categoryService.removeById(id);
        return R.success("分类信息删除成功");
    }

功能完善:检查要删除的分类是否在具体菜品中存在,若存在则不能删除。

准备工作:

1、实体类Dish和Setmeal

2、Mapper接口DishMapper和SetmealMapper

3、Service接口DishService和SetmealService

4、Service实现类DishServiceImpl和SetmealServiceImpl

实现:

(1)由于删除前要进行category_id是否关联其它菜品校验,因此在CategoryServiceImpl中自定义一个remove()方法。

package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.common.CustomException;
import com.itheima.common.R;
import com.itheima.entity.Category;
import com.itheima.entity.Dish;
import com.itheima.entity.Setmeal;
import com.itheima.mapper.CategoryMapper;
import com.itheima.service.CategoryService;
import com.itheima.service.DishService;
import com.itheima.service.SetmealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
    @Autowired
    private DishService dishService;

    @Autowired
    private SetmealService setmealService;


    /**
     * 根据id删除分类,删除之前需要进行判断该分类是否关联具体菜品或套餐
     * @param id
     */
    @Override
    public void remove(Long id) {
        //查询该类别是否关联具体菜品,如果已经关联,抛出一个业务异常
        LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<Dish>();
        dishLambdaQueryWrapper.eq(Dish::getCategoryId, id);
        int count1 = dishService.count(dishLambdaQueryWrapper);
        if(count1 > 0){
            //已经关联菜品,抛出一个业务异常
            throw new CustomException("当前分类下关联了菜品,不能删除");
        }
        //查询该类别是否关联具体套餐,如果已经关联,抛出一个业务异常
        LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<Setmeal>();
        setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId, id);
        int count2 = setmealService.count(setmealLambdaQueryWrapper);
        if(count2 > 0){
            //已经关联套餐,抛出一个业务异常
            throw new CustomException("当前分类下关联了套餐,不能删除");
        }

        //正常删除分类
        super.removeById(id);


    }
}

(2)倘若要删除的category_id与某个菜品或者套餐具有关联性,则抛出一个自定义异常CustomException

package com.itheima.common;


/**
 * 自定义业务异常
 */
public class CustomException extends RuntimeException{
    public CustomException(String message){
        super(message);
    }
}

(3)在全局异常处理中捕获该异常并返回结果

package com.itheima.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理
 */

//拦截类上加了注解@RestController的Controller、拦截一般controller
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 异常处理方法
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        //输出异常信息
        log.error(ex.getMessage());
        if(ex.getMessage().contains("Duplicate entry")){
            String[] split = ex.getMessage().split(" ");
            String msg = split[2] + "已存在";
            return R.error(msg);
        }
        return R.error("未知错误");
    }

    /**
     * 捕获自定义异常
     * @param ex
     * @return
     */
    @ExceptionHandler(CustomException.class)
    public R<String> exceptionHandler(CustomException ex){
        //输出异常信息
        log.error(ex.getMessage());
        return R.error(ex.getMessage());
    }



}

(4)在CategoryController中调用remove()方法来删除菜品分类

 /**
     * 根据id删除菜品分类
     * @param id
     * @return
     */
    @DeleteMapping()
    public R<String> delete(@RequestParam("ids") Long id){
        log.info("id:{}", id);
        //categoryService.removeById(id);
        categoryService.remove(id);
        return R.success("分类信息删除成功");
    }

 

标签:删除,分类,菜品,import,com,id,itheima
From: https://www.cnblogs.com/fxzm/p/17184537.html

相关文章

  • php 导出Excel到指定文件并删除指定文件
    ob_end_clean();//这一步非常关键,用来清除缓冲区防止导出的excel乱码/*header("Content-Type:application/force-download");header("Content-Type:application/octe......
  • 03linux如何彻底删除python
    本教程已删除python3为例 linux卸载python第一步whereispython3|xargsrm-rfv第二步find/-name*python3*|xargsrm-rfv第三步卸载pipwhereispip3|xargs......
  • 力扣---1653. 使字符串平衡的最少删除次数
    给你一个字符串s,它仅包含字符'a'和'b'​​​​。你可以删除s中任意数目的字符,使得s平衡。当不存在下标对(i,j)满足i<j,且s[i]='b'的同时s[j]='a',此......
  • 1653. 使字符串平衡的最少删除次数
    题目链接:  1653.使字符串平衡的最少删除次数-力扣(LeetCode) ......
  • 删除 VS Code 编辑器右侧的文件预览
    这个美女是最近一次更新后出现的,让我很分心。我搜索了菜单,但没有找到任何设置来删除它。有什么办法可以从编辑器中消除它吗?解答http://www.stackoverflow.ink......
  • 如何从 .NET 中的字符串中删除变音符号(重音符号)?
    我正在尝试转换一些加拿大法语字符串,基本上,我希望能够在保留字母的同时去掉字母中的法语重音符号。(例如转换é为e,所以crèmebrûlée会变成cremebrulee)实现这一目标......
  • 新增分类
    需求分析:后台系统中可以管理分类信息,分类包括两种信息,分别是菜品分类和套餐分类。当我们在后台系统中添加菜品时需要选择一个菜品分类,当我们在后台系统中添加一个套餐时需......
  • 力扣80.删除重复元素2
    给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组......
  • 力扣---26. 删除有序数组中的重复项
    给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不能改......
  • stata:删除字符串的空格
    //替换所有空格//下面语句结果为4displength(subinstr("1233","","",.))//itrim(s)将字符间多于一个空格缩减为一个空格,对首尾空格不起作用displengt......