mybatis-plus实现苍穹外卖项目-分类操作,不定期更新-day2

发布于:2025-08-28 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

一、分类页面的分页和模糊查询

1、CategoryController类修改

2、CategoryService和impl的修改

3、CategoryMapper的创建

二、新增分类

1、Category类的修改

2、CategoryController类修改

3、CategoryService和impl的修改

4、CategoryMapper的修改

三、启用和禁用分类

1、CategoryController类修改

2、CategoryService和impl的修改

3、CategoryMapper的修改

四、分类修改

1、CategoryController类修改

2、CategoryService和impl的修改

3、CategoryMapper的修改

五、分类删除

1、新增分类的报错提示消息

2、CategoryController类修改

3、CategoryService和impl的修改

4、CategoryMapper的修改


        事前说明:原视频教程中使用的是mybaits,我想试试能不能通过mybatis-plus做一下这个项目。由于日常工作外加上我的私人生活,视频一天的课,我可能得一周甚至更多时间才能敲完。文章中插入的代码是实现上一个功能的基础上加上新的功能,所以想看这个模块的完整代码,直接看最后一个标题的内容或者通过我的gitee地址看就行。

苍穹外卖mybatis-plus版https://gitee.com/xxyzc/sky-take-out

一、分类页面的分页和模糊查询

1、CategoryController类修改

package com.sky.controller.admin;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 模糊查询和分页查询分类
     *
     * @return
     */
    @ApiOperation("模糊和分页查询分类")
    @GetMapping("/page")
    public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
        PageResult pageResult = new PageResult();
        pageResult.setTotal(categoryList.getTotal());
        pageResult.setRecords(categoryList.getRecords());
        return Result.success(pageResult);
    }
}

2、CategoryService和impl的修改

package com.sky.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;

public interface CategoryService {
    /**
     * 根据前台查询条件查询分类列表
     *
     * @param categoryPageQueryDTO
     * @return
     */
    IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);
}
package com.sky.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;

    @Override
    public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
                .like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
        IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
        return categoryMapper.selectPage(iPage, queryWrapper);
    }
}

3、CategoryMapper的创建

package com.sky.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sky.entity.Category;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface CategoryMapper extends BaseMapper<Category> {


}

二、新增分类

1、Category类的修改

刚完成新增操作后,数据库中分类表的id是一大长串的值,为了让它自动递增,完成下列操作

        (1)、在id属性上加上@TableId(value = "id", type = IdType.AUTO),

        (2)、navicate中操作:选中数据库表category,右键点击“设计表”后弹出这个窗口,点“自动递增”,把那一大串的值修改成1。

修改后新增时可以让id值+1,从而避免新增时数据库中的id是一大长串的数字。

package com.sky.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Category implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    //类型: 1菜品分类 2套餐分类
    private Integer type;

    //分类名称
    private String name;

    //顺序
    private Integer sort;

    //分类状态 0标识禁用 1表示启用
    private Integer status;

    //创建时间
    private LocalDateTime createTime;

    //更新时间
    private LocalDateTime updateTime;

    //创建人
    private Long createUser;

    //修改人
    private Long updateUser;
}

2、CategoryController类修改

package com.sky.controller.admin;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 模糊查询和分页查询分类
     *
     * @return
     */
    @ApiOperation("模糊和分页查询分类")
    @GetMapping("/page")
    public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
        PageResult pageResult = new PageResult();
        pageResult.setTotal(categoryList.getTotal());
        pageResult.setRecords(categoryList.getRecords());
        return Result.success(pageResult);
    }

    /**
     * 新增分类
     *
     * @param categoryDTO 分类信息
     * @return
     */
    @ApiOperation("新增分类")
    @PostMapping
    public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("新增分类:{}", categoryDTO);
        categoryService.addCategory(categoryDTO);
        return Result.success();
    }
}

3、CategoryService和impl的修改

package com.sky.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;

