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

相关内容

热门资讯

原创 意... 美国关税带来的冲击已经对全球经济格局产生了影响。报道显示,意大利在2025年下半年的全球出口额超过了...
原创 A... 上证指数月线3连阳了,不出意外的话就又要创10年新高了。 从盈亏角度,体感很不好,不是没有上涨而是所...
Jellycat卖爆背后:Z世... 文丨特约撰稿 阿杜 刚刚结束的春节期间里,春晚无疑是最为关注的热门词之一,如果不是重温12年前的这场...
京津冀地区去年进出口值4.7万... 从天津海关获悉,京津冀协同发展上升为国家战略以来,京津冀地区进出口值从2014年的3.74万亿元增至...
绝对稀缺资源!吃透【稀土+小金... 很多人都在担心,AI 是否会抢走自己的饭碗。 但很多人没意识到,AI 再厉害,也造不出地下的稀缺资源...
原创 世... 翻起1995年的《财富》世界500强榜单,那种差距真的让人印象深刻——这是全球首次发布这份榜单,美国...
皮海洲:如何给投资者发放“春节... 皮海洲 | 立方大家谈专栏作者 给投资者发“春节红包”,这是近年来管理层比较重视的一件事件,并将此视...
刘强东和雷军登上新闻联播,排面... 来源:市场资讯 (来源:电商行业) 东哥和雷总,从创业时期就开始并肩作战,如今又携手走上了国际舞台...
“硅王”协鑫孵化的徐州独角兽冲... 文/徐培琪 马年首单获受理的IPO项目,花落徐州半导体材料独角兽——江苏鑫华半导体科技股份有限公司(...
成交价6604万!南京老洋房“... 2月27日,南京市老洋房“张治中公馆”在阿里资产平台成功法拍。此次拍卖有3.9万余人次围观。经过两名...
双良节能、捷荣技术、海泰发展被... 财联社2月27日讯,今日晚间,双良节能、捷荣技术、海泰发展相继发布公告称被证监会立案,其中双良节能涉...
血亏1800亿后,全球第四大车... 前不久,Stellantis集团发布其2025年全年财务业绩,预料之内的,堪称史诗级灾难的财务表现—...
涨停复盘:今日全市场共92只股... 2月27日,三大指数涨跌不一,上证指数收涨0.39%,创业板指跌1.04%。沪深两市成交额合计2.4...
AI技术下沉惠民 和田地区智慧... 2月26日,在新疆医科大学与新疆工程学院的大力支持下,和田地区AI+智慧医疗辅助诊断成果转化示范基地...
证监会召开资本市场“十五五”规... 据证监会消息,2月27日证监会党委书记、主席吴清在北京召开座谈会,与8家在华外资证券基金期货机构代表...
珠江啤酒四季度由盈转亏 销量增... 来源:新浪财经 出品:新浪财经上市公司研究院 作者:郝显 2月25日,珠江啤酒发布 2025 年度业...
马斯克:特斯拉将在20年内上月... 继提出xAI要在月球建造AI卫星工厂后,马斯克又称20年内特斯拉工厂也将现身月球。 2月27日,特斯...
苏州看弱精好的中医推荐:孙嗣章... 在苏州国医堂名医工作室,常有男性患者攥着精液分析报告局促不安,他们口中常念叨着“苏州哪里看弱精好”“...
AI智能客服与AI京东客服的行... 一、3C数码配件类目客服的结构性矛盾 3C数码配件属于高频消费、强兼容性、强参数属性类目,用户集中关...