递归无限查询部门树状信息,返回数据展示。数据库是这样的
上代码
Service
@Service
public class CompanyService {
@Resource
private CompanyMybatisDao companyMybatisDao;
public JSONObject selectAll(CompanyEntity companyEntity) {
JSONObject json = new JSONObject();
try {
/*查询出所有的数据*/
List<CompanyEntity> treeData = companyMybatisDao.selectCompanyTrees(companyEntity);
for (int i = 0; i <treeData.size() ; i++) {
System.out.println(treeData.get(i).getName());
}
/*进行树形结构封装*//*id 指的最大的id 0 滨投 company 指这条数据*/
List<CompanyEntity> departmentDtos = childrenDepartTree("0",treeData);
json.put("msg", "查询部门成功");
json.put("data", departmentDtos);
json.put("code", 0);
} catch (Exception e) {
e.printStackTrace();
json.put("msg", "查询部门失败");
json.put("code", 1);
json.put("data", new HashMap<String,Object>());
}
return json;
}
public static List<CompanyEntity> childrenDepartTree(String id, List<CompanyEntity> companyEntity) {
List<CompanyEntity> listMapTreeRe = new ArrayList<>();
for (CompanyEntity map : companyEntity) {
if(id.equals(map.getParentId().toString())) {//子节点
CompanyEntity entity = new CompanyEntity();
entity.setId(map.getId());
entity.setName( map.getName());
entity.setChildren( childrenDepartTree(map.getId().toString(), companyEntity));
listMapTreeRe.add(entity);
}
}
return listMapTreeRe;
}
}
Controller层
@RestController
@RequestMapping(value = "/manage/company", produces = "application/json;charset=utf-8")
public class CompanyController {
@Autowired
private CompanyService companyService;
@RequestMapping(value = "/findAllCompanyTree", method = RequestMethod.POST)
public String findAllCompanyTree(@RequestBody CompanyEntity data) {
return companyService.selectAll(data).toString();
}
}
Mapper层接口
@Mapper
public interface CompanyMybatisDao {
/**
* 查询公司信息
*
* @param request 查询参数
* @return 查询结果
*/
ArrayList<CompanyEntity> findAll(CompanyEntity request);
//
List<CompanyEntity> selectCompanyTrees(CompanyEntity companyEntity);
}
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.mybatis.CompanyMybatisDao">
<sql id="columns">
id, name, category, parentId
</sql>
<!---->
<select id="selectCompanyTrees" resultType="com.entity.database.CompanyEntity">
select * from company where 1=1
</select>
Pojo实体类
@Entity
@Table(name = "company", schema = "public", catalog = "eip")
public class CompanyEntity implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String category;
private Integer parentId;
private List<CompanyEntity> children; //部门信息树
private Pages pages;
@Transient
public List<CompanyEntity> getChildren() {
return children;
}
public void setChildren(List<CompanyEntity> children) {
this.children = children;
}
@Transient
public Pages getPages() {
return pages;
}
public void setPages(Pages pages) {
this.pages = pages;
}
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Basic
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Basic
@Column(name = "category")
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
@Basic
@Column(name = "parent_id")
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
CompanyEntity that = (CompanyEntity) o;
return id.equals(that.id) &&
Objects.equals(name, that.name) &&
Objects.equals(category, that.category) &&
Objects.equals(parentId, that.parentId);
}
@Override
public int hashCode() {
return Objects.hash(id, name, category, parentId);
}
}
最后测试,完美