public interface CategoryService {
    /**
     * 根据前台查询条件查询分类列表
     *
     * @param categoryPageQueryDTO
     * @return
     */
    IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);

    /**
     * 新增分类
     *
     * @param categoryDTO 新的分类信息
     */
    void addCategory(CategoryDTO categoryDTO);
}
package com.sky.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;


    @Override
    public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
                .like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
        IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
        return categoryMapper.selectPage(iPage, queryWrapper);
    }

    @Override
    public void addCategory(CategoryDTO categoryDTO) {
        log.info("新增分类:{}", categoryDTO);
        Category category = new Category();
        BeanUtils.copyProperties(categoryDTO, category);
        // 要求新增的分类是禁用状态,所以status=0
        category.setStatus(0);
        category.setCreateUser(BaseContext.getCurrentId());
        category.setUpdateUser(BaseContext.getCurrentId());
        category.setCreateTime(LocalDateTime.now());
        category.setUpdateTime(LocalDateTime.now());
        categoryMapper.insert(category);
    }
}

4、CategoryMapper的修改

mapper不用修改!!!

三、启用和禁用分类

1、CategoryController类修改

package com.sky.controller.admin;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 模糊查询和分页查询分类
     *
     * @return
     */
    @ApiOperation("模糊和分页查询分类")
    @GetMapping("/page")
    public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
        PageResult pageResult = new PageResult();
        pageResult.setTotal(categoryList.getTotal());
        pageResult.setRecords(categoryList.getRecords());
        return Result.success(pageResult);
    }

    /**
     * 新增分类
     *
     * @param categoryDTO 分类信息
     * @return
     */
    @ApiOperation("新增分类")
    @PostMapping
    public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("新增分类:{}", categoryDTO);
        categoryService.addCategory(categoryDTO);
        return Result.success();
    }

    @ApiOperation("启用、禁用分类")
    @PostMapping("/status/{status}")
    public Result<String> changeStatus(@PathVariable Integer status, Long id) {
        log.info("启用、禁用分类:{};id:{}", status, id);
        categoryService.changeStatus(status, id);
        return Result.success();
    }
}

2、CategoryService和impl的修改

package com.sky.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;

public interface CategoryService {
    /**
     * 根据前台查询条件查询分类列表
     *
     * @param categoryPageQueryDTO
     * @return
     */
    IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);

    /**
     * 新增分类
     *
     * @param categoryDTO 新的分类信息
     */
    void addCategory(CategoryDTO categoryDTO);

    /**
     * 启用、禁用分类
     *
     * @param status 修改后的状态
     * @param id     分类的id
     */
    void changeStatus(Integer status, Long id);
}
package com.sky.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;

    @Autowired
    private DishMapper dishMapper;

    @Autowired
    private SetmealMapper setmealMapper;

    @Override
    public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
                .like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
        IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
        return categoryMapper.selectPage(iPage, queryWrapper);
    }

    @Override
    public void addCategory(CategoryDTO categoryDTO) {
        log.info("新增分类:{}", categoryDTO);
        Category category = new Category();
        BeanUtils.copyProperties(categoryDTO, category);
        category.setStatus(0);
        category.setCreateUser(BaseContext.getCurrentId());
        category.setUpdateUser(BaseContext.getCurrentId());
        category.setCreateTime(LocalDateTime.now());
        category.setUpdateTime(LocalDateTime.now());
        categoryMapper.insert(category);
    }

    @Override
    public void changeStatus(Integer status, Long id) {
        log.info("启用、禁用分类:{};id:{}", status, id);
        Category category = new Category();
        category.setId(id);
        category.setStatus(status);
        category.setUpdateTime(LocalDateTime.now());
        category.setUpdateUser(BaseContext.getCurrentId());
        categoryMapper.updateById(category);
    }
}

3、CategoryMapper的修改

mapper不用修改!!!

四、分类修改

1、CategoryController类修改

package com.sky.controller.admin;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 模糊查询和分页查询分类
     *
     * @return
     */
    @ApiOperation("模糊和分页查询分类")
    @GetMapping("/page")
    public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
        PageResult pageResult = new PageResult();
        pageResult.setTotal(categoryList.getTotal());
        pageResult.setRecords(categoryList.getRecords());
        return Result.success(pageResult);
    }

    /**
     * 新增分类
     *
     * @param categoryDTO 分类信息
     * @return
     */
    @ApiOperation("新增分类")
    @PostMapping
    public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("新增分类:{}", categoryDTO);
        categoryService.addCategory(categoryDTO);
        return Result.success();
    }

    @ApiOperation("启用、禁用分类")
    @PostMapping("/status/{status}")
    public Result<String> changeStatus(@PathVariable Integer status, Long id) {
        log.info("启用、禁用分类:{};id:{}", status, id);
        categoryService.changeStatus(status, id);
        return Result.success();
    }

    @ApiOperation("修改分类")
    @PutMapping
    public Result<String> updateCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("修改分类:{}", categoryDTO);
        categoryService.updateCategory(categoryDTO);
        return Result.success();
    }
}

