递归组装树结构的数据
开发中,经常遇到存在树形结构的数据,如行政区划这类数据,一级一级分层,后端需要组装好树形结构数据返回给前端。
由于返给前端的json数据中,如果是叶子节点了,说明它没有子节点,那么就没必要返回chirldren 属性给前端了,此时只需要加一个注解即可:@JsonInclude(JsonInclude.Include.NON_EMPTY)
,该注解会自动判断集合是否为空,为空的话就不返回给前端展示了。如果是String类型的属性的话,就使用@JsonInclude(JsonInclude.Include.NON_NULL)
注解
实体类:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.experimental.Accessors;/*** <p>* 区域表* </p>** @author sgw* @since 2023年09月06日*/
@Data
@Accessors(chain = true)
@TableName("HJBZ_QY")
public class HjbzQy implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/@TableId(value = "ID", type = IdType.AUTO)private String id;/*** 区域名称 0表示顶级区域*/@TableField("QYMC")private String qymc;/*** 区域编码 0表示顶级区域*/@TableField("QYBM")private String qybm;/*** 父级区域名称*/@TableField("PARENT_QYMC")private String parentQymc;/*** 父级ID*/@TableField("PID")private String pid;/*** 封装树结构数据* exist设置该属性为 false,表示在查询中不使用该字段* @JsonInclude(JsonInclude.Include.NON_EMPTY): 为空时就不返回给前端了(说明是叶子节点了,没必要返给前端一个空集合)*/@JsonInclude(JsonInclude.Include.NON_EMPTY)@TableField(exist = false)List<HjbzQy> chirldren = new ArrayList<>();
}
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ts.hjbz.entity.HjbzQy;
import com.ts.hjbz.dao.HjbzQyMapper;
import com.ts.hjbz.service.HjbzQyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;/*** <p>* 区域表 服务实现类* </p>** @author sgw* @since 2023年09月06日*/
@Service
public class HjbzQyServiceImpl extends ServiceImpl<HjbzQyMapper, HjbzQy> implements HjbzQyService {@Autowiredprivate HjbzQyMapper hjbzQyMapper;@Overridepublic List<HjbzQy> getDetailTree() {QueryWrapper<HjbzQy> wrapper = new QueryWrapper<>();List<HjbzQy> hjbzQyList= hjbzQyMapper.selectList(wrapper);//顶级节点的pid是0List<HjbzQy> tree = createTree(hjbzQyList, "0");return tree;}/*** 递归建立树形结构 (算法)* @param lists* @param pid* @return*/private List<HjbzQy> createTree(List<HjbzQy> lists, String pid) {List<HjbzQy> tree = new ArrayList<>();for (HjbzQy qy : lists) {if (qy.getPid() .equals(pid) ) {qy.setChirldren(createTree(lists,qy.getId()));tree.add(qy);}}return tree;}
}
相关文章:
递归组装树结构的数据
开发中,经常遇到存在树形结构的数据,如行政区划这类数据,一级一级分层,后端需要组装好树形结构数据返回给前端。 由于返给前端的json数据中,如果是叶子节点了,说明它没有子节点,那么就没必要返…...

企业架构LNMP学习笔记7
PHP介绍: HTML:超文本标记语言 http: 超文本传输协议 端口80 浏览器将html代码解析成web页面。 PHP:超文本预处理器。后端语言开发,页面上需要动态改变修改的,需要连接数据库查询数据,转为html。 主要…...

开店星小程序上架教程和后台Request failed with status code 500[undefined]问题处理
开店星小程序上架教程和后台Request failed with status code 500[undefined]问题处理 刚刚安装好开店星网站后台之后都会出现这个code 500[undefined]的错误,需要改一下代码。改好了之后就可以正常使用了。如果大家不懂得这样处理的可以私聊我,帮忙处理…...
第一百三十六回 WillPopScope组件
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了下拉刷新组件相关的内容,本章回中将介绍 WillPopScope组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的WillPopScope组件是一种事件拦截类组件,它没有具…...
【论文爬虫】自动将论文详细信息直送notion并自动下载(含源码)
输入论文标题,本爬虫将自动在semanticscholar.com和arxiv.com搜索该文章,自动获取其日期、作者、url、摘要等信息,并自动发送到你提前设置好的notion数据库里,同时自动从arxiv下载论文,然后将论文的保存地址在notion页…...
Android知识点整理
关键点 Activity Fragment 调试应用 处理应用程序配置 Intent 和 Intent 过滤器 会使用Context 后台处理指南 Android 的数据隐私 Android 网络数据安全教程 Android 中的依赖项注入 内容提供程序 Android 内存管理概览 一些重要的库 1.Glide 是一个 Android 上的…...
JSON与电子表格
一、介绍 电子表格是一种常见的电子数据处理工具,而JSON是一种数据交换格式。电子表格和JSON之间可以进行数据的导入和导出,以实现数据的相互转换和交互。 在电子表格中,数据以行和列的形式组织,并可以包含不同的数据类型。每个…...
Oracle创建用户、授权视图权限
1、创建用户密码 create user 用户名 identified by 密码;2、创建视图 CREATE VIEW 用户1.表名1 AS SELECT * FROM 用户2.表名2 t;3、授权 GRANT SELECT ON 用户2.表名2 TO 用户1 with GRANT OPTION ;grant connect to 用户名; grant select on 用户1.表名1 t…...

MT4移动端应用指南:随时随地进行交易
如今,随着科技的不断发展,我们可以随时随地通过手机进行各种操作,包括进行金融交易。本文将为大家介绍一款优秀的金融交易软件——MT4(可在mtw.so/6gwPno这点下)移动端应用,并提供详细的使用指南࿰…...
【数据挖掘】学习笔记
文章目录 < 数据预处理 > 聚集:多个样本或特征进行合并(减少样本规模、转换标度、更稳定)抽样:抽取一部分样本降维:在地位空间中表示样本(PCA、SVD)特征选择:选取重要特征&am…...

MyBatis-Plus排除不必要的字段
查询学生信息排除年龄列表 📚🔍 使用MyBatis-Plus排除某些字段。如果你想要进行查询,但又不需要包含某些字段,那么这个功能将非常适合你。🔍🎓📝 1. 学生信息查询-排除年龄列表 在使用 MyBat…...

webpack打包
文章目录 一、什么是webpack二、使用步骤1.创建一个新的文件夹,并将其初始化2.在当前目录下安装webpack以及webpack-cli3.配置webpack自定义命令,使之生效4.运行自定义命令,打包webpack5.打包成功之后会将内容打包到dist文件夹下6.配置webpack1)修改webpack打包入口和出口2)配置…...

