管理系统菜单父子结构,有parentId,快速获取结构树代码

本文介绍了一种使用Java实现的递归方法来构建组织结构树的方法。通过查询数据库中的parentId字段,将数据转换为树形结构,每个节点包含子节点列表。文章详细展示了如何创建OrganizationVo实体类以及部门树的构建过程。
摘要由CSDN通过智能技术生成

机构树,数据表格里面有parentId这种,通过递归查询机构树

结果类似于

实体:通过list存储子菜单

@Data
public class OrganizationVo{
    private String fatherName;

    private Integer id;

    private String name;

    private Integer fatherId;

    private Date createTime;

    private Date updateTime;

    /**
     * 是否叶子节点:0否、1是
     */
    private Integer isLeaf;

    private static final long serialVersionUID = 1L;

    private List<CustomerOrganizationVo> child;

}

通过递归查询子机构

@Override
    public OrganizationVo departmentTree(Integer id) {
        OrganizationVo OrganizationVoTree = new OrganizationVo();
        //找到最顶级菜单
        Organization departmentFather = organizationMapper.selectByPrimaryKey(1);
        OrganizationVoTree.setId(departmentFather.getId());
        OrganizationVoTree.setName(departmentFather.getName());
        OrganizationVoTree.setFatherId(departmentFather.getFatherId());
        OrganizationVoTree.setChild(getDepartmentChild(departmentFather));
        return OrganizationVoTree;
    }

    private List<OrganizationVo> getDepartmentChild(Organization father) {
        List<OrganizationVo> tree = new LinkedList<>();
        if (father.getIsLeaf() == 0) {
            //通过当前机构的id,找到他的所有的字机构,这里使用Example
            OrganizationExample example = new OrganizationExample();
            example.createCriteria().andFatherIdEqualTo(father.getId());
            List<Organization> OrganizationList = organizationMapper.selectByExample(example);
            for (Organization organization : OrganizationList) {

                OrganizationVo organizationVo = new OrganizationVo();
                BeanUtils.copyProperties(organization, organizationVo);

                organizationVo.setFatherId(father.getId());
                organizationVo.setFatherName(father.getName());
                //递归查询子结构
                organizationVo.setChild(getDepartmentChild(organization));
                tree.add(organizationVo);
            }
        }
        return tree;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值