先上數據庫結構圖和樹形圖;
項目中的一個需求是獲取一個商品所屬的二級分類名稱。
思路分析,首先,我們是可以拿到當前商品所屬的子分類的,比如說我買的是一個iPhone SE,對應的分類名稱是 iPhone低端版 ,然后反向遞歸去查詢父分類。它的父分類是 iPhone ,同理,iPhone的父分類是手機,所以最后面我們拿到的對象應該是 手機 這個二級分類。
首先我們獲寫一個獲取全部分類的方法方便我們后面使用:private List<TblCategory> allCategory = categoryMapper.findAllCategory();
public TblCategory getParentCategoryObject(TblCategory category) { if (category.getParentId() == 1) { return category; } TblCategory tblCategory = allCategory.stream().filter( x -> Objects.equals(x.getCategoryId(), category.getParentId()) ).findFirst().get(); return getParentCategoryObject(tblCategory); }
category.getParentId() == 1 說明我們找到了二級分類,所以這里直接返回,跳遞歸了,否則就一直去查找,直到找到為止。