【Java SE】抽象类与接口
目录 【1】抽象类 【1.1】抽象类概念 【1.2】抽象类语法 【1.3】抽象类特性 【1.4】抽象类的作用 【2】接口 【2.1】接口的概念 【2.2】语法规则 【2.3】接口使用 【2.4】接口特性 【2.5】实现多个接口 【2.6】接口间的继承 【2.7】接口使用实例 【2.8】Clonable …...
HTML <time> 标签
实例 如何定义时间和日期: <p>我们在每天早上 <time>9:00</time> 开始营业。</p><p>我在 <time datetime"2008-02-14">情人节</time> 有个约会。</p>定义和用法 <time> 标签定义公历的时间&…...

C++的向上转型
在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍…...

Android开发-Mac Android开发环境搭建(Android Studio Mac环境详细安装教程,适合新手)...
1.进入Android Studio官网 https://developer.android.google.cn/studio 2.点击下载Android Studio. 3.将说明拉到最下方,选择Mac With Apple Chip.苹果芯片选择Apple Chip,如果是Intel芯片可以选择Intel. 4.下载完成后,双击进入Android Studio. 点击打开. 5.如果是第一次安装,…...

公园气象站:用科技力量,感知气象变化
在城市的喧嚣中,公园成为人们休闲娱乐的宁静之地。而在这些公园中的公园气象站静静地矗立着,不仅为公园的日常运营提供着重要数据,还在为游客的安全保驾护航。 用科技力量,感知气象变化 科技的创新为气象监测提供了更为精准的手…...
mysql-norebuild的ddl测试
一、简介 为了保证需要注意的有norebuild和ignore两种 /** Operations that InnoDB cares about and can perform without rebuild */ static const Alter_inplace_info::HA_ALTER_FLAGS INNOBASE_ALTER_NOREBUILD INNOBASE_ONLINE_CREATE| INNOBASE_FOREIGN_OPERATIONS| Alt…...

上海控安SmartRocket系列产品推介(六):SmartRocket PeneX汽车网络安全测试系统
产品概述 上海控安汽车网络安全测试系统PeneX(Penetrator X)是一款支持对整车及车辆零部件及子系统实施网络安全测试的系统,其包含硬件安全、软件系统安全、车内通信及车外通信四大安全测试系统;支持合规性测试,包含国…...

[TQLCTF 2022]simple_bypass
文章目录 涉及知识点解题过程 涉及知识点 无数字字母RCE自增马构造文件包含读取源码 解题过程 打开题目,随便注册一个用户为admin 登陆进去后,一眼发现杰哥图片有线索 我们F12看一下如何请求的 在这里发现可能存在文件包含漏洞 我们尝试读取下源码 …...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...