最近得到了如下需求:公司新增部门的时候,可以选择上级部门,此时这个公司下所有的部门信息可以以树形结构返回给前端,类似于下图(网上找的一张)。
集成开发环境:Java JDK 1.8,Mybatis,SQL server,IDEA。
数据库表结构的设计:部门信息为一张表,id为自增主键;companyId为公司的ID(可以联想到还有一张公司表,这里不展示公司信息表);parentId为上级部门ID,parentID为0的时候,表示没有上级部门;name为部门名称;description为部门描述;deleted表示此数据是否可用(0可用,1已删除)。
数据库表中数据如下:
由数据库我们可以得到如下的部门树结构(此处部门结构只为测试使用,不符合真正的公司部门结构):
技术部
项目管理部
产品部
开发部
网站开发部
App研发部
财务部
会计部
出纳部
人力资源部
招聘部
薪酬绩效部
这个树结构我们可以使用递归来实现,这里主要的递归实现如下(此段代码以下为详细实现,可以不看)。主要是用递归的思想来查询下级部门信息:
@Test
public void test01() throws IOException{
Department department = new Department();
department.setCompanyId(12L);
department.setParentId(0L);
List<DepartmentTree> departmentTrees = getDepartment(department);
}
//递归获取下级部门信息
private List<DepartmentTree> getDepartment(Department department) {
List<DepartmentTree> departmentTrees = mapper.getDepartmentTree(department);
if (departmentTrees.size() > 0) {
Department sonDepartment = new Department();
for (int i = 0; i < departmentTrees.size(); i++) {
sonDepartment.setParentId(departmentTrees.get(i).getId());
sonDepartment.setCompanyId(department.getCompanyId());
List<DepartmentTree> sonDepartmentTree = getDepartment(sonDepartment);
departmentTrees.get(i).setDepartmentTrees(sonDepartmentTree);
}
}
return departmentTrees;
}
工程详细代码实现如下(可以不看):
mybatis配置文件mybatis-config.xml:
<?xml version="