一、创建实体类
@Data @ToString public class CatalogVO { private Integer id; private Integer panelsId; private String catalogName; private Integer parentId; private Integer isDeleted; private String createdUser; private Date createdTime; List chirldren = new ArrayList<>(); }
创建一个实体类CatalogVO,在实体类中创建一个List 对象,用它来存储chirldren(子节点),并且引入自身作为泛型。
二、数据库设计
通过数据库结构可以看出,这里我只是简单的使用parent_id 和 id 进行层级关联。
三、service层
从数据库读取数据,然后使用递归算法将原始数据进行重新封装。
/** * 获取文档目录的树形结构 * @param panelsId * @return */ @Override public List<CatalogVO> getDetailTree(int panelsId) { QueryWrapper<FileCatalog> wrapper = new QueryWrapper<>(); wrapper.eq("panels_id", panelsId); List<FileCatalog> fileCatalogs = fileCatalogMapper.selectList(wrapper); List<CatalogVO> lists = new ArrayList<>(); for (FileCatalog fileCatalog : fileCatalogs) { CatalogVO vo = new CatalogVO(); try { BeanUtils.copyProperties(vo,fileCatalog); lists.add(vo); } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } List<CatalogVO> tree = createTree(lists, 0); return tree; } /** * 递归建立树形结构 (算法) * @param lists * @param pid * @return */ private List<CatalogVO> createTree(List<CatalogVO> lists, int pid) { List<CatalogVO> tree = new ArrayList<>(); for (CatalogVO catelog : lists) { if (catelog.getParentId() == pid) { catelog.setChirldren(createTree(lists,catelog.getId())); tree.add(catelog); } } return tree; }
四、前台请求资源