Mybatis递归查询树结构

Mybatis递归查询树结构样例

1. 实体类

@TableName(value ="t_test")
@Data
public class TTest {

    @TableField("id")
    private String id;

    @TableField("parent_id")
    private String parentId;

    @TableField("name")
    private String name;

    @TableField(exist = false)
    private List<TTest> children;

}

2. mapper接口类

List<TTest> getAllNode();

3. mapper xml类

<!-- 自定义返回值映射,子节点为查询SQL,并指定返回值字段 -->
<resultMap id="nodeList" type="com.asiainfo.sx.data.pojo.alarm.TTest">
    <id column="id" property="id"/>
    <result column="parent_id" property="parentId"/>
    <result column="name" property="name"/>
    <collection property="nodeList" column="{id=id, parentId=parent_id, name= name}" select="getNodeByParentId"/>
</resultMap>

<!-- 获取所有节点,返回值类型为自定义映射resultMap -->
<select id="getAllNode" resultMap="nodeList">
    select * from t_test where parent_id = 0
</select>

<!-- 查询子节点,返回值类型为自定义映射resultMap -->
<select id="getNodeByParentId" resultMap="nodeList">
    select * from t_test where parent_id = #{id}
</select>

4. 测试类

@SpringBootTest
@RunWith(SpringRunner.class)
public class Test {

    @Autowired
    private AlarlmListMapper listMapper

    @org.junit.Test
    public void test(){
        List<TTest> allNode = listMapper.getAllNode();
        System.out.println(JSONUtil.toJsonStr(allNode));
    }
}

输出结果:

[
    {
        "nodeList": [
            {
                "nodeList": [
                    {
                        "nodeList": [],
                        "parentId": "10",
                        "name": "老大-10-101",
                        "id": "101"
                    }
                ],
                "parentId": "1",
                "name": "老大-10",
                "id": "10"
            },
            {
                "nodeList": [],
                "parentId": "1",
                "name": "老大-11",
                "id": "11"
            }
        ],
        "parentId": "0",
        "name": "老大",
        "id": "1"
    },
    {
        "nodeList": [
            {
                "nodeList": [
                    {
                        "nodeList": [],
                        "parentId": "20",
                        "name": "老二-20-201",
                        "id": "201"
                    }
                ],
                "parentId": "2",
                "name": "老二-20",
                "id": "20"
            },
            {
                "nodeList": [],
                "parentId": "2",
                "name": "老二-21",
                "id": "21"
            }
        ],
        "parentId": "0",
        "name": "老二",
        "id": "2"
    }
]
  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值