spring项目菜单文件树数据库设计与后端接口实现

spring项目菜单文件树数据库设计与后端接口实现

数据库表结构设计

document_tree_table

字段名类型注释能否为空主键
idvarchar(32)主键主键
prev_idvarchar(32)上一级目录id-
directory_namevarchar(32)目录名称-
directory_levelint(11)目录层级(1为最顶层依次往下)-

以上是针对文件目录树设计的表结构。
directory_level该字段是目录层级一级目录对应1二级目录对应2 …依次往下。

代码实现

VO、PO类

VO类

@ApiModel("文件树配置")
public class DocumentTreeConfigureVO implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ApiModelProperty(value = "主键" )
    private String id;
    /**
     * 上一级目录id
     */
    @ApiModelProperty(value = "上一级目录id" )
    @Size(max = 32)
    @InvalidCode(value = "5002", message = "{invalid.code.5002}", desc = "上一级目录id")
    private String prevId;
    /**
     * 目录名称
     */
    @ApiModelProperty(value = "目录名称" )
    @Size(max = 32)
    @InvalidCode(value = "5003", message = "{invalid.code.5003}", desc = "目录名称")
    private String directoryName;
    /**
     * 目录层级(1为最顶层依次往下)
     */
    @ApiModelProperty(value = "目录层级(1为最顶层依次往下)" )
    @Digits(integer = 10, fraction = 0)
    @InvalidCode(value = "5004", message = "{invalid.code.5004}", desc = "目录层级(1为最顶层依次往下)")
    private Integer directoryLevel;

    @ApiModelProperty(hidden = true)
    private List<DocumentTreeConfigureVO> childNodes = new ArrayList<>();


    public List<DocumentTreeConfigureVO> getChildNodes() {
        return childNodes;
    }

    public void setChildNodes(List<DocumentTreeConfigureVO> childNodes) {
        this.childNodes = childNodes;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public void setPrevId(String prevId) {
        this.prevId = prevId;
    }

    public String getPrevId() {
        return prevId;
    }

    public void setDirectoryName(String directoryName) {
        this.directoryName = directoryName;
    }

    public String getDirectoryName() {
        return directoryName;
    }

    public void setDirectoryLevel(Integer directoryLevel) {
        this.directoryLevel = directoryLevel;
    }

    public Integer getDirectoryLevel() {
        return directoryLevel;
    }
}

PO类

@TableName("document_tree_table")
public class DocumentTreeConfigurePO extends BaseEntity implements Serializable {
    private static final long serialVersionUID=1L;

    /**
     *  主键
     */
    @TableId("id")
    private String id;


    /**
     *  上一级目录id
     */
    @TableField("prev_id")
    private String prevId;


    /**
     *  目录名称
     */
    @TableField("directory_name")
    private String directoryName;


    /**
     *  目录层级(1为最顶层依次往下)
     */
    @TableField("directory_level")
    private Integer directoryLevel;



    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public void setPrevId(String prevId) {
        this.prevId = prevId;
    }

    public String getPrevId() {
        return prevId;
    }

    public void setDirectoryName(String directoryName) {
        this.directoryName = directoryName;
    }

    public String getDirectoryName() {
        return directoryName;
    }

    public void setDirectoryLevel(Integer directoryLevel) {
        this.directoryLevel = directoryLevel;
    }

    public Integer getDirectoryLevel() {
        return directoryLevel;
    }

}

Service实现类


	//查询结构树的接口实现方法
    @Override
    public List<DocumentTreeConfigureVO> queryTreeNoAuth() {
        //根节点list
        QueryWrapper<DocumentTreeConfigurePO> rootWrapper = new QueryWrapper<>();
        rootWrapper.eq("directory_level", 1);
        List<DocumentTreeConfigureVO> rootList = listVO(rootWrapper);

        QueryWrapper<DocumentTreeConfigurePO> wrapper = new QueryWrapper<>();
        wrapper.eq("type", 0);
        List<DocumentTreeConfigureVO> list = this.listVO(wrapper);

        loadDocumentTree(rootList, list, 1);
        return rootList;
    }

/**
     * 递归生成结构树
     * @param rootList      根节点列表
     * @param sourceList    全部节点
     * @param level         节点等级
     */
    private void loadDocumentTree(List<DocumentTreeConfigureVO> rootList, List<DocumentTreeConfigureVO> sourceList, Integer level){
        for (DocumentTreeConfigureVO rootVo : rootList) {
            String rootVoId = rootVo.getId();
            Integer nextLevel = level + 1;
            List<DocumentTreeConfigureVO> childList = new ArrayList<>();
            for (DocumentTreeConfigureVO vo : sourceList) {
                String prevId = vo.getPrevId();
                Integer directoryLevel = vo.getDirectoryLevel();
                if (rootVoId.equals(prevId) && directoryLevel == nextLevel){
                    childList = rootVo.getChildNodes();
                    childList.add(vo);
                }
            }
            loadDocumentTree(childList, sourceList, nextLevel);
        }
    }

第一次写试试水,凑合看吧大家,谢谢啦!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值