(1)引用
在前端页面进行数据展示的时候,有的数据是有层次结构的,这时候展示的时候,需要用树状结构进行展示。
(2)思路启迪
有两种实现的方式:
a.递归的方式,进行数据的无数次递归调用,但是需要注意的是,递归是必须要有出口
b.循环的方式,通过父级找子类,子类找父级,来确定层次关系
(3)java实现
在domain层新建两个字段
private ProductType parent;
private List<ProductType> children=new ArrayList<ProductType>();
//并提供相应的get/set方法
实现三层的调用,因为有逻辑代码,所以将实现的代码写在service层
/*
循环的思路分析:
查询所有,找到一级菜单,将一级菜单作为父菜单
在根据数据库表中的id是pid的父级,找到每一个父级下面的子,然后将儿子装到父菜单下面
*/
先注入mapper层的接口为 productTypeMapper,mapper中有一个方法selectList是查询所有的数据
public List<ProductType> treeData() {
List<ProductType> productTypeList = productTypeMapper.selectList(null);//查询所有
List<ProductType> listParent=new ArrayList<ProductType>();//表示父菜单
Map<Long,ProductType> map=new HashMap<Long,ProductType>();//这个map是为了让儿子通过id和pid的关系找到父级的
for (ProductType product : productTypeList) {
map.put(product.getId(), product);
}
for (ProductType productType : productTypeList) {
if(productType.getPid()==0){//最顶级的父菜单
listParent.add(productType);
}else { //儿子,还需要通过儿子去找到父亲
ProductType parent = map.get(productType.getPid());//通过儿子的pid找到它父亲
parent.getChildren().add(productType);
}
}
return listParent;
}