数据字典递归查询

建表

CREATE TABLE `s_dict` (
  `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs NOT NULL COMMENT 'id',
  `label` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs DEFAULT NULL COMMENT '标签',
  `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs DEFAULT NULL COMMENT '标签值',
  `type` varchar(255) COLLATE utf8mb4_zh_0900_as_cs DEFAULT NULL COMMENT '类别',
  `parent_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs DEFAULT NULL COMMENT '父级类型',
  `sort` int DEFAULT '0' COMMENT '排序',
  `comment` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs DEFAULT NULL COMMENT '备注',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs DEFAULT NULL COMMENT '修改人',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `del_flag` int DEFAULT '0' COMMENT '删除状态 0:否 1:是',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_zh_0900_as_cs COMMENT='数据字典表';

实体类

@Data
@TableName("s_dict")
@Schema(name = "s_dict", title = "数据字典实体类")
public class Dict extends BaseEntity {
    private static final long serialVersionUID = 1L;

    @Schema(title = "标签")
    private String label;

    @Schema(title = "标签值")
    private String value;

    @Schema(title = "父级类型")
    private String parentId;

    @Schema(title = "排序")
    private Integer sort;

    @Schema(title = "备注")
    private String comment;

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

    @Schema(title = "类别")
    private String type;
}

递归查询

public List<Dict> recursionAll() {
        List<Dict> all = selectDictList();
        List<Dict> tops = getTop();
        for(Dict dict : tops){
            dict.setChildren(getChildrenList(all, dict));
        }
        return tops;
    }

//获取父级节点
private List<Dict> getTop() {
        LambdaQueryWrapper<Dict> queryWrapper = new LambdaQueryWrapper<Dict>();
        queryWrapper.isNull(Dict::getParentId);
        return baseMapper.selectList(queryWrapper);
    }

//获取父级节点下所有子节点
private static List<Dict> getChildrenList(List<Dict> dictAll, Dict dict) {
        //遍历所有的节点,获取当前父节点的所有子节点
        List<Dict> childrenList = dictAll.stream().filter(p -> StringUtils.isNotBlank(p.getParentId()) && p.getParentId().equals(dict.getId())).collect(Collectors.toList());

        //递归处理:找到孩子节点的孩子节点,直至其没有孩子节点
        for (Dict child : childrenList) {
            //当前孩子节点child作为父节点继续遍历
            child.setChildren(getChildrenList(dictAll, child));
        }

        return childrenList;
    }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值