树形结构通用工具类
admin
2024-03-16 18:51:35
0

树形结构通用工具类

准备数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept`  (`dept_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '部门名称',`parent_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '父级编号',`dept_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门名称',`sort` int(11) NULL DEFAULT NULL COMMENT '排序',`leader` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人',`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系方式',`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',`status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门状态',`create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',`update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',`update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',`remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注',`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址',PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of sys_dept
-- ----------------------------
INSERT INTO `sys_dept` VALUES ('1', '0', '济南总公司', 1, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('10', '8', '设计部', 3, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('1316361008259792896', '1316360459930042368', '软件部', 1, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('1316361192645591040', '1316360459930042368', '市场部', 1, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('1377824449830584320', '3', '财务部', 1, '就眠仪式', '15553726531', '854085467@qq.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('1377825171905183744', '8', '财务部', 1, '就眠仪式', '15553726531', '854085467@qq.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('3', '1', '杭州分公司', 1, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '浙江杭州');
INSERT INTO `sys_dept` VALUES ('4', '2', '软件部', 2, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('5', '2', '市场部', 2, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('6', '3', '软件部', 3, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '浙江杭州');
INSERT INTO `sys_dept` VALUES ('7', '3', '设计部', 4, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('8', '1', '深圳分公司', 3, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');
INSERT INTO `sys_dept` VALUES ('9', '8', '软件部', 3, '就眠仪式', '15553726531', 'pearadmin@gmail.com', '0', NULL, NULL, NULL, NULL, NULL, '山东济南');SET FOREIGN_KEY_CHECKS = 1;

测试准备

springboot项目

    org.springframework.bootspring-boot-startercn.hutoolhutool-all5.8.6mysqlmysql-connector-java

说明:

使用 hutool 开源项目的 db 模块 , 快速进行数据库操作

工具类

创建数据库连接工具类
DataSourceInit.java

public class DataSourceInit {public static DataSource initDatasource(Class type,String driver ,String url,String user , String pass){DataSource build = DataSourceBuilder.create()// 设置为 mysql 数据源.type(type).driverClassName(driver).url(url).password(user).username(pass).build();return build;}public static DataSource initMySQLDatasource(String driver ,String url,String user ,String pass){DataSource build = DataSourceBuilder.create()// 设置为 mysql 数据源.type(MysqlDataSource.class).driverClassName(driver).url(url).password(user).username(pass).build();return build;}
}

准备树形结构的类

package com.example.data;import cn.hutool.db.Db;
import cn.hutool.db.Entity;import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;public class TreeDataByMysql {public static List getTreeData() throws SQLException {DataSource dataSource = DataSourceInit.initMySQLDatasource("jdbc:mysql://www.shaoming.club:3306/pear_admin", "jdbc:mysql://www.shaoming.club:3306/pear_admin","root", "root");Db db = Db.use(dataSource);List sysDeptList = db.findAll(Entity.create("sys_dept"), SysDept.class);return sysDeptList;}}

测试类

package com.example.test.tree;import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.json.JSONUtil;
import com.example.data.SysDept;
import com.example.data.TreeDataByMysql;import java.sql.SQLException;
import java.util.List;public class TreeTest {public static void main(String[] args) throws SQLException {List treeData = TreeDataByMysql.getTreeData();//配置TreeNodeConfig treeNodeConfig = new TreeNodeConfig();// 改变子集的属性名称 , 有默认值 , 默认值为 children , 我们可以进行自定义treeNodeConfig.setChildrenKey("child");// 自定义属性名 都要默认值的treeNodeConfig.setWeightKey("sort");treeNodeConfig.setIdKey("deptId");// 最大递归深度treeNodeConfig.setDeep(3);//转换器List> treeNodes = TreeUtil.build(treeData, "0", treeNodeConfig,(treeNode, tree) -> {tree.setId(treeNode.getDeptId());tree.setParentId(treeNode.getParentId());tree.setWeight(treeNode.getSort());tree.setName(treeNode.getDeptName());// 扩展属性 ...tree.putExtra("extraField", "扩展字段");});System.out.println(JSONUtil.toJsonPrettyStr(treeNodes));System.out.println("---------------------------------------------------=============>");// hutool 官网的入门案例
//        List> nodeList = CollUtil.newArrayList();
//        nodeList.add(new TreeNode<>("1", "0", "系统管理", 5));
//        nodeList.add(new TreeNode<>("11", "1", "用户管理", 222222));
//        nodeList.add(new TreeNode<>("111", "11", "用户添加", 0));
//        nodeList.add(new TreeNode<>("2", "0", "店铺管理", 1));
//        nodeList.add(new TreeNode<>("21", "2", "商品管理", 44));
//        nodeList.add(new TreeNode<>("221", "2", "商品管理2", 2));
//        // 0表示最顶层的id是0
//        List> treeList = TreeUtil.build(nodeList, "0");
//        System.out.println(treeList);
//        System.out.println(JSONUtil.toJsonPrettyStr(treeList));}
}

控制台打印

[
{
“deptId”: “1”,
“parentId”: “0”,
“sort”: -1,
“name”: “济南总公司”,
“extraField”: “扩展字段”,
“child”: [
{
“deptId”: “8”,
“parentId”: “1”,
“sort”: -3,
“name”: “深圳分公司”,
“extraField”: “扩展字段”,
“child”: [
{
“deptId”: “9”,
“parentId”: “8”,
“sort”: -3,
“name”: “软件部”,
“extraField”: “扩展字段”
},
{
“deptId”: “10”,
“parentId”: “8”,
“sort”: -3,
“name”: “设计部”,
“extraField”: “扩展字段”
},
{
“deptId”: “1377825171905183744”,
“parentId”: “8”,
“sort”: -1,
“name”: “财务部”,
“extraField”: “扩展字段”
}
]
},
{
“deptId”: “3”,
“parentId”: “1”,
“sort”: -1,
“name”: “杭州分公司”,
“extraField”: “扩展字段”,
“child”: [
{
“deptId”: “7”,
“parentId”: “3”,
“sort”: -4,
“name”: “设计部”,
“extraField”: “扩展字段”
},
{
“deptId”: “6”,
“parentId”: “3”,
“sort”: -3,
“name”: “软件部”,
“extraField”: “扩展字段”
},
{
“deptId”: “1377824449830584320”,
“parentId”: “3”,
“sort”: -1,
“name”: “财务部”,
“extraField”: “扩展字段”
}
]
}
]
}
]
---------------------------------------------------=============>

相关内容

热门资讯

邮储银行行长芦苇兼任公司首席合... 5月26日,邮储银行发布董事会决议公告,邮储银行行长芦苇自2026年5月26日起兼任邮储银行首席合规...
我愿意二次到店吗?小店主理人交... 来源:滚动播报 (来源:上观新闻) 咖啡店主理人可以去餐饮店体验一天,感受烟火气和客流管理;手工...
原创 深... 当政策暖风遇上资产配置需求,深圳楼市正上演一场“热度与信心齐飞”的戏码!上周(5.18-5.24),...
被封千万网红大蓝卷土重来:拉人... 蓝鲸新闻5月26日讯(记者 赵凯)“朋友圈散布经济恐慌言论制造焦虑,拉人头设多级返利,数百人入局、累...
抖音商城618前六日数据:消费... “清凉经济”热度高:抖音商城618首阶段空气循环扇订单量同比增长348% 作者 I 钱游 报道 I ...
金华有闲置贵金属想变现该怎么挑... 当下闲置物品处置、短期资金周转的需求日渐普遍,市面上的相关服务机构水平参差不齐,不少有黄金回收需求的...
千亿市值芯片企业完成IPO辅导... 【大河财立方消息】5月26日,新三板挂牌企业宸芯科技股份有限公司(证券简称:宸芯科技)公告,收到青岛...
NBBOSS R1全球首发 重... 5月26日,信人智能旗下全球首款企业家专属AI决策伙伴NBBOSS AI决策机器人R1正式全球首发。...
NFC果汁配料表“水”排第一?... 随着气温升高,果汁进入消费旺季。然而很多果汁产品的标注却让消费者感到困惑。比如:有的标注“纯果汁”,...
存储牛市与全民狂热:韩国股市泡... 2026年5月的韩国,正经历一场史无前例的资本狂欢。自2025年4月触底以来,KOSPI指数在18个...
下架,召回!双汇子公司猪肉抗生... 近日,黑龙江省市场监督管理局网站发布关于食品安全监督抽检信息的通告(2026年第7期)。 其中,望奎...
换帅潮席卷白酒圈 白酒本轮人事变动频次之高、画像之多元,几乎超过了过去任何一个周期。 5月19日,“河北王”老白干酒宣...
4月意大利起泡酒猛增122.5... 近日,海关总署公布了2026年4月葡萄酒进口数据。其中,起泡酒表现尤为突出,进口量同比增长35.8%...
华为“韬定律”提振港股半导体股... 财联社5月26日讯(编辑 胡家荣)半导体产业链个股集体走强。截至发稿,华虹半导体(01347.HK)...
历史不会重演,但会惊人相似:中... 金价疯涨别乱买!复刻2015年走势,普通人记住3个保命妙招 最近逛商场,最大的感受就是黄金柜台太热闹...
商品标签被指涉嫌性暗示,盒马道... 近日,盒马旗下一款粉木耳产品因标签设计引发争议,不少网友吐槽该商品标签低俗,涉嫌性暗示。 25日晚...
东莞一上市公司董事会“换血”,... 近日,易事特集团股份有限公司发布《关于董事会完成换届选举及聘任高级管理人员、证券事务代表暨公司控制权...
做宠物食品,已经很难赚到钱了? 流量争夺战里没有赢家 撰文/ 黎炫岐 编辑/ 李觐麟 排版/ Annalee “它经济”,一个持续升...
2万亿美元!SpaceX上市前... “你想在早上醒来时觉得未来会很美好——而这正是成为太空文明的全部意义所在。它关乎相信未来,并认为未来...