可爱静

记录生活、学习和工作

0%

记一次HuTool树操作

摘要

  • 目的是从一棵大树中取出一颗子树
  • 使用HuTool工具类中的树形结构

图解数据库存储结构

fG7Yzq.md.png

  • 数据库中有类似于id1、2的多个根节点
  • 每个根节点下有许多子节点

    根本问题

  • 使用HuTool工具将查询到的list转换为tree
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //配置
    TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
    // 自定义属性名 都要默认值的
    treeNodeConfig.setWeightKey("sortNum");
    treeNodeConfig.setIdKey("xxxxId");
    treeNodeConfig.setDeep(5);
    treeNodeConfig.setParentIdKey("parentId");
    treeNodeConfig.setNameKey("children");
    // 3.转树
    List<Tree<Long>> build = TreeUtil.build(zzzzs, treeTop,
    treeNodeConfig, (zzzz, tree) -> {
    // 也可以使用 tree.setId(object.getId());等一些默认值
    tree.putExtra("xxxx", zzzz.getXxxxx());
    tree.putExtra("xxxx", zzzz.getXxxxx());
    tree.putExtra("xxxx", zzzz.getXxxxx());
    tree.putExtra("xxxx", zzzz.getXxxxx());
    tree.putExtra("xxxx", zzzz.getXxxxx());
    tree.putExtra("sortNum", zzzz.getXxxxx());
    tree.putExtra("xxxxx", zzzz.getXxxxx());
    });
    return build;

  • treeTop:设置以treeTop为根节点来查询
  • 例如需要查询id为2这颗子树,treeTop设置为2,查询的结果中不会包含id为2这个节点

    解决方法

  • 解决方法就是新建一个vo,属性包含子树展示的属性和List<Tree> tree;
  • 查一遍id为2的数据root,使用BeanUtils.copyProperties()方法,将root的值copy到vo里,然后将查询到的子树塞入vo的tree
  • 返回vo