数据库的菜单,权限表是具有多层级结构,有ID和PARENT_ID两个关键性的字段
通过PARENT_ID和ID相等构建层级结构:
然后需要在Java中构建出层级的数据结构,然后输出成JSON返回给前端渲染:
1、构建Tree的结构体:
字段ID和PARENT_ID,然后和一个必须初始化的List集合、
其他的字段就是要显示的东西,这些随意加
public class WechatOrgTreeDto {private Integer id; private Integer parentId; private String name; private List<WechatOrgTreeDto> list = new ArrayList<>(); public WechatOrgTreeDto(Integer id, Integer parentId, String name) { this.id = id; this.parentId = parentId; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getParentId() { return parentId; } public void setParentId(Integer parentId) { this.parentId = parentId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<WechatOrgTreeDto> getList() { return list; } public void setList(List<WechatOrgTreeDto> list) { this.list = list; } }
2、构建数据
然后是构建结构的方法:
final String SQL = "SELECT * FROM tt_wechat_org"; // 先查询所有 List<Map> all = DAOUtil.findAll(SQL, null); List<WechatOrgTreeDto> treeList = new ArrayList<>(); // 第一次遍历是为处理数据 for (Map map : all) { treeList.add(new WechatOrgTreeDto( Integer.valueOf(map.get("ID").toString()), Integer.valueOf(map.get("PARENT_ID").toString()), map.get("NAME").toString() )); } // 第二次遍历开始构建结构 List<WechatOrgTreeDto> wechatOrgTreeDtoList = new ArrayList<>(); for (WechatOrgTreeDto wechatOrgTreeDto : treeList) { // 需要头节点装入第一个元素, if(1 == wechatOrgTreeDto.getId()) wechatOrgTreeDtoList.add(wechatOrgTreeDto); for (WechatOrgTreeDto subTree : treeList) { // 第二次便利用子节点的ParentID和父节点ID对比进行添加 if (subTree.getParentId() .equals(wechatOrgTreeDto.getId()) ) { wechatOrgTreeDto.getList().add(subTree); } } }