实现案例:
实现功能如下:
mysql准备数据:
业务代码如下:
实体类:
package com.yty.system.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author
* @since 2023-09-10
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_dept")
@ApiModel(value="Dept对象", description="")
public class Dept implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "部门编码id")
@TableId(value = "id", type = IdType.ID_WORKER)
private String id;
@ApiModelProperty(value = "部门名称")
private String deptName;
@ApiModelProperty(value = "部门等级")
private String deptLevel;
@ApiModelProperty(value = "部门父级编码id")
private String pId;
@TableField(exist = false)
private List<Dept> children;
}
接口入口:
package com.yty.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yty.system.entity.AccountInfo;
import com.yty.system.entity.Dept;
import com.yty.system.service.IDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author
* @since 2023-09-10
*/
@RestController
@RequestMapping("/dept")
public class DeptController {
@Autowired
private IDeptService deptService;
@GetMapping(value = "/tree")
public Object tree(){
// 1 查询所有的部门
List<Dept> list = deptService.list();
// 2 查询最顶级部门
Dept dept = deptService.getById(100);
Dept trees = getTrees(dept, list);
return trees;
}
/**
* 递归遍历查询数
* @param node
* @param list
* @return
*/
public Dept getTrees(Dept node, List<Dept> list) {
String value = node.getId();
List<Dept> childs = null;
Iterator<Dept> iterator = list.iterator();
while (iterator.hasNext()) {
Dept m = iterator.next();
if(m.getPId().equals(value)){
childs = node.getChildren();
if(childs == null) {
childs = new ArrayList<>();
}
childs.add(m);
iterator.remove();
node.setChildren(childs);
}
}
if(childs != null && !childs.isEmpty() && list !=null && !list.isEmpty()){
Iterator<Dept> iterator2 = childs.iterator();
while(iterator2.hasNext()){
Dept next = iterator2.next();
getTrees(next,list);
}
}
return node;
}
}