再帰アルゴリズムを使用してデータベースと結合してjavaツリー構造に解析

14138 ワード

1、テーブル構造及び対応するテーブルデータa、テーブル構造を準備する:
create table TB_TREE
(
CID NUMBER not null,
CNAME VARCHAR2(50),
PID NUMBER //   
)

b、表データ:
insert into tb_tree (CID, CNAME, PID) values (1, '  ', 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, '   ', 5);
insert into tb_tree (CID, CNAME, PID) values (8, '   ', 5);
insert into tb_tree (CID, CNAME, PID) values (9, '   ', 6);
insert into tb_tree (CID, CNAME, PID) values (10, '   ', 6);
insert into tb_tree (CID, CNAME, PID) values (11, '   ', 2);
insert into tb_tree (CID, CNAME, PID) values (12, '  ', 4);

2、TreeNodeオブジェクト、対応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、テストデータ
public class TreeNodeTest {
@Test
public void loadTree() throws Exception{
System.out.println(JsonUtils.javaToJson(recursiveTree(1)));
}
 
/**
*            
*
* @param cid
* @return
* @author jiqinlin
*/
public TreeNode recursiveTree(int cid) {
//  cid      (SELECT * FROM tb_tree t WHERE t.cid=?)
TreeNode node = personService.getreeNode(cid);
//  cid       (SELECT * FROM tb_tree t WHERE t.pid=?)
List childTreeNodes = personService.queryTreeNode(cid); 
//     
for(TreeNode child : childTreeNodes){
TreeNode n = recursiveTree(child.getCid()); //  
node.getNodes().add(n);
}
 
return node;
}
}

出力されるjsonフォーマットは次のとおりです.
{
    "cid": 1,
    "nodes": [
        {
            "cid": 2,
            "nodes": [
                {
                    "cid": 11,
                    "nodes": [
                         
                    ],
                    "cname": "   ",
                    "pid": 2
                }
            ],
            "cname": "   ",
            "pid": 1
        },
        {
            "cid": 3,
            "nodes": [
                {
                    "cid": 5,
                    "nodes": [
                        {
                            "cid": 7,
                            "nodes": [
                                 
                            ],
                            "cname": "   ",
                            "pid": 5
                        },
                        {
                            "cid": 8,
                            "nodes": [
                                 
                            ],
                            "cname": "   ",
                            "pid": 5
                        }
                    ],
                    "cname": "   ",
                    "pid": 3
                },
                {
                    "cid": 6,
                    "nodes": [
                        {
                            "cid": 9,
                            "nodes": [
                                 
                            ],
                            "cname": "   ",
                            "pid": 6
                        },
                        {
                            "cid": 10,
                            "nodes": [
                                 
                            ],
                            "cname": "   ",
                            "pid": 6
                        }
                    ],
                    "cname": "   ",
                    "pid": 3
                }
            ],
            "cname": "   ",
            "pid": 1
        },
        {
            "cid": 4,
            "nodes": [
                {
                    "cid": 12,
                    "nodes": [
                         
                    ],
                    "cname": "  ",
                    "pid": 4
                }
            ],
            "cname": "   ",
            "pid": 1
        }
    ],
    "cname": "  ",
    "pid": 0
}