瑞吉外卖实战学习--13、完善删除中的逻辑

2024-04-03 19:28

本文主要是介绍瑞吉外卖实战学习--13、完善删除中的逻辑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

完善删除中的逻辑

  • 前言
  • 效果图
  • 逻辑介绍
  • 表结构
  • 根据mybatisPlus接口规范创建实体类和service和mapper文件
    • 1、实体类Dish和Setmeal
    • 2、Mapper接口DishMapper和SetealMapper
    • 3、Service接口DishService和setmealService
    • 4、Service实现类DishServiceImpl和setmealServicelmpl
  • 编写删除函数
    • 1、将创建刚才两个表的实体类
    • 2、获取表中categoryId和id相等的数据
    • 3、判断获取到的数据有几条
    • 4、如果大于0说明绑定了数据就抛出异常
    • 5、如果都不大于0就通过super调用通过id删除的方法
  • 自定义业务异常类
  • 在全局异常处理器中捕获异常

前言

本项目gitee位置:添加链接描述
之前实现了直接删除分类功能,并没有实现分类删除中的逻辑编写,本篇文章主要是针对删除逻辑来进行讲解,
本篇文章需要使用到Dish(菜品)和Setmeal(套餐)表,需要根据mybatisPlus规范创建实体类和接口类

效果图

在这里插入图片描述

逻辑介绍

检测分类删除的时候是否关联了别的菜品或者套餐

表结构

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

根据mybatisPlus接口规范创建实体类和service和mapper文件

1、实体类Dish和Setmeal

在这里插入图片描述

2、Mapper接口DishMapper和SetealMapper

在这里插入图片描述

3、Service接口DishService和setmealService

在这里插入图片描述

4、Service实现类DishServiceImpl和setmealServicelmpl

切记加@Service注解否则报错
在这里插入图片描述

编写删除函数

在这里插入图片描述

1、将创建刚才两个表的实体类

在这里插入图片描述

2、获取表中categoryId和id相等的数据

3、判断获取到的数据有几条

4、如果大于0说明绑定了数据就抛出异常

5、如果都不大于0就通过super调用通过id删除的方法

package com.example.ruiji_demo.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.ruiji_demo.common.CustomException;
import com.example.ruiji_demo.entity.Category;
import com.example.ruiji_demo.entity.Dish;
import com.example.ruiji_demo.entity.Setmeal;
import com.example.ruiji_demo.mapper.CategoryMapper;
import com.example.ruiji_demo.service.CategoryService;
import com.example.ruiji_demo.service.DishService;
import com.example.ruiji_demo.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author jitwxs* @date 2024年04月01日 21:44*/
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {@Autowiredprivate DishService dishService;@Autowiredprivate SetmealService setmealService;/*** 根据id删除分类,删除之前进行判断* @param id*/@Overridepublic void remove(Long id){//检测分类删除的时候是否关联了别的菜品或者套餐//        创建菜品的实例LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
//        获取表中categoryId和id相等的数据dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);
//        判断获取到的数据有几条Long count1 = dishService.count(dishLambdaQueryWrapper);//        如果大于0说明关联了菜品if(count1>0){throw new CustomException("当前分类下关联了菜品,不能删除");}//        创建套餐的实例LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);Long count2 = setmealService.count(setmealLambdaQueryWrapper);if(count2>0){throw new CustomException("当前分类下关联了套餐,不能删除");}super.removeById(id);}}

自定义业务异常类

在这里插入图片描述

package com.example.ruiji_demo.common;/*** 自定义业务异常类* @author jitwxs* @date 2024年04月03日 16:52*/
public class CustomException extends RuntimeException {public CustomException(String message){super(message);}
}

在全局异常处理器中捕获异常

在这里插入图片描述

package com.example.ruiji_demo.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;/*** @author jitwxs* @date 2024年03月30日 22:24*/
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {/*** 异常处理方法* @param ex* @return*/@ExceptionHandler(SQLIntegrityConstraintViolationException.class)public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){log.error(ex.getMessage());
//        获取到是否是含有Duplicate entry的错误,如果是就提取出来名称,然后添加到报错信息if(ex.getMessage().contains("Duplicate entry")){String[] split = ex.getMessage().split(" ");String msg = split[2] + "已存在";return R.error(msg);}return R.error("添加失败");}@ExceptionHandler(CustomException.class)public R<String> exceptionHandler(CustomException ex){return R.error(ex.getMessage());}
}

这篇关于瑞吉外卖实战学习--13、完善删除中的逻辑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873766

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.