[超详细]Java子父类树形结构查询和删除[小白]

目录

前言

1、查询子父类通过树形结构封装起来 

一、创建实体类

二、创建mapper类

三、创建service和serviceImpl类

四、创建controller类

2、删除该父类下的所有子类,并且删除自己

controller层

service和serviceImpl层

总结


前言

[超详细]Java子父类树形结构查询和删除[小白]  树形结构遍历,传给前端,今天在和甲方对需求的时候,提到了一个子父类树形结构查询的问题,我觉的这个这个功能还挺常见,所以今天就专门写了一篇文章,来让大家快速上手!

1、查询子父类通过树形结构封装起来 

一、创建实体类


package com.atdession.config;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;import java.util.List;
//使用了Lombok依赖,如果没有的话就自己手动创建get set 方法 和有参 无参
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class TreeDate {//自己的Idprivate String id;//名称private String name;//父类Idprivate String pid;//子类private List<TreeDate> childList;
}

二、创建mapper类

package com.atdession.mapper;import com.atdession.config.TreeDate;
import com.atdession.entity.TptDocument;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface TreeDateMapper extends BaseMapper<TreeDate> {
}

三、创建service和serviceImpl类

service

package com.atdession.service;import com.atdession.config.TreeDate;import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;public interface TreeDateService extends IService<TreeDate> {List<TreeDate> queryTreeDate();
}

serviceImpl: 

