Springboot递归树(需求返回List树状结构数据)

Springboot递归树(需求返回List树状结构数据)一 本主的应用场景 部门里面有一个属性是当前部门的上级部门 而当前部门又会有下级部门 下级部门还有下级部门 这就形成了一个向下无限循环 呈现出树状结构 二 认识 JSONObject JSONObject 只是一种数据结构 可以理解为 JSON 格式的数据结构 key value 结构

大家好,我是讯享网,很高兴认识大家。

一、本主的应用场景

    部门里面有一个属性是当前部门的上级部门,而当前部门又会有下级部门,下级部门还有下级部门,这就形成了一个向下无限循环,呈现出树状结构。

二、认识JSONObject

    JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。

postman测试效果图


讯享网

 

 建表(主键id自增长)


 

 Entity实体类

package com.example.unicom.entity; import lombok.Data; import java.util.ArrayList; import java.util.List; @Data public class RoleTree { private Integer id; private String role_name; private Integer parent_role_id; private List<RoleTree>trees =new ArrayList<>(); } 

讯享网

        Controller (GeneralResponse为自己添加的公共返回实体类,正式开发加,做练习可以不加)

讯享网package com.example.unicom.controller; import com.example.unicom.entity.RoleTree; import com.example.unicom.entity.base.GeneralResponse; import com.example.unicom.service.RoleTreeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.List; / * @author 孙翊轩 * @since 2021-09-02 */ @RestController @RequestMapping("/isp/unicom/roletree") public class RoleTreeController { @Autowired private RoleTreeService roleTreeService; @RequestMapping(value ="selectRoleTree",method = RequestMethod.GET) public GeneralResponse selectRoleTree(){ try{ List<RoleTree> roleTreeList=roleTreeService.selectRoleTree(); return new GeneralResponse("SUCCESS","查询成功",roleTreeList); }catch (Exception e){ e.printStackTrace(); } return new GeneralResponse("FAIL","查询失败",null); } } 

Service接口 

package com.example.unicom.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.unicom.entity.RoleTree; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface RoleTreeMapper extends BaseMapper<RoleTree> { List<RoleTree> selectRoleTree(); } 

 @Service 业务层

讯享网package com.example.unicom.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.unicom.entity.RoleTree; import com.example.unicom.entity.UserRole; import com.example.unicom.mapper.RoleTreeMapper; import com.example.unicom.mapper.UserRoleMapper; import com.example.unicom.service.RoleTreeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class RoleTreeServiceImpl extends ServiceImpl<RoleTreeMapper,RoleTree>implements RoleTreeService{ @Autowired private RoleTreeMapper roleTreeMapper; @Autowired private UserRoleMapper userRoleMapper; / * 获取所有分类 * @return */ @Override public List<RoleTree> selectRoleTree() { List<RoleTree>roleTreeList=roleTreeMapper.selectRoleTree(); List<UserRole>userRoleList=userRoleMapper.selectAll(); //定义一个新的List List<RoleTree>treeList=new ArrayList<>(); //找到所有的一级分类 for(RoleTree roleTree :roleTreeList){ //一级菜单的parent_role_id是0 if(roleTree.getParent_role_id()==0){ treeList.add(roleTree); } } //为1级菜单设置子菜单 for (RoleTree roleTree :treeList){ roleTree.setTrees(getchilde(roleTree.getId(),roleTreeList)); } return treeList; } / * 递归查找子菜单 * @param id 当前菜单id * @param rootList 要查找的列表 */ private List<RoleTree>getchilde(Integer id,List<RoleTree>rootList){ //子菜单的子菜单 List<RoleTree>childList =new ArrayList<>(); for (RoleTree roleTree :rootList){ //遍历所有节点,将父菜单id与传过来的id比较 if(roleTree.getParent_role_id().equals(id)){ childList.add(roleTree); } } //将子菜单的子菜单再做循环 for(RoleTree roleTree :childList){ roleTree.setTrees(getchilde(roleTree.getId(),rootList)); } //退出递归 if (childList.size()==0){ return null; } return childList; } } 

Mapper接口  

package com.example.unicom.service; import com.baomidou.mybatisplus.extension.service.IService; import com.example.unicom.entity.RoleTree; import java.util.List; public interface RoleTreeService extends IService<RoleTree> { List<RoleTree> selectRoleTree(); } 

Mapper .xml 映射 

 

讯享网<?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="com.example.unicom.mapper.UserRoleMapper"> <select id="selectRoleTree" parameterType="com.example.unicom.entity.UserRole" resultType="com.example.unicom.entity.UserRole"> SELECT user_role.user_id,user_role.user_name,user_role.jg_name FROM user_role </select> </mapper>

小讯
上一篇 2025-03-30 16:45
下一篇 2025-02-26 10:55

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15798.html