前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >黑马瑞吉外卖之删除分类

黑马瑞吉外卖之删除分类

作者头像
兰舟千帆
发布2022-09-21 15:21:25
3260
发布2022-09-21 15:21:25
举报

黑马瑞吉外卖之删除分类

前端分析

在分类管理这里,可以看到对于分类的两个操作,一个是修改,一个是删除

在这里插入图片描述
在这里插入图片描述

现在先看删除的操作。但是又需要注意的点就是如果分类下面关联了菜品或者套餐的话,我们是不可以去删除的。

从前端页面去分析的话,这个按钮绑定了方法

在这里插入图片描述
在这里插入图片描述

点击删除按钮的时候会给出一个确认的提示,确认的话会继续执行then下面的部分。具体调用了一个方法,传入的参数是id。

在这里插入图片描述
在这里插入图片描述

来看这个方法,其实也是写在一个js里面,从这里我们就明白了路径和具体的请求方法和传递参数。

在这里插入图片描述
在这里插入图片描述

这是分析的方法执行的路径。在后端呢,我们要进行一些处理,包括去查询分类是否关联套餐和菜品。

后端功能开发

相关的实体类这里就不提供了,课程都已经给好了。在这里主要去着重看分类的功能。 不过我们需要导入两个实体类,是套餐和菜品,

在这里插入图片描述
在这里插入图片描述

按照前面的气门一次创建出来各自的dao层,service层,以及实现。这三个还是按照mybatisplus的开发思路去创建出来。

这些实体类参照数据库的字段都给出来了。关联的话其实是按照下面这个categoryId去关联的。所以我们通过分析就可以明白怎么去查询是否关联。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在数据库表中给菜品表和套餐表设计了字段叫做categoryId,这个属性字段可以作为与分类关联的依据,在具体的分类的表中,与菜品分类和套餐分类,他们有自己的id,我们判断是否关联的方法就是比对菜品表和套餐表当中的categoryId和分类表具体的分类的id是否一样,一样的话就说明有关联。 而实际上我们可以这样去判断,我们可以将分类的id给到后端,后端直接将这个字段作为categoryId,看看是否可以查到数据。如果可以查到就说明关联了。

于是在用到mybatisplus的删除的操作的时候,我们需要去做一些判断,那么我们句需要去重新定义remove方法。我们直接在service去扩展remove方法。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
package com.jgdabc.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jgdabc.entity.Category;

public interface CategoryService extends IService<Category> {
    public void remove(Long id);
}

那么具体的逻辑就写在service的实现类,那这样的逻辑的话就十分清楚了。我们可以自定义一个异常,当查询出来关联到菜品或者套餐的时候,我们就抛出异常,这个异常我们去自定义就好了。

代码语言:javascript
复制
package com.jgdabc.common;
//自定义业务异常
public class CustomException extends RuntimeException {
    public  CustomException(String message)
    {
        super(message);
    }

}

然后在全局异常处理器去处理

在这里插入图片描述
在这里插入图片描述

该方法还在我们的全局异常处理器类中

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
 @ExceptionHandler(CustomException.class)
    public R_<String> exceptionHandeler(CustomException ex)
    {
        log.error(ex.getMessage());

        return  R_.error(ex.getMessage());


    }
代码语言:javascript
复制
package com.jgdabc.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jgdabc.common.CustomException;
import com.jgdabc.entity.Category;
import com.jgdabc.entity.Dish;
import com.jgdabc.entity.Setmeal;
import com.jgdabc.mapper.CategoryMapper;
import com.jgdabc.service.CategoryService;
import com.jgdabc.service.DishService;
import com.jgdabc.service.SetMealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
    @Autowired
    private DishService dishService;
    @Autowired
    private SetMealService setMealService;
    @Override
//    根据id删除分类,删除之前进行判断
    public void remove(Long id) {
        LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
//        添加查询条件
        dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);
        long count = dishService.count(dishLambdaQueryWrapper);
        if(count>0)
        {
            log.info("检测到关联菜品");
            throw new CustomException("当前分类项关联了菜品,不能删除");
//            说明已经关联了菜品,抛出一个业务异常
        }
//        查询当前分类是否关联菜品,如果关联,就抛出业务异常,
        LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
        setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);
        long count1 = setMealService.count(setmealLambdaQueryWrapper);
        if(count1>0)
        {
            log.info("检测到关联套餐");
            throw new CustomException("当前分类下关联了套餐,不能进行删除");

//            说明已经关联了套餐,需要配抛出一个义务异常
        }
        super.removeById(id);


//        查询当前分类是否关联了套餐,如果已经关联,抛出一个业务异常
        //正常删除分类
    }
}

然后在controller里面我们再调用这个方法就好了。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
/    根据id来删除分类
    @DeleteMapping
    public R_<String>delete(Long id)
    {
        log.info("删除分类:id为:{}",id);
//        categoryService.removeById(id);
        categoryService.remove(id);
        return R_.success("分类信息删除成功");

    }

在数据库表中分类的川菜关联了具体的菜品现在进行去删除,看看能否得到相应的提示效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样我们就做好了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 黑马瑞吉外卖之删除分类
  • 前端分析
  • 后端功能开发
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档