Java 如何使用mybatis实现递归映射?
我有一个java类Java 如何使用mybatis实现递归映射?,java,mybatis,spring-mybatis,Java,Mybatis,Spring Mybatis,我有一个java类 class Node { String id; String name; List<Node> children; } 还有一张关系表 RELATIONS: | PARENT_ID | CHILD_ID | | 1 | 2 | | 2 | 3 | | 2 | 4 | 通常我们可以使用leftjoin和collection将它们连接在一起,如下所示 <re
class Node {
String id;
String name;
List<Node> children;
}
还有一张关系表
RELATIONS:
| PARENT_ID | CHILD_ID |
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
通常我们可以使用leftjoin和collection将它们连接在一起,如下所示
<resultMap id="node" type="org.hello.Node>
<id property="id" column="ID"/>
<result property="name" column="NAME"/>
<collection property="children" ofType="org.hello.Node" resultMap="node"/>
</resultMap>
<select id="select" resultMap="node">
SELECT ID, NAME FROM NODES N
LEFT JOIN RELATIONS R ON N.ID = R.PARENT_ID
LEFT JOIN NODES N1 ON R.CHILD_ID = N1.ID
</select>
您只需指定适当的列别名并使用列前缀
选择
N1.ID,N1.NAME,
N2.ID C_ID,N2.NAME C_NAME,
来自节点N1
R1.PARENT_ID=N1.ID上的左连接关系R1
N2.ID=R1.CHILD\u ID上的左连接节点N2
我还应该提到,上面的结果映射适用于任何级别的节点,因为columnprofix
是递归应用的
选择
N1.ID,N1.NAME,
N2.ID C_ID,N2.NAME C_NAME,
N3.ID C_C_ID,N3.NAME C_C_NAME
来自节点N1
R1.PARENT_ID=N1.ID上的左连接关系R1
N2.ID=R1.CHILD\u ID上的左连接节点N2
R2.PARENT_ID=N2.ID上的左连接关系R2
在N3.ID=R2.CHILD\u ID上左连接节点N3
<resultMap id="node" type="org.hello.Node>
<id property="id" column="ID"/>
<result property="name" column="NAME"/>
<collection property="children" ofType="org.hello.Node" resultMap="node"/>
</resultMap>
<select id="select" resultMap="node">
SELECT ID, NAME FROM NODES N
LEFT JOIN RELATIONS R ON N.ID = R.PARENT_ID
LEFT JOIN NODES N1 ON R.CHILD_ID = N1.ID
</select>