菜单子节点的写法
菜单子节点的写法
- 1.测试数据
- 2.实现代码
- 3.获取父ID层级
1.测试数据
1.表结构SQL
CREATE TABLE `test` (`id` int DEFAULT NULL,`u_id` int DEFAULT NULL,`p_u_id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
2.数据SQL
INSERT INTO test (id,u_id,p_u_id) VALUES(1,1,0),(2,2,0),(3,3,0),(4,11,1),(5,12,1),(6,21,2),(7,22,2),(8,211,21),(9,221,22),(10,222,22),(11,223,22),(12,2231,223),(13,2232,223),(14,0,-1);
3.查询表数据
select * from test;
2.实现代码
1.pojo代码
@TableName("test")
@Data
public class Test implements Serializable {private Integer id;private Integer uId;private Integer pUId;@TableField(exist = false)private List<Test> testChains;@TableField(exist =false)private String treeId;}
2.service层代码
@Overridepublic List<String> treeIds() {List<Test> list = this.list();return list.stream().filter(e -> e.getPUId() == -1).peek((tId) -> {tId.setTestChains(getChildren(tId, list));}).toList();}private List<Test> getChildren(Test test, List<Test> all) {return all.stream().filter(x->x.getPUId() != null).filter(categoryEntity -> {return categoryEntity.getPUId().equals(test.getUId());}).peek(treeId -> {treeId.setTestChains(getChildren(treeId, all));}).collect(Collectors.toList());}
}
3.测试结果
[{"id": 14,"testChains": [{"id": 1,"testChains": [{"id": 4,"testChains": [],"treeId": null,"puid": 1,"uid": 11},{"id": 5,"testChains": [],"treeId": null,"puid": 1,"uid": 12}],"treeId": null,"puid": 0,"uid": 1},{"id": 2,"testChains": [{"id": 6,"testChains": [{"id": 8,"testChains": [],"treeId": null,"puid": 21,"uid": 211}],"treeId": null,"puid": 2,"uid": 21},{"id": 7,"testChains": [{"id": 9,"testChains": [],"treeId": null,"puid": 22,"uid": 221},{"id": 10,"testChains": [],"treeId": null,"puid": 22,"uid": 222},{"id": 11,"testChains": [{"id": 12,"testChains": [],"treeId": null,"puid": 223,"uid": 2231},{"id": 13,"testChains": [],"treeId": null,"puid": 223,"uid": 2232}],"treeId": null,"puid": 22,"uid": 223}],"treeId": null,"puid": 2,"uid": 22}],"treeId": null,"puid": 0,"uid": 2},{"id": 3,"testChains": [],"treeId": null,"puid": 0,"uid": 3}],"treeId": null,"puid": -1,"uid": 0}
]
3.获取父ID层级
1.pojo代码
@TableName("test")
@Data
public class Test implements Serializable {private Integer id;private Integer uId;private Integer pUId;@TableField(exist = false)private List<Test> testChains;@TableField(exist =false)private String treeId;}
2.service层代码
@Overridepublic List<String> treeIds() {List<Test> list = this.list();List<Test> collect = list.stream().peek((tId) -> {tId.setTreeId(tId.getUId().toString());tId.setTestChains(getChildren(tId, list));}).toList();return collect.stream().map(Test::getTreeId).toList();}private List<Test> getChildren(Test test, List<Test> all) {return all.stream().filter(x->x.getPUId() != null).filter(categoryEntity -> {return categoryEntity.getPUId().equals(test.getUId());}).peek(treeId -> {treeId.setTreeId((test.getTreeId() == null? test.getUId() : test.getTreeId())+"/"+treeId.getUId());treeId.setTestChains(getChildren(treeId, all));}).collect(Collectors.toList());}
3.测试结果
["0/1","0/2","0/3","0/1/11","0/1/12","0/2/21","0/2/22","0/2/21/211","0/2/22/221","0/2/22/222","0/2/22/223","0/2/22/223/2231","0/2/22/223/2232","0"
]
相关文章:
菜单子节点的写法
菜单子节点的写法 1.测试数据2.实现代码3.获取父ID层级 1.测试数据 1.表结构SQL CREATE TABLE test (id int DEFAULT NULL,u_id int DEFAULT NULL,p_u_id int DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci;2.数据SQL INSERT INTO test (i…...
系统架构设计:9 论软件系统架构评估及其应用
目录 一 架构评估的意义 1 性能 2 可用性 3 安全性 4 可修改性 5 易用性...
javaee SpringMVC中json的使用
jsp <%--Created by IntelliJ IDEA.User: 呆萌老师:QQ:2398779723Date: 2019/12/6Time: 15:55To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <%St…...
【系统架构】软件架构的演化和维护
导读:本文整理关于软件架构的演化和维护知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑,基于大量项目实践经验基础上,不断加深理论体系的理解,从而能够创造新解决系统相关问题。 目录 1、软件架构演化和定义 …...
一盏茶的功夫帮你彻底搞懂JavaScript异步编程从回调地狱到async/await
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📘 1. 引言 📘 2. 使用方法 📘 3. 实现原理 📘 4. 写到最后…...
前后端分离计算机毕设项目之基于SpringBoot的无人智慧超市管理系统的设计与实现《内含源码+文档+部署教程》
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…...
从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位
目录 1. 纯文本输入框 2. 存在默认值的文本输入 3. 下拉选择框 4. 输入后下拉选择框 5. 文件上传 6. 时间插件 1. 纯文本输入框 driver.find_element(By.XPATH,/html/body/div[2]/td[2]/input).send_keys(测试名称) 2. 存在默认值的文本输入 注意: 1. 这种存…...
MyCat-web安装文档:安装Zookeeper、安装Mycat-web
安装Zookeeper A. 上传安装包 zookeeper-3.4.6.tar.gzB. 解压 #解压到当前目录,之后会生成一个安装后的目录 tar -zxvf zookeeper-3.4.6.tar.gz#加上-c 代表解压到指定目录 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/C. 在安装目录下,创建数据…...
Ajax跨域访问,访问成功但一直走error不走success的的问题解决
Ajax跨域访问,访问成功但一直走error不走success的的问题解决 通过搜索各种资料,终于解决啦,废话不多说了,还是老规矩直接上代码: 我这里用了jsonp,有想了解的点击 : jsonp 前端代码: $.ajax({type:post…...
水星 Mercury MIPC251C-4 网络摄像头 ONVIF 与 PTZ 云台控制
概况 最近在 什么值得买 上发现一款水星的网络摄像头, 除了支持云台/夜视功能之外, 还标明支持 onvif 协议. 所以想着买来接入到 HomeAssistat 作为监控使用.可到手之后发现事情并没有那么简单, 记录如下. 接入 HomeAssistant 按照 HA 的文档 ONVIF Camera 接入无非就是配置文件…...
Reactor 模式网络服务器【I/O多路复用】(C++实现)
前导:本文是 I/O 多路复用的升级和实践,如果想实现一个类似的服务器的话,需要事先学习 epoll 服务器的编写。 友情链接: 高级 I/O【Linux】 I/O 多路复用【Linux/网络】(C实现 epoll、select 和 epoll 服务器&#x…...
2019年[海淀区赛 第2题] 阶乘
题目描述 n的阶乘定义为n!n*(n -1)* (n - 2)* ...* 1。n的双阶乘定义为n!!n*(n -2)* (n -4)* ...* 2或n!!n(n - 2)*(n - 4)* ...* 1取决于n的奇偶性,但是阶乘的增长速度太快了,所以我们现在只想知道n!和n!!末尾的的个数 输入格式 一个正整数n ÿ…...
CMM—软件企业走向世界的通行证
正当我国计算机软件行业2000年实现产值235亿元,为自己九十年代年均30%的增长沾沾自喜的时候,从邻国印度传来捷报:1999-2000年度,印度软件产业实现产值56.5亿美元,其中出口40.5亿美元,占目前印度出口总额的1…...
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到MATLAB,结果如下所示: 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps…...
华为云云耀云服务器L实例评测|RabbitMQ的Docker版本安装 + 延迟插件安装 QQ邮箱和阿里云短信验证码的主题模式发送
前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍RabbitMQ的Docker版本安装和配置,延迟插件的安装;结合QQ邮箱和阿里云短信验证码…...
解决Linux安装AppImage文件chrome-sandbox出错问题
问题产生 在Linux版Another Redis Desktop Manager的时候,打开无反应,使用命令行运行,出现了下面的报错信息: linux: FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured co…...
Axios、SASS学习笔记
目录 前言 一、Axios基础认识 1、简介 2、相关文档 3、基本配置 4、基础快捷使用 二、Axios封装 1、公共配置文件 2、细化每个接口的配置 3、使用并发送请求 三、SASS 1、简介 2、相关文档 3、使用前奏 4、使用变量 5、嵌套规则 6、父级选择器标识 & 前言…...
开发工作中常用到的免费API分享
企业行政许可:通过公司名称/公司ID/注册号或社会统一信用代码获取企业行政许可信息,企业行政许可信息包括许可文件名称、决定许可机关、许可内容、决定日期/有效期自、截止日期/有效期至、数据来源等。企业作品著作权:通过公司名称/公司ID/注…...
外汇天眼:三大方法提高容错率——成功投资者的秘密策略!
容错率是什么? 虽然A股市场投资体验不佳,但相较于中概股市场的波动,A股投资者仍有幸福感。以中概股的代表,金龙指数ETF为例,仅一年多时间内从85.90元下跌至20.47元,跌幅高达76%。 然而,有一位…...
设计模式-状态模式
介绍 一个对象有状态变化每次状态变化都会触发一个逻辑不能总是用if else来控制 示例 交通信号灯不同颜色的变化 UML类图 传统UML类图 简化后的UML类图 代码演示 // 状态(红灯、绿灯、黄灯) class State {constructor(color) {this.color col…...
支持多种格式照片处理软件Lightroom Classic 2022 mac中文功能特点
Lightroom Classic 2022 mac是一款专业级数字图像处理软件,主要用于数字照片的后期处理和管理。它提供了丰富的工具和功能,可以帮助用户对照片进行调整、修饰、管理和分享。 Lightroom Classic 2022 mac软件功能和特点 RAW格式支持:Lightroo…...
UML简介
UML,全称为Unified Modeling Language(统一建模语言),是一种用于软件工程和系统设计的标准化建模语言。它提供了一套图形化的符号和标记,用于描述和表示软件系统、系统架构、流程、数据结构、行为和交互。UML的设计旨在…...
【PostgreSQL内核学习(十七)—— (AutoAnalyze)】
AutoAnalyze 概述AutoAnaProcess 类AutoAnaProcess 函数AutoAnaProcess::executeSQLCommand 函数AutoAnaProcess::runAutoAnalyze 函数AutoAnaProcess::run 函数AutoAnaProcess::check_conditions 函数AutoAnaProcess::cancelAutoAnalyze 函数AutoAnaProcess::~AutoAnaProcess …...
C++中指向成员的指针运算符(.* 和 ->*)用法说明
目录 一 MSDN中使用说明1.1 语法1.2 备注 二 一个使用案例 一 MSDN中使用说明 1.1 语法 expression .* expression //直接成员解除引用运算符 expression –>* expression //间接成员解除引用运算符 1.2 备注 C中指向成员的指针运算符(.* 和 ->*)…...
ASUS华硕ZenBook灵耀X逍遥UXF3000E_UX363EA原装出厂预装Win11系统工厂模式安装包
下载链接:https://pan.baidu.com/s/1WLPp0e5AZErtX3bJIhTZMg?pwd2j7i 带有ASUS Recovery恢复功能、自带所有驱动、出厂主题壁纸、Office办公软件、MyASUS华硕电脑管家等预装程序 所需要工具:16G或以上的U盘(非必需) 文件格式:HDI,SWP,OFS,E…...
【数据结构】栈和队列-- OJ
目录 一 用队列实现栈 二 用栈实现队列 三 设计循环队列 四 有效的括号 一 用队列实现栈 225. 用队列实现栈 - 力扣(LeetCode) typedef int QDataType; typedef struct QueueNode {struct QueueNode* next;QDataType data; }QNode;typedef struct …...
访问Apache Tomcat的管理页面
配置访问Tomcat管理页面的用户名、密码、角色 Tomcat安装完成后,包含了一个管理应用,默认安装在 <Tomcat安装目录>/webapps/manager 例如: 要使用管理页面的功能,需要在conf/tomcat-users.xml文件中配置用户、密码及角色…...
企业组织内如何避免山头文化?
1,什么是山头文化 2,山头文化的危害 3,如何避免山头文化 01什么是山头文化 山头文化就是指某一组织中的一部分人员组成一个以共同利益为基础的集体,就如同古代占山头一样,在组织中形成一股无形的力量,其…...
【c#】线程Monitor.Wait和Monitor.Pulse使用
介绍 以一个简易版的数据库连接池的实现来说明一下 连接池的connection以队列来管理 getConnection的时候,如果队列中connection个数小于50,且暂时无可用的connection(个数为0或者peek看下头部需要先出那个元素还处于不可用状态)…...
GitLab平台安装中经典安装语句含义解析
yum -y install policycoreutils openssh-server openssh-clients postfix 这是一个Linux命令,用于使用YUM包管理器安装指定的软件包。下面是对这个命令各部分的解释: yum:这是一个Linux命令行工具,用于管理RPM(Red …...
网站建设企炬/国外免费网站域名服务器
GMAE 节目正在接管你的Game Jam! Game Jam 使用 The Sandbox Game Maker 软件,创建基于 The Sandbox 社区的体验,并向我们展示你自己的个人“GMAE”!与社区成员、朋友以及 The Sandbox 工作人员一起将 The Sandbox 的世界带入生活…...
百度怎么自己做网站吗/品牌全案营销策划
使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单…...
做翻译网站 知乎/宁波seo外包推广排名
在一些竞猜的网站中,如果我们需要做一个定时执行的功能,比如有一道题,在十秒之内要完成,否则显示“您已超时”,如果完成,则跳转到下一道题上面,而这中间有一个十秒的停顿,这样的功能…...
个人备案 做政府网站/品牌广告策划方案
http://cogs.pro/cogs/problem/problem.php?pid14 ★★☆ 输入文件:flyer.in 输出文件:flyer.out 简单对比时间限制:1 s 内存限制:128 MB 【问题描述】飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞…...
做一元云购网站/今天特大新闻
雷帝网 乐天 1月15日报道乐视网今日发布公告,宣布国泰君安拟于2018年12月27日起的90个自然日内通过司法可售冻结二级市场集中竞价交易方式,处置乐视网大股东贾跃亭质押的标的证券股份。国泰君安本次可能实施的违约处置事项,可能导致贾跃亭被动…...
企业官网定制设计开发/百度seo排名报价
人为感受卡顿,界面滑动不流畅,界面上下滑动右抖动的现象,等等这些主观的感受说明设备整体流畅度待提高。而在项目中需要客观数据来支撑,而衡量流畅度指标之一是帧率FPS(Frames Per Second,每秒钟填充图像的帧率)。今天…...