springboot多级树形查询-递归

1、部门表设计

2、实体

@Data
public class DeptTreeDto {
    @ApiModelProperty(value = "部门id")
    private Integer deptId;

    @ApiModelProperty(value = "部门名称")
    private String label;

    @ApiModelProperty(value = "上级部门")
    private Integer parentId;

    private List<DeptTreeDto> children;

    @ApiModelProperty(value = "部门所属人员")
    private List<UserDeptCd> userList;
}

3、dao层

//获取全部部门数据
List<DeptTreeDto> queryDeptInfoNew();

4、service层

/**
 * 获取部门树形查询-新
 * @return
*/
List<DeptTreeDto> getDeptTreeNew();

5、实现

/**
     * 获取部门树形查询-新
     *
     * @return
     */
    @Override
    public List<DeptTreeDto> getDeptTreeNew() {
        List<DeptTreeDto> allInfo = tAcsLsUserDoorDao.queryDeptInfoNew(); //全部部门数据
        //filter是java8的写法,取得所有parentId为0的数据,也就是一级目录
        //map也是java8的写法,用于封装数据,取得他的孩子(也就是下级目录)的数据
        List<DeptTreeDto> list = allInfo.stream().filter(deptTreeDto ->
                deptTreeDto.getParentId() == 0
        ).map((menu) -> {
            menu.setChildren(getChildrenData(menu, allInfo));
            menu.setUserList(tAcsLsUserDoorDao.queryUserDeptCdByDept(menu.getDeptId()));//通过部门id查询所属部门用户
            return menu;
        }).collect(Collectors.toList());
        return list;
    }

    //获取孩子(下级目录)的方法,递归实现
    private List<DeptTreeDto> getChildrenData(DeptTreeDto root, List<DeptTreeDto> all) {
        List<DeptTreeDto> children = all.stream().filter(deptTreeDto ->
                deptTreeDto.getParentId().equals(root.getDeptId())
        ).map(deptTreeDto -> {
            deptTreeDto.setChildren(getChildrenData(deptTreeDto, all));
            deptTreeDto.setUserList(tAcsLsUserDoorDao.queryUserDeptCdByDept(deptTreeDto.getDeptId()));//通过部门id查询所属部门用户
            return deptTreeDto;
        }).collect(Collectors.toList());
        return children;
    }

6、controller层

AjaxResult是我封装的返回JSON数据的格式,可以替换成你们的

@ApiOperation(value = "查询部门树形-新递归", notes = "查询部门树形-新递归")
    @GetMapping(value = "/getDeptTreeNew")
    public AjaxResult getDeptTreeNew() {
        try {
            return AjaxResult.success(accessControlService.getDeptTreeNew());
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error();
        }
    }

7、展示

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中实现树形结构查询需要以下步骤: 1. 定义树形结构实体类,包含节点ID、父节点ID、节点名称等属性。 2. 使用JPA或MyBatis等持久化框架,将树形结构实体类映射到数据库表中。 3. 编写树形结构查询方法,可以使用递归方式或者使用SQL语句实现。 4. 在Controller层中接收请求,调用树形结构查询方法,返回结果。 下面是一个使用JPA实现树形结构查询的示例代码: ``` @Entity @Table(name = "tree_node") public class TreeNode { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "parent_id") private Long parentId; @Column(name = "name") private String name; // 省略getter和setter方法 } @Service public class TreeService { @Autowired private TreeNodeRepository treeNodeRepository; public List<TreeNode> getTree() { List<TreeNode> rootNodes = treeNodeRepository.findByParentIdIsNull(); for (TreeNode rootNode : rootNodes) { buildTree(rootNode); } return rootNodes; } private void buildTree(TreeNode parentNode) { List<TreeNode> childNodes = treeNodeRepository.findByParentId(parentNode.getId()); if (!childNodes.isEmpty()) { parentNode.setChildren(childNodes); for (TreeNode childNode : childNodes) { buildTree(childNode); } } } } @RestController @RequestMapping("/tree") public class TreeController { @Autowired private TreeService treeService; @GetMapping public List<TreeNode> getTree() { return treeService.getTree(); } } ``` 在上面的示例代码中,TreeNode为树形结构实体类,TreeService中的getTree()方法使用递归方式构建树形结构,TreeController中的getTree()方法返回树形结构数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值