上篇文章:Ant Design Vue - Tree实现右键功能 已经讲了如何创建一个tree组件,同时添加了vue组件的右键功能,那么实际工作中,这个tree 的数据肯定是动态从后端获取,那么我们简单讲讲后端如何构造出这个tree节点数据。
准备条件
新建一个Spring boot工程,并导入mybatis-plus等相关包。
实现
创建表
CREATE TABLE `t_cases_tree` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`TITLE` varchar(255) NOT NULL COMMENT '节点名',`PARENT_ID` int(11) NOT NULL COMMENT '父节点id -1表示根目录',`TYPE` int(10) NOT NULL COMMENT '节点类型1 文件夹 2 脑图',`PROJECT_ID` bigint(20) NOT NULL COMMENT '项目ID',`CREATE_TIME` datetime NOT NULL COMMENT '创建时间',`MODIFY_TIME` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`),KEY `PROJECT_ID` (`PROJECT_ID`),CONSTRAINT `projectid` FOREIGN KEY (`PROJECT_ID`) REFERENCES `t_project` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
创建表对应的实体
@Data@EqualsAndHashCode(callSuper = false)@Accessors(chain = true)@TableName("t_cases_tree")public class TCasesTree implements Serializable {private static final long serialVersionUID = 1L;@TableId(value = "id", type = IdType.AUTO)private Long id;/*** 节点名*/@TableField("TITLE")private String title;/*** 父节点id*/@TableField("PARENT_ID")private Long parentId;/*** 节点类型 1.文件夹 2.脑图*/@TableField("TYPE")private Integer type;/*** 项目ID*/@TableField("PROJECT_ID")private Long projectId;/*** 创建时间*/@TableField("CREATE_TIME")private Date createTime;/*** 修改时间*/@TableField("MODIFY_TIME")private Date modifyTime;/*** 不写入数据库字段*/private transient List<TCasesTree> children;}
创建dao层
public interface TCasesTreeMapper extends BaseMapper<TCasesTree> {}
创建service
@Overridepublic List<TCasesTree> findAllByProjectId(Long projectId) {List<TCasesTree> casesTrees = getTreeDataLoop(projectId,-1L);return casesTrees;}private List<TCasesTree> getTreeDataLoop(Long projectId,Long parentId) {// 通过项目ID获取该ID下所有节点QueryWrapper<TCasesTree> wrapper = new QueryWrapper<>();wrapper.eq("PROJECT_ID", projectId);wrapper.eq("PARENT_ID",parentId);List<TCasesTree> casesTrees = this.baseMapper.selectList(wrapper);// 循环获得的子级,将子级放入父级中for (TCasesTree casesTree : casesTrees) {// 递归方法,自己调用自己List<TCasesTree> treeDataLoop = getTreeDataLoop(projectId,casesTree.getId());// 将子级放入父级中casesTree.setChildren(treeDataLoop);}return casesTrees;}
controller实现
@GetMappingpublic List<TCasesTree> findAllByProjectId(@NotBlank Long projectId) {return casesTreeService.findAllByProjectId(projectId);}