2、CategoryService和impl的修改

package com.sky.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;

public interface CategoryService {
    /**
     * 根据前台查询条件查询分类列表
     *
     * @param categoryPageQueryDTO
     * @return
     */
    IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);

    /**
     * 新增分类
     *
     * @param categoryDTO 新的分类信息
     */
    void addCategory(CategoryDTO categoryDTO);

    /**
     * 启用、禁用分类
     *
     * @param status 修改后的状态
     * @param id     分类的id
     */
    void changeStatus(Integer status, Long id);

    /**
     * 修改分类
     *
     * @param categoryDTO 新的分类信息
     */
    void updateCategory(CategoryDTO categoryDTO);
}
package com.sky.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;

    @Override
    public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
                .like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
        IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
        return categoryMapper.selectPage(iPage, queryWrapper);
    }

    @Override
    public void addCategory(CategoryDTO categoryDTO) {
        log.info("新增分类:{}", categoryDTO);
        Category category = new Category();
        BeanUtils.copyProperties(categoryDTO, category);
        category.setStatus(0);
        category.setCreateUser(BaseContext.getCurrentId());
        category.setUpdateUser(BaseContext.getCurrentId());
        category.setCreateTime(LocalDateTime.now());
        category.setUpdateTime(LocalDateTime.now());
        categoryMapper.insert(category);
    }

    @Override
    public void changeStatus(Integer status, Long id) {
        log.info("启用、禁用分类:{};id:{}", status, id);
        Category category = new Category();
        category.setId(id);
        category.setStatus(status);
        category.setUpdateTime(LocalDateTime.now());
        category.setUpdateUser(BaseContext.getCurrentId());
        categoryMapper.updateById(category);
    }

    @Override
    public void updateCategory(CategoryDTO categoryDTO) {
        log.info("修改分类:{}", categoryDTO);
        Category category = categoryMapper.selectById(categoryDTO.getId());
        category.setName(categoryDTO.getName());
        category.setSort(categoryDTO.getSort());
        category.setUpdateUser(BaseContext.getCurrentId());
        category.setUpdateTime(LocalDateTime.now());
        categoryMapper.updateById(category);
    }
}

3、CategoryMapper的修改

mapper不用修改!!!

五、分类删除

        分类的删除不是单纯直接删除,而是需要判断被删除的分类下是否已经有菜品或者套餐,如果有则不允许删除。

1、新增分类的报错提示消息

package com.sky.handler;

import com.sky.constant.MessageConstant;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

@RestControllerAdvice
@Slf4j
public class CategoryAdvice {

    @ExceptionHandler(DeletionNotAllowedException.class)
    public Result<String> systemException(DeletionNotAllowedException ex) {
        log.error("异常信息:{}", ex.getMessage());
        return Result.error(ex.getMessage());
    }

    @ExceptionHandler
    public Result<String> doSQLException(SQLIntegrityConstraintViolationException ex) {
        log.error("异常信息:{}", ex.getMessage());
        String message = ex.getMessage();
        if (message.contains("Duplicate")) {
            return Result.error(message.split(" ")[2] + MessageConstant.ALREADY_EXIST);
        }
        return Result.error(MessageConstant.UNKNOWN_ERROR);
    }
}

2、CategoryController类修改

package com.sky.controller.admin;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 模糊查询和分页查询分类
     *
     * @return
     */
    @ApiOperation("模糊和分页查询分类")
    @GetMapping("/page")
    public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
        PageResult pageResult = new PageResult();
        pageResult.setTotal(categoryList.getTotal());
        pageResult.setRecords(categoryList.getRecords());
        return Result.success(pageResult);
    }

    /**
     * 新增分类
     *
     * @param categoryDTO 分类信息
     * @return
     */
    @ApiOperation("新增分类")
    @PostMapping
    public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("新增分类:{}", categoryDTO);
        categoryService.addCategory(categoryDTO);
        return Result.success();
    }

    @ApiOperation("启用、禁用分类")
    @PostMapping("/status/{status}")
    public Result<String> changeStatus(@PathVariable Integer status, Long id) {
        log.info("启用、禁用分类:{};id:{}", status, id);
        categoryService.changeStatus(status, id);
        return Result.success();
    }

    @ApiOperation("修改分类")
    @PutMapping
    public Result<String> updateCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("修改分类:{}", categoryDTO);
        categoryService.updateCategory(categoryDTO);
        return Result.success();
    }

    @ApiOperation("删除分类")
    @DeleteMapping
    public Result<String> deleteCategoryById(Long id) {
        log.info("删除分类:{}", id);
        categoryService.deleteCategoryById(id);
        return Result.success();
    }
}

