递归树形结构查询方法笔记

/**
 * 递归查询树形结构(带注释模板)
 * 适用场景:根据父ID查询子节点并嵌套为树形结构(如分类、菜单、部门等)
 */
public List<{Entity}> getTree(Long parentId) {
    // 1. 处理父ID为空的情况(默认查根节点)
    parentId = (parentId == null) ? {RootParentId} : parentId;

    // 2. 构建查询条件:查询parentId对应的子节点
    LambdaQueryWrapper<{Entity}> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq({Entity}::{ParentIdField}, parentId); // 例如:Entity::getParentId
    List<{Entity}> list = {entityMapper}.selectList(queryWrapper); // 例如:departmentMapper

    // 3. 递归查询并设置子节点(核心逻辑)
    if (!CollectionUtils.isEmpty(list)) {
        list.forEach(item -> {
            // 递归调用自己,将当前节点的ID作为父ID查询子节点
            List<{Entity}> children = getTree(item.getId());
            item.set{ChildrenField}(children); // 例如:setChildren
        });
    }

    return list;
}

模板使用说明‌(替换占位符)

占位符说明示例
{Entity}你的实体类名(如分类、菜单、部门等)TbGoodsCategory
{ParentIdField}实体类中表示父ID的字段(需符合Lambda表达式写法)TbGoodsCategory::getParentId
{RootParentId}根节点的父ID值(通常为0或-1,根据业务定)0L
{ChildrenField}实体类中存储子节点的集合字段(需有对应的set方法)setChildren
{entityMapper}MyBatis Plus的Mapper对象(首字母小写的实体类名 + Mapper)tbGoodsCategoryMapper
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值