黑马瑞吉外卖——(二)

前言

  • 这个瑞吉外卖博客项目系列,用于我个人梳理知识与经验总结,所以写的文章不够体系化,比较零散,大家不喜勿喷😁。
  • 接下来几天我将会更新关于mysql、ssm系列知识体系,敬请期待~🤧。
  • 后续我也会将我自己打造的博客网站开源在这里,虽然现在已经上线了,但是优化还不够😒。

一、新增菜品

  • 在新增菜品中用到了两张表,因为既要考虑菜品的口味、又要保存菜品的基本信息🤷‍♂️。
  • 虽然操作两张表,但是这个项目并没有用到联表查询,而是分别单独操作一张表👻。
  • 这也是一种思想,也给了我很大的启发,为了下步我优化个人博客1.0版本做了铺垫🤧。
@Transactional
    public void saveWithFlavor(DishDto dishDto) {
        //保存菜品的基本信息到菜品表dish
        this.save(dishDto);

        Long dishId = dishDto.getId(); //菜品id

        List<DishFlavor> flavors = dishDto.getFlavors();
        flavors = flavors.stream().map((item)-> {
           item.setDishId(dishId);
           return item;
        }).collect(Collectors.toList());
        //保存菜品口味数据到菜品口味表dish_flavor
        dishFlavorService.saveBatch(flavors);
    }
  • 同时对于多表需要查出来的数据,都用了JavaBean的思想,单独封装了一个dto类,用来接收dao层的数据。
  • 在Controller返回数据类型的时候,都是用的统一RESTful风格,对数据进行了统一的封装,同时还有提示信息,也方便了前后端的处理。
  • 前端的每个请求都是通过ajax请求。

二、删除套餐

  • 这里也给了我很大的提示
@Override
    @Transactional
    public void removeWithDish(List<Long> ids) {
        //查询套餐状态,确定是否可用删除
        LambdaQueryWrapper<SetMeal> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(SetMeal::getId,ids);
        queryWrapper.eq(SetMeal::getStatus,1);
        int count = this.count(queryWrapper);
        if(count > 0) {
            //如果不能删除,抛出一个异常业务异常
            throw new CustomException("套餐正在售卖中,不能删除");
        }
        //如果可以删除,先删除套餐表中的数据
        this.removeByIds(ids);
        //删除关系表中的数据
        LambdaQueryWrapper<SetmealDish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);
        setMealDishService.remove(lambdaQueryWrapper);
    }
  • 我就用博客和分类进行举例说明吧。
  • 一个标签:Java基础知识。在这个标签下面会有很多个博客,如果我们要直接删除标签那肯定是不行的,这样博客就没有了标签,而直接删除博客却是可以的。
  • 这里的数据库设置就是将标签的id保存在博客数据库表中。在我们进行删除的时候需要判断,同时可以定一个异常类。

三、结尾

  • 对于瑞吉外卖项目内容就总结这么多,若想深入学习等待后续更新。
  • 我将会继续更新关于Java方向的学习知识,感兴趣的小伙伴可以关注一下。
  • 文章写得比较走心,用了很长时间,绝对不是copy过来的!
  • 尊重每一位学习知识的人,同时也尊重每一位分享知识的人。
  • 😎你的点赞与关注,是我努力前行的无限动力。🤩