使用情况:数据库设计的结构为父子结构数据,一般情况下我们通过查询操作查询出来的数据为List数据结果集,如果是普通数据当然就可以直接返回给前端了,但在前端需要树状结构的数据时我们就需要对这些数据进行层级处理一下了,以下便是我的处理方法代码:菜鸟程序员,口才或代码不好还望指导。此为个人笔记,不喜勿喷!
首先你的从数据库查出数据,这里就不细说过程了,也就是通过mapper.xml=>dao=>service=>controller这么一层过程,
结果如此:List<SysMenuVo> data = sysMenuService.queryMenu(roleId);
data为从数据库查出来的数据,单纯的查询返回的数据只是普通的等级数据,但数据中有子父级关系需要通过树状结构展示的时候就需要我们处理以下了,个人方法如下:
//再创建一个List用来存放最终的树状结构数据 List<Map<String, Object>> MenuList = new ArrayList<Map<String, Object>>(); //把从数据库查询出来的数据遍历处理 for(SysMenuVo vo: data){ Map<String,Object> map = new HashMap<String,Object>(); if("0".equals(vo.getpId())){//通过判断,0代表没有父级,也就是一级 map.put("children", getChildren(data,vo.getMenuId()));//继续往一级下面遍历,调用下面的处理方法,放入树状结构 map.put("id", vo.getMenuId()); map.put("label", vo.getMenuDes()); map.put("pid", vo.getpId()); MenuList.add(map);//先把一级存入结果 } }
//结果集转树状结构 public List<Map<String, Object>> getChildren(List<SysMenuVo> data,Long menuId){//参数为数据库的(原数据,一级id) List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); if(data==null||data.size()==0||menuId==null){ return list; } for(SysMenuVo vo:data ){ Map<String,Object> map = new HashMap<String,Object>(); if(menuId.toString().equals(vo.getpId())){//如果本级id与下面数据的父id相同,就说明是子父级关系 map.put("children", getChildren(data,vo.getMenuId()));//递归,查询子级下的子级 map.put("id", vo.getMenuId()); map.put("label", vo.getMenuDes()); map.put("pid", vo.getpId()); list.add(map); } } return list; }