跳到主要内容

3.4 多属性递归

查询动态实体

TreeNodeTable table = TreeNodeTable.$;

TreeNode treeNode = sqlClient
.findById(
TreeNodeFetcher.$
.allScalarFields()
.recursiveParent()
.recursiveChildNodes(),
10L
);

得到如下的数据

{
"id":10,
"name":"Woman",
"parent":{
"id":9,
"name":"Clothing",
"parent":{
"id":1,
"name":"Home",
"parent":null
}
},
"childNodes":[
{
"id":11,
"name":"Casual wear",
"childNodes":[
{
"id":12,
"name":"Dress",
"childNodes":[]
},
{
"id":13,
"name":"Miniskirt",
"childNodes":[]
},
{
"id":14,
"name":"Jeans",
"childNodes":[]
}
]
},
{
"id":15,
"name":"Formal wear",
"childNodes":[
{
"id":16,
"name":"Suit",
"childNodes":[]
},
{
"id":17,
"name":"Shirt",
"childNodes":[]
}
]
}
]
}

查询静态DTO

src/main/dto文件夹下新建任何一个扩展名为dto的文件,编辑代码如下

export com.yourcompany.yourproject.model.TreeNode
-> package com.yourcompany.yourproject.model.dto

RecursiveTreeNodeView {
#allScalars(this)
parent* ❶
childNodes* ❷
}

编译项目,生成Java/Kotlin类型RecursiveTreeNodeView

TreeNodeTable table = TreeNodeTable.$;

RecursiveTreeNodeView treeNode = sqlClient
.findById(
RecursiveTreeNodeView.class,
10L
);

得到如下数据

RecursiveTreeNodeView(
id=10,
name=Woman,
parent=RecursiveTreeNodeView.TargetOf_parent( ❶
id=9,
name=Clothing,
parent=RecursiveTreeNodeView.TargetOf_parent( ❶
id=1,
name=Home,
parent=null
)
),
childNodes=[
RecursiveTreeNodeView.TargetOf_childNodes(
id=11,
name=Casual wear,
childNodes=[
RecursiveTreeNodeView.TargetOf_childNodes(
id=12,
name=Dress,
childNodes=[]
),
RecursiveTreeNodeView.TargetOf_childNodes(
id=13,
name=Miniskirt,
childNodes=[]
),
RecursiveTreeNodeView.TargetOf_childNodes(
id=14,
name=Jeans,
childNodes=[]
)
]
),
RecursiveTreeNodeView.TargetOf_childNodes(
id=15,
name=Formal wear,
childNodes=[
RecursiveTreeNodeView.TargetOf_childNodes(
id=16,
name=Suit,
childNodes=[]
),
RecursiveTreeNodeView.TargetOf_childNodes(
id=17,
name=Shirt,
childNodes=[]
)
]
)
]
)