springboot项目学习-瑞吉外卖(3)

1.任务

  • 实现分类管理功能数据的添加
  • 实现分类管理数据的分页查询
  • 实现分类管理数据的删除

由于前两个业务和之前的业务基本一致,所以这里就不重点介绍了,只放代码

2.分类管理功能数据的添加

前提:导入category实体类

2.1.CategoryMapper接口

  //新增功能(含菜品和套餐)
    int insertCategory(Category category);

 2.2.CategoryMapper.xml映射文件

<insert id="insertCategory" parameterType="employee">
        insert into category
            (id,type,name,sort,create_time,update_time,create_user,update_user)
        values
            (#{id},#{type},#{name},#{sort},#{createTime},#{updateTime},#{createUser},#{updateUser})
    </insert>

2.3.CategoryController类

//添加菜品和套餐
    @PostMapping
    public R<String> insetCategory(@RequestBody Category category){

        //设置id(视频里的id是根据雪花算法来的,这里我就用随机数应付下)
        Random random = new Random();
        Long i = random.nextLong(100000000000L);
        category.setId(i);

        //设置创建和修改时间
        category.setCreateTime(LocalDateTime.now());
        category.setUpdateTime(LocalDateTime.now());

        //设置创建人和修改人
        category.setCreateUser(1L);
        category.setUpdateUser(1L);

        categoryService.insertCategory(category);

        return R.success("添加成功");

    }

3.实现分类管理数据的分页查询(mybatisplus)

由于使用的是mybatisplus,所以mapper,service层是固定的,这里就不写了

3.1.controller层

  //分页查询
    @GetMapping("/page")
    public R<Page> page(int page,int pageSize){
        //构造分页构造器
        Page pageInfo = new Page<>(page,pageSize);
        //构造条件构造器
        LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();

        wrapper.orderByAsc(Category::getSort);
        //执行分页查询
        categoryPlusService.page(pageInfo,wrapper);

        return R.success(pageInfo);
    }

4.实现分类管理数据的删除

这一个功能需要重点看一看,因为在业务要求中要删除分类,还要先判断一下该分类下有没有关联的菜品或者套餐,如果有,则不能删除

  • 首先导入菜品和套餐的实体类
  • 编写查询SQL,查询关联的菜品和套餐的个数,如果为零,则可以执行删除SQL

点击删除按钮,前端传的url会跟着该分类的ids,当服务端获取到了ids之后,可以用该ids去查询关联的菜品和套餐 

DishMapper接口

    //查询category表中ids对应的dish表中有多少个菜品
    Integer selectCountsById(Long ids);

DishMapper.xml映射文件

 <select id="selectCountsById" resultType="Integer">
        select count(*) from dish where category_id = #{id}
    </select>

CategoryServiceImpl实现类

   @Override
    public int deleteCategoryByIds(Long ids) {
        //查询关联菜品
        Integer res = dishMapper.selectCountsById(ids);
        log.info("res = {}",res);
        //如果关联菜品数量大于0,则抛出异常
        if (res > 0){

            throw new CustomException("已有关联菜品,无法删除");
        }
        //否则执行删除语句
        return categoryMapper.deleteCategoryByIds(ids);
    }

自定义异常类 

public class CustomException extends RuntimeException{

    public CustomException(String message){
        super(message);
    }

}

全局异常处理

   @ExceptionHandler(CustomException.class)
    public R<String> exceptionHandler(CustomException customException){
        log.info(customException.getMessage());
        return R.error(customException.getMessage());
    }

先用从前端获取的ids去查询dish表里有无关联的菜品,判断之后抛出一个异常,这也是一个要学习的点:

CustomException  是自己写的一个通用的异常类,可以学习下自定义的异常类该怎么写,该异常类抛出的异常会被我们自定义的全局异常处理类接收并处理

CategoryController类

//删除菜品或套餐
    @DeleteMapping
    public R<String> deleteCategoryByIds(Long ids){
        log.info("id = {}",ids);

        categoryService.deleteCategoryByIds(ids);

        return R.success("删除成功");
    }

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 07:22:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 07:22:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 07:22:02       82 阅读
  4. Python语言-面向对象

    2024-03-25 07:22:02       91 阅读

热门阅读

  1. Rancher(v2.6.3)——Rancher部署Redis(单机版)

    2024-03-25 07:22:02       40 阅读
  2. 中高级前端工程师招聘

    2024-03-25 07:22:02       44 阅读
  3. 报道:GPT-5将于今年年中发布

    2024-03-25 07:22:02       35 阅读
  4. Compose UI 之 Checkbox 复选框 & RadioButton 单选框

    2024-03-25 07:22:02       38 阅读
  5. redis优化token校验主动失效

    2024-03-25 07:22:02       41 阅读
  6. 因缘际会悟语

    2024-03-25 07:22:02       38 阅读