@EntityScan
@Data
@Builder
public class DepartmentList {
private Integer id;
private String name;
private java.util.List<DepartmentList> child;
}
/**
* @author gmy
* @version 1.0
* @date 2021/7/23 15:15
*/
@Service
@AllArgsConstructor
public class DepartmentServiceImpl {
private final DepartmentDao departmentDao;
public List<DepartmentList> getAllDepartment(){
// 得到所有的根目录
List<Department> root = departmentDao.queryAllByParentId("root");
List<DepartmentList> departmentsAll=new ArrayList<>();
//遍历得到所有根的id,即其下级的父级id
for (int i = 0; i <root.size() ; i++) {
DepartmentList departmentList = DepartmentList
.builder()
.name(root.get(i).getName())
.id(root.get(i).getId())
.build();
List<DepartmentList> common = common(root.get(i).getId().toString());
departmentList.setChild(common);
departmentsAll.add(departmentList);
}
return departmentsAll;
}
//传入父级id,得到其下面的各级别
public List<DepartmentList> common(String parentId){
List<Department> departments = departmentDao.queryAllByParentId(parentId);
List<DepartmentList> departmentsAll=new ArrayList<>();
for (int i = 0; i <departments.size() ; i++) {
DepartmentList departmentList = DepartmentList
.builder()
.name(departments.get(i).getName())
.id(departments.get(i).getId())
.build();
List<DepartmentList> common = common(departments.get(i).getId().toString());
departmentList.setChild(common);
departmentsAll.add(departmentList);
}
return departmentsAll;
}
}
结果为:
[
{
"id": 1,
"name": "公司",
"child": [
{
"id": 2,
"name": "部门1",
"child": [
{
"id": 4,
"name": "科室1",
"child": [
{
"id": 5,
"name": "员工1",
"child": []
}
]
}
]
},
{
"id": 3,
"name": "部门2",
"child": []
}
]
}
]
执行过程中出现过一个错误,如图所示
查阅资料显示是有有参的构造方法,仔细找才发现加了@Builder注解,把@Builder注解去掉就行了
jpa数据表的注解写@Entity,否则报错,如下图所示