穀粒商城-樹型選單查詢
阿新 • • 發佈:2022-05-09
三級選單資料查詢
電商平臺中常見三級選單
資料庫中資料通過父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; } }
查詢結果: