以商品分类表为例,重点看分类ID和父分类ID
public List<Map<String,Object>> getGoodsCategoryTree() {
//1.获取所有商品分类,条件:category_id!=0(0为顶级菜单的父类ID)和disabled=0(删除标记为正常)
List<GoodsCategoryEntity> goodsCategoryList = this.baseMapper.selectList(new EntityWrapper<GoodsCategoryEntity>()
.ne("category_id", 0)
.eq("disabled", 0));
//2.调用生成tree结构数据的方法,参数是所有商品分类和顶级菜单父类ID
List<Map<String,Object>> categoryTree = categoryTreeHandle(goodsCategoryList, 0);
return categoryTree;
}
private List<Map<String,Object>> categoryTreeHandle(List<GoodsCategoryEntity> categoryEntityList, int pid) {
List<Map<String,Object>> resultList = new ArrayList<>();
//获取顶级元素集合
Integer parentId;
for (GoodsCategoryEntity goodsCategory : categoryEntityList) {
parentId = goodsCategory.getParentCategoryId();
if (pid == parentId) {
Map map = new HashMap();
map.put("label", goodsCategory.getCategoryName());
map.put("value", goodsCategory.getCategoryId());
resultList.add(map);
}
}
//获取每个顶层元素的子数据集合
for (Map map : resultList) {
int value = Integer.parseInt(map.get("value").toString());
List<Map<String,Object>> temp = categoryTreeHandle(categoryEntityList, value);
if (temp.size() > 0) {
map.put("children", temp);
}
}
return resultList;
}
页面接收到的数据效果
主要是应用递归遍历出父节点下的所有子节点