递归实现树状分级部门树《部门单表》
展示:
为了更好的展示数据实现过程:该功能采用mybatis写xml的方式实现,同样的mybatis-plus也能实现该功能,实现树状主要是通过递归这个方法把数据封装到集合里面返回给前端;
1.数据库表与数据:
提供了模板,也可以根据自己的需求自定义结构:玩法多样化
CREATE TABLE `sys_dept` (`dept_id` bigint NOT NULL AUTO_INCREMENT COMMENT '部门id',`parent_id` bigint DEFAULT '0' COMMENT '父部门id',`ancestors` varchar(50) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT '' COMMENT '祖级列表',`dept_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT '' COMMENT '部门名称',`order_num` int DEFAULT '0' COMMENT '显示顺序',`leader` varchar(20) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '负责人',`phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '联系电话',`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '邮箱',`status` char(1) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT '0' COMMENT '部门状态(0正常 1停用)',`del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',`create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT '' COMMENT '创建者',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT '' COMMENT '更新者',`update_time` datetime DEFAULT NULL COMMENT '更新时间',PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_croatian_ci COMMENT='部门表';INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (100, 0, '0', '智能科技', 0, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:17', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (101, 100, '0,100', '北京公司', 1, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:17', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (102, 100, '0,100', '上海公司', 2, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:17', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (103, 101, '0,100,101', '研发部门', 1, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:17', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (104, 101, '0,100,101', '测试部门', 2, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:17', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (105, 101, '0,100,101', '运维部门', 3, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:18', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (106, 101, '0,100,101', '业务部门', 4, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:18', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (107, 101, '0,100,101', '客服部门', 5, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:18', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (108, 102, '0,100,102', '销售部门', 1, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:18', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (109, 102, '0,100,102', '人事部门', 2, '智能', '15888888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 09:11:18', '', NULL);
INSERT INTO `sys_dept`(`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (200, 101, '0,100,101', '后勤部门', 6, '智能', '15288888888', '123@qq.com', '0', '0', 'admin', '2022-05-19 14:11:35', 'admin', '2022-05-19 14:11:53');
2.基础结构生成:偷懒神奇
mybatis-plus代码生成器实现规则《超详细》_@小杨爱偷懒的博客-CSDN博客一.在pox添加所需的依赖: <!--mybatis-plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><!--https://blog.csdn.net/f234344435/article/details/124494196?spm=1001.2014.3001.5502
3.controller层:根据自己的需要添加或者删除
@RestController
@RequestMapping("/sys-dept")
public class SysDeptController {@Autowiredprivate SysDeptService sysDeptService;//部门递归树 静态传参形式@GetMapping("getSysDept")public R getSysDept(){List<SysDept> list = sysDeptService.getParentId();return R.ok().data("list",list);}}
mapper层:提供了两个简单的查询方法
@Mapper
public interface SysDeptMapper extends BaseMapper<SysDept> {/*** 根据父类id查询子类菜单* @param parentId* @return*/List<SysDept> selectByPid(Integer parentId);/*** 查询除了一级菜单以外的菜单* @return*/List<SysDept> selectAllNotBase();}
mapper.xml :超级简单的语法
<select id="selectByPid" resultType="com.xxx.xxx.entity.SysDept">SELECT *FROM sys_deptWHEREparent_id=#{parent_id}</select><select id="selectAllNotBase" resultType="com.xxx.xxx.entity.SysDept">SELECT *FROM sys_deptwhere parent_id != 0</select>
3.service层:
public interface SysDeptService extends IService<SysDept> {/*** 递归部门树 通过传递父部门id查询,递归出子节点* @param* @return*/List<SysDept> getParentId();
}
4.实现类:对于递归比较疑惑的小伙伴 找度娘
@Service
public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements SysDeptService {@Autowiredprivate SysDeptMapper sysDeptMapper;@Overridepublic List<SysDept> getParentId() {//通过parentId:获取该值下的部门父数据List<SysDept> sysPid = sysDeptMapper.selectByPid(0);//查询除了一级菜单以外的菜单 ;parentId!=0 (在xml里面where判断parentId!=0 )List<SysDept> sysNotBase = sysDeptMapper.selectAllNotBase();//遍历数据for (SysDept sysDept : sysPid) {//通过方法获取子节点的数据,再通过实体类里面的集合给整合List<SysDept> find = recursive(sysNotBase, sysDept.getDeptId());//实体类里面的方法sysDept.setChildren(find);}return sysPid;}/***多级菜单查询方法* @param sysList 不包含最高层次菜单的菜单集合* @param parentId 父类id*/public List<SysDept> recursive(List<SysDept> sysList,Long parentId){//创建一个集合来接收所有子级的数据List<SysDept> result = new ArrayList<SysDept>();//遍历数据:把list转换成对象for (SysDept sysDept : sysList) {if(sysDept.getParentId()!=null){//递归的结束出口条件if(sysDept.getParentId().equals(parentId)){//递归的核心:自己调用自己的方法List<SysDept> iterateSys = recursive(sysList,sysDept.getDeptId());//把递归出来的数据封装到实体类集合里面sysDept.setChildren(iterateSys);//所有子节点的数据通过集合返回result.add(sysDept);}}}return result;}
}
说明一下为什么写死传递的部门ID,因为父级ID为第一级别在展示的是否一般展示的是所有数据,展示单个部门的意义不大,当然了小伙伴们需要自定义动态传参的话也是没问题的 通过URL传递一个parentId就OK了
递归实现树状分级部门树《部门单表》相关推荐
- 线。段。树--树状数组-主席树
简单了解一下线段树 以前写过的内容,搬运过来 线段树的应用场景:满足区间加法性质且多次查询,什么是区间加法性质,比如最大值,求和,树状数组.线段树.主席树依次. 线段树框架:建树--查询--更新... ...
- COGS-257-动态排名系统-树状数组+主席树
描述 给定一个长度为N的已知序列A[i](1<=i<=N),要求维护这个序列,能够支持以下两种操作: 1.查询A[i],A[i+1],A[i+2],...,A[j](1<=i< ...
- D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)
English Vietnamese Given a sequence of n numbers a1, a2, -, an and a number of d-queries. A d-query ...
- 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树
题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...
- 树状数组(树状数组的基本用法与操作)
什么是树状数组?树状数组简单的来说就是将一个数组模拟树形结构. 树状数组有什么用?树状数组可以将求和的操作从O(n)操作简化为O(logn). 如图所示,横线下方为a数组表示为初试数据:上方为数组c, ...
- POJ2182 HDU2711 Lost Cows【树状数组+线段树】
Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17113 Accepted: 10664 Descripti ...
- 根据树状数据渲染树状下拉选项
最终的效果类似这样: 作者是把非末级的选项给禁用了,如果你们需求是要不禁用求留意笔者渲染时的操作. 接下来我们一起来做这个效果: 笔者所用的是react + antd,用其他的架构也是类似,请自行举一 ...
- hdu 4417 Super Mario 树状数组||主席树
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob ...
- HDU 1556 前缀和 树状数组 线段树
解法一: a[i]表示以 i作为起点,对 i-n的气球全部上色的次数 对(start,end)区间上色 ++a[start] --a[end+1]抵消掉 end+1-n的部分 问题转换为求 a的前缀 ...
最新文章
- java jetty eclipse_用Eclipse+Maven+Jetty构建Java Web开发环境(详细笔记)
- JAVA 动态代理学习记录
- 使用ansible批量部署开机启动时为字符界面
- 微软System Center Operations Manager 2012(SCOM )安装图文教程
- LeetCode-114: 二叉树展开为链表
- linux系统认不到设备,linux中/dev/找不到设备
- 微信小程序云函数传递数组_微信小程序云开发一周入门
- Skyline软件二次开发初级——6如何在WEB页面中的三维地图上进行坐标和方向计算...
- cloud2声卡_带你解惑HyperX Cloud2(飓风)和Alpha(阿尔法)的终极选择
- HTML5 视频网站
- Eclipse英文版视频教程(from Carleton University)
- Vivo升级android版本,vivo手机升级Android Q教程:很简单,X27与NEX都支持
- bzoj 4763: 雪辉
- 存储篇- 存储基础知识概览
- 如何为窗体应用程序显示控制台
- 《Java 8实战》 之 Lambda
- 大数据行业再拉警报,51信用卡或将彻底沦陷?
- Realme GT 大师版 ROOT 解锁BL教程
- 道通科技自动化测试面试
- VMware未来二十年,打开数字化转型的无限可能
热门文章
- 发一个mir2的内挂代码
- export default (imported as router) was not found_开关插座IEC/EN/AS/NZS澳洲SAA认证
- ie浏览器点击F12没反应
- CLIENT_ACKNOWLEDGE机制测试
- python能用来制作游戏吗_python 做游戏开发怎么样?
- 意志力实验:5分钟训练大脑冥想--自控力
- 通过LY-WIFI-1智能WiFi模块实现手机APP控制LED灯————uno端
- 数值积分: 梯形规则--复合梯形规则--辛普森规则--复合辛普森规则--龙贝格求积公式
- 如何用python计算年龄_用Python写一个能算出自己年龄的小程序
- Windows Shell编程-第七章.侵入Shell