黑馬瑞吉外賣——(二)

前言

  • 這個瑞吉外賣部落格項目系列,用於我個人梳理知識與經驗總結,所以寫的文章不夠體系化,比較零散,大家不喜勿噴😁。
  • 接下來幾天我將會更新關於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過來的!
  • 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。
  • 😎你的點贊與關注,是我努力前行的無限動力。🤩