java如何使用mybatis实现递归映射?
我有一个java类
class Node {
String id;
String name;
List<Node> children;
}
MySQL中的表:
NODES:
| ID | NAME |
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 4 | name4 |
还有另一张关系桌
RELATIONS:
| PARENT_ID | CHILD_ID |
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
通常我们可以使用left join和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
只是另一个具有另一个模型的表,那么它应该可以工作。问题是,我们如何编写mybatis xml配置,以递归地映射到指向自身的结构之上
# 1 楼答案
您只需要指定适当的列别名并使用
columnPrefix
我还应该提到,上面的结果映射适用于任何级别的节点,因为
columnPrefix
是递归应用的