第一种: 直接获取树形数据
注意:
1、我这里实现的是一个主部门下的所有子部门(子部门下的子部门),也就是一个主部门下的所有部门;最后返回最大部门id的数据即可;
2、如果要实现多个主部门下的子部门树,这里将返回结果进行处理,将没有父级部门的集合返回,此时返回的结果就是所有主部门的树;
1、表结构字段:(id,name,partent_id - 父级id对应这id字段)
2、写好当前表的实体
3、扩展实体VO
/**
* entity 对应着表的实体
* 继承着对应的表实体
**/
@Data
public class FwcEmpdeptVo extends entity{
/**
* 子级节点
**/
private List<FwcEmpdeptVo> children = new ArrayList<>();
}
4、service实现树节点查询
/**
* 代码中的entity对应着表实体
**/
public FwcEmpdeptVo getDeptListTree() {
//存储所有的部门
Map<String, FwcEmpdeptVo> deptTree = new HashMap<>();
//查询所有部门列表
List<entity> list = this.list();
for (entity deptItrm : list) {
FwcEmpdeptVo fwcEmpdeptVo = new FwcEmpdeptVo();
BeanUtils.copyProperties(deptItrm, fwcEmpdeptVo);
//将所有部门添加到 map 中
deptTree.put(deptItrm.getId(),fwcEmpdeptVo);
}
//将 list 置空,垃圾回收
list = null;
deptTree.entrySet().forEach(item -> {
//获取到当前节点
FwcEmpdeptVo dept = item.getValue();
//根据当前节点查询去map获取父级节点
FwcEmpdeptVo fwcEmpdeptVo = deptTree.get(dept.getParentId());
//判断是否有父级节点
if (fwcEmpdeptVo != null){
//给父级节点添加当前子
fwcEmpdeptVo.getChildren().add(dept);
}
});
//将最大的父节点返回(获取最大部门的id),就可以获取到最大部门下的所有部门节点,返回是树结构
return deptTree.get("1");
}
5、controller调用此service方法,将树形结果返回就ok了
返回结果(简单的结果树显示,数据结构的话,就会是一个树结构):
XXX公司
a部门
a1部门
b部门
c部门
注意:
如果要实现(此树结构):
a公司
a1部门
a11部门
a12部门
b1部门
b11部门
c部门
b公司
a1部门
b11部门
b1部门
c公司
只需要在返回结果时,将没有父级部门的 list 返回即可;