元素的el-tree控件后台数据结构的生成以及方法的抽取

  

最近用到了el-tree控件,主要是数据的格式,按照官网的数据格式来就可以显示节点的树形结构了。
  代码参考很多
  

  

这里给出一个比较好的链接:https://www.jb51.net/article/181990.htm
  

  

代码说明在注释里写的很详细了已经,这里不再叙述说明。至于为什么抽取成这种格式的数据,那是因为ElementUI-tree规定的数据格式,你想要用这个控件,就必须按照他们规定的这个格式来。
  数据格式如下:
  

  

痹氐膃l-tree控件后台数据结构的生成以及方法的抽取"

  

控制器代码         @RequestMapping ("/cateList”)   @ResponseBody   公共ListcateList () {//整体思路://1,取得所有数据,放入集合List1 (tbCategories)//2,将List1所有数据都放入到地图(treeMap)中:元素id为键,元素本身对象为值//3、取得顶层节点放入集合用于中(resultList)//4,遍历List1中的所有数据,通过数据的parentId为键在地图中取的值//1)如果能取到,则说明该元素有父节点//1,判断该父节点下的childList中是否有已经子节点//1,若无,则创建一个集合,将子节点放入//2,若有,则直接将子节点放入即可//5,把放好的数据放回到映射中//6日返回用于(resultList)//注意:整个过程将所有数据取出放入用于(resultList),返回的也是//用于         ListtbCategories=categoryService.cateList ();      ListresultList=new ArrayList ();//存贮顶层的数据      Object> Map<对象;treeMap=new HashMap ();   对象itemTree;      for (int i=0; i< tbCategories.size (),,我+ +){! tbCategories.isEmpty ();   itemTree=tbCategories.get(我);   treeMap.put (tbCategories.get (i) .getNodeId (), tbCategories.get(我));//把所有的数据都放到映射中         }//这里也可以用另一种方法,就是拿到集合里的每个元素的父id去数据库中查询,但是,这样与数据库的交互次数就太多了//遍历地图得到顶层节点(游离节点也算作顶层节点)   for (int i=0; i< tbCategories.size();我+ +){//优点1:整个方法,只查询了一次数据库//优点2:不用知道顶层节点的id   如果(! treeMap.containsKey (tbCategories.get (i) .getParentId ())) {//我们在存储的时候就是将元素的id为键,元素本身为值存入的//以元素的父id为键,在地图里取的值,若取不到则,对应的元素不存在,即没有父节点,为顶层节点或游离节点//将顶层节点放入列表集合   resultList.add (tbCategories.get (i));   }   }//循环数据,将数据放到该节点的父节点的孩子属性中   for (int i=0; i< tbCategories.size (),,我+ +){! tbCategories.isEmpty ();//数据库中,若一个元素有子节点,那么,该元素的id为子节点的父id//treeMap.get (tbCategories.get (i) .getParentId ());//从映射集合中找到父节点   TbCategory类别=(TbCategory) treeMap.get (tbCategories.get (i) .getParentId ());   如果(类别!=null){//不等于空,也就意味着有父节点//有了父节点,要判断父节点下存贮字节点的集合是否存在,然后将子节点放入   如果(category.getChildList ()==null) {//判断一个集合是否被创建用零:表示结合还没有被分配内存空间(即还没有被创建),内存大小自然为null//用集合的大小判断集合中是否有元素,为0,没有元素(集合已经被创建),   类别。setChildList(新ArrayList ());   }   category.getChildList()阀门(tbCategories.get(我));//添加到父节点的ChildList集合下//这一步其实可以不要,因为我们修改了数据(添加了子节点,然后在将元素放入到地图中,//若键相同,地图会自动覆盖掉相同的键值对,达到更新地图集合中的数据的目的),但是我们//这里只是从地图中取的值,而并不关心值的子节点(子节点是对象本身自己封装的。这里我们知道//元素从查询后放入地图,父节点放入列表,然后通过键来在地图中取得对象,之后再将修改过的对象重新放当入地图中//,我们并没有直接操作,但是在列表中对象的值却是已经修改过了,这就是对象的引用传递,同一个引用对象是通过//地址值来操作对象的,即有不同的引用,但是对象中的属性是已经通过引用的操作而改变的,所以这里一旦修改过后,无论是地图中还是列表中,再次取值时都已经是更改过后的值了)   treeMap.put (tbCategories.get (i) .getParentId(),类别);//把放好的数据放回到映射中   }      }         返回resultList;   }

元素的el-tree控件后台数据结构的生成以及方法的抽取