3、CategoryService和impl的修改

package com.sky.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;

public interface CategoryService {
    /**
     * 根据前台查询条件查询分类列表
     *
     * @param categoryPageQueryDTO
     * @return
     */
    IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);

    /**
     * 新增分类
     *
     * @param categoryDTO 新的分类信息
     */
    void addCategory(CategoryDTO categoryDTO);

    /**
     * 启用、禁用分类
     *
     * @param status 修改后的状态
     * @param id     分类的id
     */
    void changeStatus(Integer status, Long id);

    /**
     * 修改分类
     *
     * @param categoryDTO 新的分类信息
     */
    void updateCategory(CategoryDTO categoryDTO);

    /**
     * 根据id删除分类
     * 删除时需要判断该分类下有没有菜品或套餐,如果有则不能删除:通过category的id和dish以及setmeal的category_id关联查询
     *
     * @param id 要删除的分类id
     */
    void deleteCategoryById(Long id);
}

        impl中实现删除功能:通过分类表的id与菜品表和套餐表的category_id联查,查询是否含有该分类下的菜品和套餐。

package com.sky.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;

    @Autowired
    private DishMapper dishMapper;

    @Autowired
    private SetmealMapper setmealMapper;

    @Override
    public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
                .like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
        IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
        return categoryMapper.selectPage(iPage, queryWrapper);
    }

    @Override
    public void addCategory(CategoryDTO categoryDTO) {
        log.info("新增分类:{}", categoryDTO);
        Category category = new Category();
        BeanUtils.copyProperties(categoryDTO, category);
        category.setStatus(0);
        category.setCreateUser(BaseContext.getCurrentId());
        category.setUpdateUser(BaseContext.getCurrentId());
        category.setCreateTime(LocalDateTime.now());
        category.setUpdateTime(LocalDateTime.now());
        categoryMapper.insert(category);
    }

    @Override
    public void changeStatus(Integer status, Long id) {
        log.info("启用、禁用分类:{};id:{}", status, id);
        Category category = new Category();
        category.setId(id);
        category.setStatus(status);
        category.setUpdateTime(LocalDateTime.now());
        category.setUpdateUser(BaseContext.getCurrentId());
        categoryMapper.updateById(category);
    }

    @Override
    public void updateCategory(CategoryDTO categoryDTO) {
        log.info("修改分类:{}", categoryDTO);
        Category category = categoryMapper.selectById(categoryDTO.getId());
        category.setName(categoryDTO.getName());
        category.setSort(categoryDTO.getSort());
        category.setUpdateUser(BaseContext.getCurrentId());
        category.setUpdateTime(LocalDateTime.now());
        categoryMapper.updateById(category);
    }

    @Override
    public void deleteCategoryById(Long id) {
        log.info("分类的id:{}", id);
        // 1、获取该分类下的dish
        LambdaQueryWrapper<Dish> queryDish = new LambdaQueryWrapper<>();
        queryDish.eq(Dish::getCategoryId, id);
        List<Dish> dishes = dishMapper.selectList(queryDish);
        // 2、获取该分类下的setmeal
        LambdaQueryWrapper<Setmeal> querySetmeal = new LambdaQueryWrapper<>();
        querySetmeal.eq(Setmeal::getCategoryId, id);
        List<Setmeal> setmeals = setmealMapper.selectList(querySetmeal);
        // 3、判断dish和setmeal是否为空,如果为空则执行删除分类的操作,否则提示该分类下有菜品或套餐,不允许删除
        if (dishes != null && !dishes.isEmpty()) {
            throw new DeletionNotAllowedException(MessageConstant.CATEGORY_BE_RELATED_BY_DISH);
        }
        if (setmeals != null && !setmeals.isEmpty()) {
            throw new DeletionNotAllowedException(MessageConstant.CATEGORY_BE_RELATED_BY_SETMEAL);
        }
        categoryMapper.deleteById(id);
    }
}

4、CategoryMapper的修改

mapper不用修改!!!