树形结构通用工具类
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”: “扩展字段”
}
]
}
]
}
]
---------------------------------------------------=============>

相关内容

热门资讯

银行间主要利率债午间走势分化 每经AI快讯,7月28日,银行间主要利率债午间走势分化,30年期国债“26超长特别国债04”收益率下...
2026海河国际消费论坛即将在... 2026海河国际消费论坛将于7月30日下午在天津启幕,目前各项筹备工作已全部就绪。本届论坛以“创新服...
原创 一... 前言 1942年的一天,一名身穿军装的年轻人,悄悄走到一位老妇人的面前。他脸上带着疲惫,眼神中却依然...
原创 曹... 八十岁的曹德旺,这几年在公开场合谈到房子这两个字,语气一次比一次冷。他早年那句"房子不过是钢筋水泥堆...
股息率近5.5%!港股红利低波... 7月28日,港股红利资产延续强势。截至13时48分,港股红利低波ETF招商(520550)涨0.46...
企业文件共享平台怎么选?主流方... 文件共享平台种类繁多,各有侧重。今天这篇文章,把2026年市面上主流的企业文件共享平台做个系统梳理,...
币圈院士:7.26以太坊(ET... 币圈院士:7.26以太坊(ETH)双周期指标暗藏方向,行情即将破位?最新行情分析参考 以太坊现价18...
老铺黄金发盈喜后股价跌16.2... 观点网讯:7月28日,老铺黄金股价裂口低开12.97%,最低见325.8港元,收盘报332港元,跌1...
苏泊尔上半年营收净利双降,法籍... 瑞财经 严明会 近日,苏泊尔(002032.SZ)披露2026年半年度业绩快报。 公告显示,公司上半...
IPO雷达|陕西瑞科回复二轮问... 深圳商报·读创客户端记者 梁佳彤 7月27日,据北交所官网,陕西瑞科新材料股份有限公司(下称“陕西瑞...
普京签令,俄军扩编 据新华社报道,俄罗斯总统普京27日签署命令, 决定组建几支军事建筑工程部队,并将俄武装力量编制总人数...
2027年德国杜塞尔多夫国际铸... 展会名称:2027年德国杜塞尔多夫国际铸造、冶金、热处理及铸件展览会GMTN 开始时间:2027-0...
郑州有了温通刮痧培训示范基地 本报讯(记者 杨振东 通讯员 张丹婧)温通刮痧是中医外治法里的一种,简单说就是在传统刮痧基础上,结合...
整箱茅台和单瓶茅台,回收行情为... 不少天津藏友存在疑惑:同样年份、同样品相的飞天茅台,整箱装和拆箱单瓶的回收报价存在差距,不清楚背后的...
北京五粮液收购需要遵循哪些通用... 北京五粮液收购的行业背景 近年来高端白酒的收藏与流通市场规模稳步扩张,北京作为国内重要的消费城市,五...
微软CEO重磅警告:只依赖一家... 来源:环球网 【环球网科技综合报道】7月28日消息,据外媒TechCrunch报道,微软CEO萨提亚...
策略师:金价夏季维持4000美... 汇通财经APP讯——今夏金价大概率在4000美元/盎司附近震荡筑底,市场等待美联储货币政策清晰指引。...
大众叙事下白酒行业周期如何拆解... 白酒行业的波动往往并非单纯由供需关系决定,而是 宏观经济预期与 渠道库存周期共振的结果。在大众认知中...
沈皓南:黄金低位大区间运行,短... 大家好,我是沈皓南,差不多有一个月没有更新黄金文章了,这段时间我去了美丽的新疆,自驾了独库公路,观赏...
原创 上... 2000年9月28日傍晚,济青高速临淄出口边一家小饭馆的木门被推开,六个山东汉子鱼贯而入。几个小时前...