Java通过字符串字段匹配形成树形结构
Java通过字符串字段匹配形成树形结构
文章目录
- Java通过字符串字段匹配形成树形结构
- 数据表
- 模拟数据
- 解决办法:
- 1、domian 类:
- 2、Node层(形成树形关系):
- 3、controller 层
- 4、Util 工具类
- 1、BeanCopierUtil
- 4、Mapper
- 5、Manager(用来组装树形结构)
- 6、测试:
有的时候我们形成树形不是以ID的关系进行匹配的而是以字符串进行形成,比方说下面这张表的数据,ID与父Id之间有一定的关系,但是联系不大,关系主要体现org_code上面,那这种情况,传统的方式就不太适用

数据表
CREATE TABLE `contract_main_org_info` (`id` bigint(20) NOT NULL COMMENT '组织单位id',`parent_id` int(11) NULL DEFAULT NULL COMMENT '父组织单位id',`org_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组织名称',`org_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组织单位code',`create_user` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
模拟数据
INSERT INTO `contract_main_org_info` VALUES (1676, 1645, '绍兴元气集团有限公司', 'A0001A0004', 'admin', '2024-06-04 20:43:37');
INSERT INTO `contract_main_org_info` VALUES (1748, 1645, '浙江云鱼力业集团有限公司', 'A0001A0005', 'admin', '2024-06-04 20:43:37');
INSERT INTO `contract_main_org_info` VALUES (1977, 1645, '光耀投资集团有限公司', 'A0001A0014', 'admin', '2024-06-04 20:56:17');
INSERT INTO `contract_main_org_info` VALUES (1821, 1645, '衢州明力投资集团有限公司', 'A0001A0013', 'admin', '2024-06-04 22:42:50');
INSERT INTO `contract_main_org_info` VALUES (2196, 1645, '计划展有限公司', 'A0001A0017', 'admin', '2024-06-04 23:04:27');
INSERT INTO `contract_main_org_info` VALUES (1666, 1645, '金华达力团有限公司', 'A0001A0003', 'admin', '2024-06-05 08:49:34');
INSERT INTO `contract_main_org_info` VALUES (2194, 1645, '综合治理部', 'A0001A0015', 'admin', '2024-06-05 09:40:50');
INSERT INTO `contract_main_org_info` VALUES (1646, 1645, '温州盛世集团有限公司', 'A0001A0001', 'admin', '2024-06-05 09:46:19');
INSERT INTO `contract_main_org_info` VALUES (2016, 1977, '招标投资公司', 'A0001A0014A0001', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2017, 1977, '大运监理公司', 'A0001A0014A0003', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2018, 1977, '大夏设计院有限公司', 'A0001A0014A0004', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2019, 1977, '大唐经济技术开发区中原有限责任公司', 'A0001A0014A0005', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2170, 1977, '大唐光明发展有限公司', 'A0001A0014A0006', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2173, 1977, '大唐核聚变建设有限公司', 'A0001A0014A0007', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2181, 1977, '大唐服务有限公司', 'A0001A0014A0008', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2186, 1977, '大汉运输工程有限公司', 'A0001A0014A0009', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2187, 1977, '大汉晨南力建设有限公司', 'A0001A0014A0010', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2188, 1977, '渤海雁山建设有限公司', 'A0001A0014A0011', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2192, 1977, '象牙山工业有限公司', 'A0001A0014A0012', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2197, 1977, '欧洲永动机产业投资有限公司', 'A0001A0014A0013', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2198, 1977, '宏大输工程有限公司', 'A0001A0014A0014', 'admin', '2024-06-05 09:55:31');
INSERT INTO `contract_main_org_info` VALUES (2380, 2340, '创力研究院有限公司', 'A0001A0022A0001', 'admin', '2024-06-05 11:49:41');
INSERT INTO `contract_main_org_info` VALUES (2389, 2340, '创力集团有限公司博创物资分公司', 'A0001A0022A0004', 'admin', '2024-06-05 11:49:41');
INSERT INTO `contract_main_org_info` VALUES (2424, 2340, '纳众提供服务有限公司', 'A0001A0022A0017', 'admin', '2024-06-05 11:49:41');
INSERT INTO `contract_main_org_info` VALUES (4771, 1645, '测试集团有限公司', 'A0001A0043', 'admin', '2024-06-04 22:43:29');
INSERT INTO `contract_main_org_info` VALUES (2910, 2380, '创力研究院有限公司海盐分公司', 'A0001A0022A0001A0010', 'admin', '2024-06-05 14:22:56');
INSERT INTO `contract_main_org_info` VALUES (3540, 2910, '大元北目有限公司', 'A0001A0022A0001A0010A0001', 'admin', '2024-06-05 14:22:56');
INSERT INTO `contract_main_org_info` VALUES (1653, 1645, '北京大明聚力集团有限公司', 'A0001A0002', 'admin', '2024-06-05 14:25:30');
INSERT INTO `contract_main_org_info` VALUES (1657, 1653, '战略发展部', 'A0001A0002A0003', 'admin', '2024-06-05 14:25:30');
INSERT INTO `contract_main_org_info` VALUES (1655, 1653, '综合管理部', 'A0001A0002A0002', 'admin', '2024-06-05 14:26:06');
INSERT INTO `contract_main_org_info` VALUES (1659, 1653, '财务财产部', 'A0001A0002A0004', 'admin', '2024-06-05 14:26:06');
INSERT INTO `contract_main_org_info` VALUES (3893, 1977, '后汉投资集团有限公司东耀汽车运输分公司', 'A0001A0014A0025', 'admin', '2024-06-05 16:17:28');
INSERT INTO `contract_main_org_info` VALUES (4713, 1977, '后汉经济技术开发区北方有限责任公司', 'A0001A0014A0026', 'admin', '2024-06-05 16:20:26');
INSERT INTO `contract_main_org_info` VALUES (3158, 2305, '公司战略发展部', 'A0001A0014A0011A0002A0001', 'admin', '2024-06-05 16:31:29');
INSERT INTO `contract_main_org_info` VALUES (2699, 2018, '项目经理部门', 'A0001A0014A0004A0004', 'admin', '2024-06-05 16:35:42');
INSERT INTO `contract_main_org_info` VALUES (2302, 2186, '大明集团有限公司', 'A0001A0014A0009A0001', 'admin', '2024-06-05 16:35:42');
INSERT INTO `contract_main_org_info` VALUES (1, 相关文章:
Java通过字符串字段匹配形成树形结构
Java通过字符串字段匹配形成树形结构 文章目录 Java通过字符串字段匹配形成树形结构数据表模拟数据解决办法:1、domian 类:2、Node层(形成树形关系):3、controller 层4、Util 工具类1、BeanCopierUtil4、Mapper5、Manager(用来组装树形结构)6、测试:有的时候我们形成树形不…...
数字孪生智慧水利:精准管理与智能决策的新时代
图扑数字孪生技术在智慧水利中的应用,通过虚拟模型与真实水利系统的无缝连接,实现对水资源和水利工程的全面监控和精细管理。实时数据采集与动态模拟提升了水利系统的预测和响应能力,从洪水预警到水质监测,数字孪生助力各项决策更…...
基于ChatGLM3的本地问答机器人部署流程
基于ChatGLM3的本地问答机器人部署流程 前言一、确定文件结构1.新建文件夹储存本地模型2.下载源码和模型 二、Anaconda环境搭建1.创建anaconda环境2.安装相关库3.设置本地模型路径4.启动 三、构建本地知识库1.下载并安装postgresql2.安装c库3.配置向量插件 四、线上运行五、 全…...
归并排序——逆序数对的统计
逆序数对的统计 题目描述 运行代码 #include <iostream> using namespace std; #define LL long long const int N 1e5 5; int a[N], tmp[N]; LL merge_sort(int q[], int l, int r) {if (l > r)return 0; int mid l r >> 1; LL res merge_sort(q, l,…...
基于截图和模拟点击的自动化压测工具开发(MFC)
1.背景 想对一个MFC程序做自动压测功能,根据判断程序界面某块区域是否达到预定状态,来自动执行鼠标点击或者键盘输入的操作,以解决测试人员需要重复手动压测问题。 1.涉及的技术 串口控制,基于MFC橡皮筋类(CRectTracker)做一个…...
力扣每日一题 6/10
881.救生艇[中等] 题目: 给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船…...
[知识点] 内存顺序属性的用途和行为
C标准库中定义了以下几种内存顺序属性: std::memory_order_relaxedstd::memory_order_consumestd::memory_order_acquirestd::memory_order_releasestd::memory_order_acq_relstd::memory_order_seq_cst 1. std::memory_order_relaxed 定义:不提供同步…...
JAVA Mongodb 深入学习(二)索引的创建和优化
一、常用索引类型 1、单个索引 单个索引的创建 db.你的表名.createIndex({"你的字段名":1}) 单个索引的创建且是唯一索引 db.你的表名.createIndex({"你的字段名":1}),{ unique: true }) 2、复合索引 将多个过滤的字段,做成索引,…...
转让北京劳务分包地基基础施工资质条件和流程
地基基础资质转让流程是怎样的?对于企业来说,资质证书不仅是实力的证明,更是获得工程承包的前提。而在有了资质证书后,企业才可以安心的准备工程投标,进而在工程竣工后获得收益。而对于从事地基基础工程施工的企业,需…...
Python基础——字符串
一、Python的字符串简介 Python中的字符串是一种计算机程序中常用的数据类型【可将字符串看作是一个由字母、数字、符号组成的序列容器】,字符串可以用来表示文本数据。 通常使用一对英文的单引号()或者双引号(")…...
AP的数据库性能到底重要吗?
先说结论:没那么重要。甚至可能不重要。 我用我的经历和分析给大家说说。诸位看看如何。 不重要的观点是不是不能接受? 因为这些是站在我们角度觉得的。而实际上使用者(业务或者用户),真的不太在乎我们所在乎的。 …...
Vue3【二】 VSCode需要安装的Vue语法插件
VSCode需要安装的 适配Vue3的插件 Vue-Official插件安装...
设置路径别名
一、描述 如果想要给路径设置为别名,就是常见的有些项目前面的引入文件通过开头的,也就是替换了一些固定的文件路径,怎么配置。 二、配置 import { defineConfig } from vite import react from vitejs/plugin-react import path from path…...
人事信息管理系统(Java+MySQL)
一、项目背景 在现代企业中,管理大量员工的工作信息、薪资、请假、离职等事务是一项非常繁琐和复杂的任务。传统的手工管理方式不仅效率低下,而且容易出错。为了提高人事管理的效率,减少人工操作带来的错误,企业迫切需要一个高效…...
Python 中生成器与普通函数的区别
在Python中,生成器和普通函数有一些区别。 生成器使用 yield 语句从函数中返回一个值,而不是使用 return 语句。当生成器函数被调用时,它会返回一个迭代器对象,而非立即执行函数体内的代码。 生成器函数可以通过多次调用 yield 语…...
最小栈、栈的弹出(C++)
1.最小栈 思路分析: 代码: class MinStack { public:MinStack() {}void push(int val) {st.push(val);//两种情况需要更新最小值//1.最小栈为空(就是存最小值的那个栈)//2.插入的值小于或等于最小栈的栈顶元素if(minstack.empty()||minstack.top()>…...
20240607每日通信--------VUE3前端引入scoket-io,后端引入Netty-SocketIO,我成功了,希望一起交流沟通
无语 前置: VUE3 前端集成scoket-io socket.io-client Sringboot 3.0JDK17集成Netty-SocketIO Netty-SocketIO 失败原因一: 前期决定要写demo时候,单独了解了,后端引入Netty-SocketIO注意事项,详见我先头写的博客 前…...
Tomcat源码解析(八):一个请求的执行流程(附Tomcat整体总结)
Tomcat源码系列文章 Tomcat源码解析(一):Tomcat整体架构 Tomcat源码解析(二):Bootstrap和Catalina Tomcat源码解析(三):LifeCycle生命周期管理 Tomcat源码解析(四):StandardServer和StandardService Tomcat源码解析(五)&…...
python使用gdb进行堆栈查看与调试
以ubuntu示例,先安装gdb与python-dbg,dbg按照python版本安装 apt install -y gdb python3.10-dbg 使用top查看python进程,使用gdb操作python进程 gdb python3 6618 加载环境 source /usr/share/gdb/auto-load/usr/bin/python3.10-gdb.py…...
【DevOps】路由与路由器详细介绍:原理、功能、类型及应用场景
目录 一、路由详细介绍 1、什么是路由? 2、路由的基本原理 3、 路由协议 静态路由 动态路由 4、 路由表 5、 路由算法 6、路由的优缺点 优点 缺点 7、 路由应用场景 二、路由器详细介绍 1、什么是路由器? 2、 路由器的工作原理 3、路由器…...
缓存穿透的解决方式?—布隆过滤器
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
专业级OBS模糊插件全攻略:obs-composite-blur技术解析与应用指南
专业级OBS模糊插件全攻略:obs-composite-blur技术解析与应用指南 【免费下载链接】obs-composite-blur A comprehensive blur plugin for OBS that provides several different blur algorithms, and proper compositing. 项目地址: https://gitcode.com/gh_mirro…...
MinerU 2.5-1.2B镜像体验报告:PDF转Markdown,效果远超传统工具
MinerU 2.5-1.2B镜像体验报告:PDF转Markdown,效果远超传统工具 1. 引言:为什么选择MinerU? 1.1 传统工具的局限性 在日常工作中,我们经常需要将PDF文档转换为Markdown格式。传统的工具如PyPDF2、pdfplumber在处理简…...
【2026年恒生电子春招- 4月2日-第一题- 等差数列模最大值】(题目+思路+JavaC++Python解析+在线测试)
题目内容 某智能手环公司需统计用户在 $ 2024 $ 年 $ 5 $ 月的健康数据,分析用户的步数达标情况。由于部分设备存在数据上报故障,需在分析中排除故障期间的数据。具体表如下: 用户表( $ users $ )存储用户基本信息 $ user_id $ : $ INT $ 类型,主键,用户唯一标识。 $…...
避开这3个坑,你的火山引擎SFT微调效果才能翻倍
火山引擎SFT微调实战:避开3个关键陷阱让模型效果倍增 在火山方舟平台上进行大模型监督微调(SFT)时,许多开发者都会遇到一个共同的困惑:明明按照官方文档一步步操作,为什么最终效果总是不尽如人意࿱…...
OFA-VQA镜像可解释性增强:Grad-CAM热力图可视化答案依据区域
OFA-VQA镜像可解释性增强:Grad-CAM热力图可视化答案依据区域 1. 引言:为什么需要可视化VQA模型的决策依据? 当我们使用视觉问答(VQA)模型时,经常会遇到一个关键问题:模型给出的答案真的可靠吗…...
Chord视觉定位模型实战案例:自动驾驶道路元素(车道线/交通灯/行人)定位
Chord视觉定位模型实战案例:自动驾驶道路元素(车道线/交通灯/行人)定位 在真实自动驾驶场景中,单纯依赖传统目标检测模型往往面临泛化能力弱、小目标漏检、遮挡鲁棒性差等问题。而Chord——这个基于Qwen2.5-VL的多模态视觉定位服…...
RK3588 android12休眠唤醒后以太网不可用
现象:开机后连接网线可正常使用,系统休眠后再次唤醒后网络不通,等待约30秒后看门狗复位,gmac重新初始化后可继续使用。(此问题还会导致屏幕唤醒点亮延时1-2秒)日志:休眠唤醒后提示报错如下&…...
微前端进阶:WuJie + Vite + Vue3 的无界架构性能优化全攻略
1. WuJie微前端框架的核心优势 WuJie作为新一代微前端解决方案,最大的特点就是真正实现了"无界"体验。我在多个大型项目中实测发现,它完美解决了传统iframe方案存在的样式隔离、通信困难等问题。不同于single-spa这类基于路由的微前端框架&…...
ShiftBrite SPI驱动原理与高精度RGB LED控制实战
1. ShiftBrite 控制库技术解析:基于 SPI 的高精度 RGB LED 驱动实现ShiftBrite 是一款经典的高亮度、可级联 RGB LED 模块,由 WorldSemi(现属晶台股份)早期推出的 WS2801/WS2803 系列驱动芯片演化而来,后被广泛用于 DI…...
