新建数据库表
-- Create table
create table TREENODE
(
id VARCHAR2(32),
text VARCHAR2(128),
pid VARCHAR2(32),
lv VARCHAR2(32)
);
-- Add comments to the columns
comment on column TREENODE.id
is 'ID';
comment on column TREENODE.text
is '名称';
comment on column TREENODE.pid
is '父ID';
comment on column TREENODE.lv
is '层级';
插入测试数据
插入根节点数据
insert into treenode (ID, TEXT, PID, LV) values ('01', '总部', '-1', '1');
-- 总部下插入70个二级单位
declare
begin
for c in (select id as id from treenode where LV = '1') loop
for i in 10 .. 80 loop
insert into treenode values (c.id || i,'二级单位' || c.id || i ,c.id,'2');
end loop;
end loop;
end;-- 每个二级单位下插入10个三级单位
declare
begin
for c in (select id as id from treenode where LV = '2') loop
for i in 10 .. 20 loop
insert into treenode values (c.id || i,'三级单位' || c.id || i ,c.id,'3');
end loop;
end loop;
end;--每个三级单位下插入5个四级单位
declare
begin
for c in (select id as id from treenode where LV = '3') loop
for i in 10 .. 15 loop
insert into treenode values (c.id || i,'四级单位' || c.id || i ,c.id,'4');
end loop;
end loop;
end;
新建实体类
public class TreeNode {
private String id;private String text;
private String pid;
private List<TreeNode> children;
private String state;.....
}
递归封装数据
//bid 为根节点ID
public List<TreeNode> getStartJson(String bid){
List<TreeNode> queryList = treeNodeMapper.queryJsonTreeALL();
ArrayList<TreeNode> parentList = new ArrayList<TreeNode>();
TreeNode node =null;
for (TreeNode treeNode : queryList) {
if(treeNode.getId().equals(bid)){
node = new TreeNode();
node.setId(treeNode.getId());
node.setText(treeNode.getText());
node.setState("closed");
parentList.add(treeNode);
break;
}
}
getChildren(parentList,queryList);
return parentList;
}
private static void getChildren(List<TreeNode> parentList,List<TreeNode> allList) {
for (TreeNode node : parentList) {
ArrayList<TreeNode> childrenList = new ArrayList<TreeNode>();
TreeNode treenode =null;
for (TreeNode allNode : allList) {
if(allNode.getPid().equals(node.getId())){
treenode = new TreeNode();
treenode.setId(allNode.getId());
treenode.setText(allNode.getText());
treenode.setState("closed");
childrenList.add(treenode);
}
}
if(!CollectionUtils.isEmpty(childrenList)){
node.setChildren(childrenList);
getChildren(childrenList,allList);
}
}
}