1、準(zhǔn)備表結(jié)構(gòu)及對(duì)應(yīng)的表數(shù)據(jù)
a、表結(jié)構(gòu):
create table TB_TREE
(
CID NUMBER not null,
CNAME VARCHAR2(50),
PID NUMBER //父節(jié)點(diǎn)
)
b、表數(shù)據(jù):
insert into tb_tree (CID, CNAME, PID) values (1, '中國(guó)', 0);
insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1);
insert into tb_tree (CID, CNAME, PID) values (3, '廣東省', 1);
insert into tb_tree (CID, CNAME, PID) values (4, '上海市', 1);
insert into tb_tree (CID, CNAME, PID) values (5, '廣州市', 3);
insert into tb_tree (CID, CNAME, PID) values (6, '深圳市', 3);
insert into tb_tree (CID, CNAME, PID) values (7, '海珠區(qū)', 5);
insert into tb_tree (CID, CNAME, PID) values (8, '天河區(qū)', 5);
insert into tb_tree (CID, CNAME, PID) values (9, '福田區(qū)', 6);
insert into tb_tree (CID, CNAME, PID) values (10, '南山區(qū)', 6);
insert into tb_tree (CID, CNAME, PID) values (11, '密云縣', 2);
insert into tb_tree (CID, CNAME, PID) values (12, '浦東', 4);
2、TreeNode對(duì)象,對(duì)應(yīng)tb_tree
public class TreeNode implements Serializable {
private Integer cid;
private String cname;
private Integer pid;
private List nodes = new ArrayList();
public TreeNode() {
}
//getter、setter省略
}
3、測(cè)試數(shù)據(jù)
public class TreeNodeTest {
@Test
public void loadTree() throws Exception{
System.out.println(JsonUtils.javaToJson(recursiveTree(1)));
}
/**
- 遞歸算法解析成樹形結(jié)構(gòu)
- @param cid
- @return
- @author jiqinlin
*/
public TreeNode recursiveTree(int cid) {
//根據(jù)cid獲取節(jié)點(diǎn)對(duì)象(SELECT * FROM tb_tree t WHERE t.cid=?)
TreeNode node = personService.getreeNode(cid);
//查詢cid下的所有子節(jié)點(diǎn)(SELECT * FROM tb_tree t WHERE t.pid=?)
List childTreeNodes = personService.queryTreeNode(cid);
//遍歷子節(jié)點(diǎn)
for(TreeNode child : childTreeNodes){
TreeNode n = recursiveTree(child.getCid()); //遞歸
node.getNodes().add(n);
}
return node;
}
}