Java 如何使用mybatis实现递归映射?

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

我有一个java类

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>