MyBatis-Plus构建树形结构数据的方式

树形结构,是指数据之间的关系像树根延伸出多个树杈。最常见的就是省市区的层级关系。

首先需要在 springboot 项目的 pom.xml 中引入

---
	------------------
	-------------------------------
	-----------
---

实体类

-
-
-
-
- - - -
	------- - -- ---- - ----
	- - ---
	- - -----------
	- - -----------
	- - ---------
-

表对应的VO实体类

-
-
-
-
- - - -
	------- - -- ---- - ----
	- - ---
	- - -----------
	- - -----------
	- - ---------
	- ---- ---------
-

实现方式

1、一次查询,递归组装(推荐)

- ---- --- ----------
	---- ------- - ----------------
	---- ------- - --------------- - -
		- -- - - ----
		------ ----
		- ---
	------------
	- ----------- ---------
-

- ---- --- --------- ---- ---------
	---- -- - - ------
	- -- ---- - -------- -
		- -------------- ---------- -
			------------------ ----------
			-----------
		-
	-
	- ---
-

2、逐级递归查询

public List<SystemRegionVo> getTree(Long --------){
	LambdaQueryWrapper<SystemRegion> ------- = new LambdaQueryWrapper<>();
	-------.eq(SystemRegion::getParentId, --------);
	List<SystemRegion> ------- = ----------.selectList(-------);
	List<SystemRegionVo> ---- = -------.stream().map(- -> {
		SystemRegionVo -- = new SystemRegionVo();
		BeanUtils.copyProperties(-, --);
		return --;
	}).collect(Collectors.toList());

	----.forEach(this::getChildren);
	return ----;
}

private void getChildren(SystemRegionVo ----){
	LambdaQueryWrapper<SystemRegion> ------- = new LambdaQueryWrapper<>();
	-------.eq(SystemRegion::getParentId, ----.getId());
	List<SystemRegion> ---- = ----------.selectList(-------);
	List<SystemRegionVo> ------ = ----.stream().map(- -> {
		SystemRegionVo -- = new SystemRegionVo();
		BeanUtils.copyProperties(-, --);
		return --;
	}).collect(Collectors.toList());
	----.setChildren(------);
	if (!CollectionUtils.isEmpty(------)) {
		------.forEach(this::getChildren);
	}
}