做项目时,我们往往要用树形结构来表示某些数据之间的关联关系,如行政部门、菜单、行政区域等等。这些树状结构往往需要在数据库中持久化。在进行树形结构表设计时,一般会把父子关系的数据放在一张表中,并添加一个字段,指向父亲节点。如下所示的行政区域表:
那么如何在Mybatis中对这种树形关系表进行查询呢?今天小博老师就给大家介绍下如何在Mybatis中实现对树形关系表的递归查询。
首先建立与属性表对应的Java Bean Area.java,源码如下:
childList属性存放当前Area对象的所有子节点的集合。
根据JavaBean的关系设置,我们再来设计Mapper XML的映射:
我们使用了collection元素的select属性,根据当前Area的Id查询Area的所辖区域列表。查询语句findAreaByparentId中,把传入的Areaid当做parent id,把所有下属区域全部查询出来。
Mapper接口文件定义就很简单了:
测试核心代码:
测试结果: