1. 程式人生 > 其它 >穀粒商城-樹型選單查詢

穀粒商城-樹型選單查詢

三級選單資料查詢

電商平臺中常見三級選單

資料庫中資料通過父id欄位找到所屬級別

控制層

新增展示介面

    /**
     * 查出所有分類以及子分類,以樹形結構組裝起來。
     * @return
     */
    @GetMapping("/list")
    public Result list() {
        List<CategoryEntity> entities = categoryService.listWithTree();
        return new Result().ok(entities);
    }

業務層

介面與實現類中新增相應介面
Entity類中有 List children

用於儲存子選單,使用遞迴查詢子選單。

public interface CategoryService extends CrudService<CategoryEntity, CategoryDTO> {
    // 樹型展示資料
    List<CategoryEntity> listWithTree();
}

@Service
public class CategoryServiceImpl extends CrudServiceImpl<CategoryDao, CategoryEntity, CategoryDTO> implements CategoryService {

    @Override
    public List<CategoryEntity> listWithTree() {
        // 1.查出所有分類
        List<CategoryEntity> categoryEntityList = baseDao.selectList(null);

        // 2. 組成樹型結構
        List<CategoryEntity> level1Menu = categoryEntityList.stream().filter((categoryEntity) -> {
            return categoryEntity.getParentCid() == 0;
        }).map((menu) ->{
            menu.setChildren(getChildren(menu, categoryEntityList));
            return menu;
        }).sorted(
                Comparator.comparingInt(CategoryEntity::getSort)
        ).collect(Collectors.toList());

        return level1Menu;
    }

    /**
     * 遞迴查詢子選單
     * @param root 根選單
     * @param all 所有查詢目標
     * @return 目標選單的所有子選單
     */
    private List<CategoryEntity> getChildren(CategoryEntity root, List<CategoryEntity> all) {
        List<CategoryEntity> categoryEntityList = all.stream().filter(categoryEntity ->
            categoryEntity.getParentCid() == root.getCatId()
        ).map(categoryEntity -> {
            // 找子選單,會出現遞迴呼叫
            categoryEntity.setChildren(getChildren(categoryEntity, all));
            return categoryEntity;
        }).sorted(
                // 按照資料的sort欄位排序
                Comparator.comparingInt(menu -> (menu.getSort() == null ? 0 : menu.getSort()))
        ).collect(Collectors.toList());

        return categoryEntityList;
    }
}

 查詢結果: