【SpringBoot Web开发】如何构建树形结构数据

news/2024/11/29 7:34:23/

树形结构数据

应用场景

比如我们需要构建菜单、机构树、其他业务类型树形结构

工具类

  1. 我们可以把菜单列表返回,获取parent_id字段等于0的节点,称为根节点,这样的节点代表一级菜单
  2. 再通过根节点的主键去寻找子菜单,因为要有多及菜单,所以要用递归构建子树,直到没有子菜单为止
  3. 最后通过构建完整的菜单树

代码示例

public class MenuTree {private final List<Menu> menuList;public MenuTree(List<Menu> menuList) {this.menuList = menuList;}/*** 获取根结点** @return*/private List<Menu> getRootNode() {List<Menu> rootNode = new ArrayList<>();menuList.forEach(item -> {if (item.getParentId() == 0) {rootNode.add(item);}});return rootNode;}/*** 构建子树** @param rootNode* @return*/private Menu builderChildrenNode(Menu rootNode) {List<Menu> childrenList = new ArrayList<>();menuList.forEach(item -> {if (Objects.equals(item.getParentId(), rootNode.getId())) {// 还需要遍历三级菜单以后的Menu menu = builderChildrenNode(item);childrenList.add(menu);}});rootNode.setChildrenList(childrenList);return rootNode;}/*** 构建树** @return*/public List<Menu> buildTree() {List<Menu> menus = getRootNode();menus.forEach(this::builderChildrenNode);return menus;}
}

返回结果示例

只展示部分数据

{"code": 0,"data": [{"id": 1,"parentId": 0,"menuName": "系统管理","menuIcon": "el-icon-setting","childrenList": [{"id": 2,"parentId": 1,"menuName": "用户管理","menuIcon": "el-icon-service","childrenList": [{"id": 3,"parentId": 2,"menuName": "查看","menuIcon": null,"childrenList": []},{"id": 4,"parentId": 2,"menuName": "新增","menuIcon": null,"childrenList": []},{"id": 5,"parentId": 2,"menuName": "修改","menuIcon": null,"childrenList": []},{"id": 6,"parentId": 2,"menuName": "删除","menuIcon": null,"childrenList": []}]}]}],"msg": "执行成功"
}

SQL

通过SQL的方式的话,只能查询出两层,如下所示:

代码示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xx.tree.dao.MenuDao"><resultMap type="xx.tree.entity.Menu" id="MenuMap"><result property="id" column="id" jdbcType="INTEGER"/><result property="parentId" column="parent_id" jdbcType="INTEGER"/><result property="menuName" column="menu_name" jdbcType="VARCHAR"/><result property="menuIcon" column="menu_icon" jdbcType="VARCHAR"/><collection property="childrenList" ofType="xx.tree.entity.Menu" select="queryChildrenMenuInfo" column="id"/></resultMap><!--查询当前角色下的菜单信息--><select id="queryMenuTreeBySQL" parameterType="int" resultMap="MenuMap">select *from menuwhere parent_id  = 0</select><!--子菜单查询--><select id="queryChildrenMenuInfo" parameterType="int" resultType="xx.tree.entity.Menu">select *from menuwhere parent_id = #{id}</select>
</mapper>

返回结果示例

只展示部分数据

{"code": 0,"data": [{"id": 1,"parentId": 0,"menuName": "系统管理","menuIcon": "el-icon-setting","childrenList": [{"id": 2,"parentId": 1,"menuName": "用户管理","menuIcon": "el-icon-service","childrenList": null}]}],"msg": "执行成功"
}

http://www.ppmy.cn/news/957376.html

相关文章

人才输送|我的“捷码低代码工程师”转型之路!

最新职位 招聘岗位&#xff1a;低代码工程师 需求公司&#xff1a;上海北斗西虹桥基地 应聘条件&#xff1a;1、本科以上&#xff0c;最好硕士&#xff1b;2、有三年以上开发经验&#xff1b; 工作内容&#xff1a;带领团队用捷码低代码平台进行项目开发。 工作地点&#xff1a…

html input怎么限制字数,搞了个输入框限制字数

结合蚂蚁设计的Antv(类型ElementUi框架) html部分&#xff1a; 还可输入{{remnant}}个字。 data.return部分&#xff1a; data(){ return{ val:, val2:, val3:, maxLength:800, autoFocus:true, retPras: { rules: [ { required: true, message: 请输入问题描述信息! }, { vali…

textarea输入框的字数限制与输入字数显示

html <div class"form_message1"><textarea class"form_control form_message2" type"text" name"message" maxlength"254" placeholder"请输入您的留言"></textarea><p class"font_n…

微信小程序文本框限制输入字数

效果图 wxml代码 <view style"border: 1px solid #FFA6A6; border-radius: 10px;"><textarea placeholder-class"place-holder" placeholder"请从以下四个方面填写求求职简介 1. 教育背景介绍&#xff0c;如学校专业描述、个人学习成绩奖学…

表单输入限制字数

1.表单输入限制字节&#xff0c;一个汉字2个字节 //获取字符串的字节长度 function len(s) { s String(s); return s.length (s.match(/[^\x00-\xff]/g) || "").length;// 加上匹配到的全角字符长度 } function limit(obj, limit) { var val obj.value; if (len(v…

输入框字数限制

一般在前台页面会对文本框的字数要做限制&#xff0c;一种方法是提示超出多少个字&#xff0c;不让保存对文本&#xff1b;还有一种是自动截取&#xff0c;但是自动截取对于键盘操作是没有问题的&#xff0c;对于鼠标的复制粘帖会有一些问题。下面看下代码&#xff1a; <scr…

Prompt 技巧指南-让 ChatGPT 回答准确十倍!

出品人&#xff1a;Towhee 技术团队 作者&#xff1a;张晨 随着 ChatGPT 等大型语言模型 (LLM)的兴起&#xff0c;人们慢慢发现&#xff0c;怎么样向 LLM 提问、以什么技巧提问&#xff0c;是获得更加准确的回答的关键&#xff0c;也由此产生了提示工程这个全新的领域。 提示工…

关于输入框限制字数输入问题

在输入框输入内容&#xff0c;当需要限制字数的时候&#xff0c;如果是Input或者textarea&#xff0c;可以直接用maxlength进行字数的限制。如果是用div(添加了contenteditable属性)&#xff0c;如果直接用input事件进行字数的限制&#xff0c;则会出现临界问题。 问题起源&…