package com.atdession.service.impl;import com.atdession.config.TreeDate;import com.atdession.mapper.TreeDateMapper;import com.atdession.service.TreeDateService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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;
import java.util.stream.Collectors;@Service
public class TreeDateServiceImpl extends ServiceImpl<TreeDateMapper, TreeDate> implements TreeDateService {
@Autowired
TreeDateMapper treeDateMapper;@Overridepublic List<TreeDate> queryTreeDate() {List<TreeDate> treeDates = new ArrayList<>();treeDates.add(new TreeDate("1","wdc","0",null));treeDates.add(new TreeDate("2","小伙纸","1",null));treeDates.add(new TreeDate("3","小猪","1",null));treeDates.add(new TreeDate("4","大笨蛋","2",null));treeDates.add(new TreeDate("5","你在干什么","3",null));treeDates.add(new TreeDate("6","我是大飞机","3",null));treeDates.add(new TreeDate("7","我是大鼠标","4",null));treeDates.add(new TreeDate("8","我是拖鞋","2",null));treeDates.add(new TreeDate("9","我是沈飞","4",null));treeDates.add(new TreeDate("10","我是夏利","3",null));List<TreeDate> treeDateList = queryTreeDate("0", treeDates);return treeDateList;}//递归找到所有子类并封装到childList属性中private List<TreeDate> queryTreeDate(String parentId, List<TreeDate> treeDateList){return treeDateList.stream().filter(item->item.getPid().equals(parentId)).peek(item->item.setChildList(queryTreeDate(item.getId(),treeDateList))).collect(Collectors.toList());}}

这个图片不需要看,我设计封面用的 哈哈哈哈 

 

四、创建controller类

package com.atdession.controller;import com.atdession.config.TreeDate;
import com.atdession.service.TreeDateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/wdc")
public class TreeDateController {@Autowiredprivate TreeDateService treeDateService;//查询树形结构@PostMapping("/queryTreeDate")public List<TreeDate> queryTreeDate(){List<TreeDate>  treeDateList =   treeDateService.queryTreeDate();return treeDateList;}}

好了!以上就是查询树形结构的案例了,接下来,我们来看删除 。

2、删除该父类下的所有子类,并且删除自己

controller层

package com.atdession.controller;import com.atdession.config.TreeDate;
import com.atdession.service.TreeDateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/wdc")
public class TreeDateController {@Autowiredprivate TreeDateService treeDateService;@PostMapping("/removeTreeDateById")public boolean removeTreeDateById(@RequestParam("id")String id){boolean  isYes =   treeDateService.removeTreeDateById(id);return isYes;}}

service和serviceImpl层

service:

package com.atdession.service;import com.atdession.config.TreeDate;import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;public interface TreeDateService extends IService<TreeDate> {boolean removeTreeDateById(String id);
}

serviceImpl: 

package com.atdession.service.impl;import com.atdession.config.TreeDate;import com.atdession.mapper.TreeDateMapper;import com.atdession.service.TreeDateService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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;
import java.util.stream.Collectors;@Service
public class TreeDateServiceImpl extends ServiceImpl<TreeDateMapper, TreeDate> implements TreeDateService {
@Autowired
TreeDateMapper treeDateMapper;@Overridepublic boolean removeTreeDateById(String id) {//存储索要删除的idList<String> childIdList = new ArrayList<>();//获得所有需要删除的idthis.queryChild(id,childIdList);
//        最后将传过来的Id添加进去childIdList.add(id);//批量删除treeDateMapper.deleteBatchIds(childIdList);return true;}private void queryChild(String id, List<String> childIdList) {/**  查询数据库pid等于id的数据!!!!* 如果你使用的是mybatis-plus则可以通过mybatis-plus查* 如果你用的是其他的,则通过其他的查询。*/List<TreeDate> List = treeDateMapper.selectList(new LambdaQueryWrapper<TreeDate>().eq(TreeDate::getPid, id));//递归查询下一级Id,并且将上一级的Id存入到list中List.forEach(item->{childIdList.add(item.getId());this.queryChild(item.getId(),childIdList);});}}

 

总结

 好了!以上就是对该子父类树形的查询和删除,这一块还是挺重要的,因为在正式项目中遇到的这种需求很多,所以一定要牢牢记住!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32与Proteus的串口仿真详细教程与源程序

资料下载地址&#xff1a;STM32与Proteus的串口仿真详细教程与源程序 资料内容 包含LCD1602显示&#xff0c;串口发送接收&#xff0c;完美实现。 文档内容齐全&#xff0c;包含使用说明&#xff0c;相关驱动等。 解决了STM32的Proteus串口收发问题。 注意&#xff1a;每输…

Datart 扩装下载功能之PDF和图片下载

Datart 扩装下载功能之PDF和图片下载 首先下载依赖 yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts -y 然后下载安装chrome yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 查看chrome版本号 google…

基于Vue3实现的 宫格 图片摆放

一个可以支持无限宫格的 vue3实现 本来要参考微信群头像的规则实现&#xff0c;网上找到一大堆类似的需求&#xff0c;奈何XXX折磨人&#xff0c;九宫格已经不能满足ta了。 当前代码实现了………… 好多东西(可以多宫格).具体的看效果图 code <style scoped langless> .…

AI预测体彩排列3第2套算法实战化测试第5弹2024年4月27日第5次测试

今天继续进行新算法的测试&#xff0c;今天是第5次测试。好了&#xff0c;废话不多说了&#xff0c;直接上图上结果。 2024年4月27日体彩排3预测结果 6码定位方案如下&#xff1a; 百位&#xff1a;6、2、1、7、8、9 十位&#xff1a;8、9、4、3、1、0 个位&#xff1a;3、7、8…

【SpringBoot整合系列】SpringBoot整合Redis[附redis工具类源码]

目录 SpringBoot整合Redis1.下载和安装Redis2.新建工程&#xff0c;导入依赖3.添加配置4.先来几个基本的示例测试代码输出结果用redis客户端查看一下存储内容 5.封装redis工具类RedisKeyUtilRedisStringUtilRedisHashUtilRedisListUtilRedisSetUtilRedisZsetUtil备注 6.测试通用…

node.js 解析post请求 方法二

前提&#xff1a;以前面发的node.js解析post请求方法一为模板&#xff0c;具体见 http://t.csdnimg.cn/ABaIn 此文我们运用第二种方法&#xff1a;使用第三方模块formidable对post请求进行解析。 1》代码难点 *** 在Node.js中使用formidable模块来解析POST请求主要涉及到处理…

IO流基础

IO流介绍 1.什么是IO流&#xff1f; 流是一种抽象概念&#xff0c;它代表了数据的无结构化传递。按照流的方式进行输入输出&#xff0c;数据被当成无结构的字节序列或字符序列。从流中取得数据的操作称为提取操作&#xff0c;而向流中添加数据的操作称为插入操作。用来进行输入…

JVM (Micrometer)监控SpringBoot(AWS EKS版)

问题 怎样使用JVM (Micrometer)面板&#xff0c;监控Spring&#xff1f;这里不涉及Prometheus和Grafana&#xff0c;重点介绍与Micrometer与Springboot&#xff0c;k8s怎样集成。 pom.xml 引入依赖&#xff0c;如下&#xff1a; <properties><micrometer.version&…

免费简单好用的内网穿透工具(ngrok、natapp),微信回调地址配置

B站视频地址 文章目录 Natapp1、登录注册账号、下载软件2、使用2-1、购买隧道、查看token2-2、端口穿透 Ngrok1、登录注册账号、下载软件2、使用2-1、获取并设置 token2-2、使用 3、隧道 微信回调配置1、注册测试公众号2、回调代码3、回调配置 在一些特殊的场景下&#xff0c;需…

多种方法求1+12+123+1234……

有网友出了一道题&#xff1a; 从键盘输入一个小于10的正整数n&#xff0c;计算1121231234……&#xff0c;即前n项之和。 第一眼看到题目&#xff0c;直觉告诉我必须使用嵌套的两个for循环&#xff0c;里面的循环生成每一项&#xff0c;外面的循环求和。错误的方向和思路让我…

基于RBF-PID控制器的风力发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于RBF-PID控制器的风力发电系统simulink建模与仿真,对比PID控制器和RBF-PID控制器的控制结果。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB2022a 0050 4.系…

Unity进阶之ScriptableObject

目录 ScriptableObject 概述ScriptableObject数据文件的创建数据文件的使用非持久数据让其真正意义上的持久ScriptableObject的应用配置数据复用数据数据带来的多态行为单例模式化的获取数据 ScriptableObject 概述 ScriptableObject是什么 ScriptableObject是Unity提供的一个…

有没有电脑桌面监控软件|十大电脑屏幕监控软件超全盘点!

电脑桌面监控软件已经成为许多领域不可或缺的工具。 无论是企业为了保障数据安全和提高工作效率&#xff0c;还是家长为了监督孩子的学习&#xff0c;甚至是个人为了记录电脑使用行为&#xff0c;都需要这类软件的支持。 本文将对市面上十大电脑屏幕监控软件进行超全盘点&…

智能文案生成器,文案生成改写很强大

在当今数字化时代&#xff0c;随着人工智能的迅猛发展&#xff0c;智能文案生成器正逐渐成为营销和创作领域的一大利器。这些智能工具不仅能够快速生成文案&#xff0c;还能够进行文案改写&#xff0c;使得文案生成的过程更加高效、便捷。正是在这样的背景下&#xff0c;智能文…

CAT:contig稳健物种分类

安装 mamba create -n CAT python3.10 diamond prodigal cd SoftWare git clone https://github.com/MGXlab/CAT_pack chmod 755 给权限 自己构建数据库 names.dmp nodes.dmp文件可以在Kraken2的文件里面找到 Kraken2Bracken&#xff1a;宏基因组物种注释_kracken2配合bracke…

MySQL之binlog归档日志

binlog&#xff08;二进制归档日志&#xff09; binlog 二进制日志记录保存所有执行过的修改操作语句&#xff0c;不保存查询操作。如果 MySQL 服务意外停止&#xff0c;可通过二进制日志文件排查&#xff0c;用户操作或表结构操作&#xff0c;从而来恢复数据库数据。启动 bin…

Java 线程的几种状态

一、 线程的状态 状态是针对当前的线程调度的情况来描述的。因为线程是调度的基本单位&#xff0c;所以状态更应该是线程的属性。在Java中线程的状态一共有六种&#xff1a; 1. 初始(NEW)&#xff1a;新创建了一个线程对象&#xff0c;但还没有调用start()方法。 2. 运行(RUNN…

动静态库以及动态链接

文章目录 静态库制作静态库如何使用静态库 动态库动态库的制作动态库的使用动态链接 库是给别人用的&#xff0c;所以库中一定不存在main函数。库一般会有lib前缀和后缀&#xff0c;去掉前缀和后缀才是库名。 静态库 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译…

C++|对象与const

目录 常对象 常对象的声明 性质 数据成员不能被修改 常对象不能调用非const成员函数 const型成员函数 常对象成员 常数据成员 常成员函数 注意 总结 const型数据成员 const型成员函数 常对象 指针与const 指向对象的常指针 应用场景 指向常对象的指针 指向常…

Swagger3.0(Springdoc)日常使用记录

文章目录 前言一、默认地址二、注解OperationTag 三、SpringBoot基础配置四、Swagger导入apifox五、Swagger其他配置六 knife4j 参考文章 前言 本文并不是Swagger的使用教程&#xff0c;只是记录一下本人的操作&#xff0c;感兴趣的可以看下 一、默认地址 http://localhost:…