springboot树形列表查询
时间: 2023-07-06 20:17:40 浏览: 130
springboot+mybatis-plus+gradle+mysql+swagger基础增删改查、树形查询
实现树形结构的列表查询可以使用递归查询或者使用数据库自身的树形结构查询语句,下面介绍一种基于MyBatis-Plus和递归查询实现的方法。
首先定义一个树形结构的实体类,包含id、父节点id、名称、子节点列表等属性。如下:
```java
@Data
@EqualsAndHashCode(callSuper = true)
public class TreeEntity extends BaseEntity {
private Long parentId;
@TableField(exist = false)
private List<TreeEntity> children;
}
```
接着创建一个Mapper接口,定义一个递归查询方法,根据父节点id查询子节点列表,并且递归查询子节点的子节点列表。
```java
public interface TreeMapper extends BaseMapper<TreeEntity> {
List<TreeEntity> selectTreeList(@Param("parentId") Long parentId);
}
```
在Mapper.xml中实现该方法,具体实现如下:
```xml
<select id="selectTreeList" resultMap="BaseResultMap">
with recursive
cte(id, parent_id, name, create_time) as (
select id, parent_id, name, create_time
from tree
where parent_id = #{parentId}
union all
select t.id, t.parent_id, t.name, t.create_time
from tree t
inner join cte on cte.id = t.parent_id
)
select * from cte
</select>
```
在Service层中调用该方法,实现树形结构的列表查询。如下:
```java
@Service
public class TreeServiceImpl extends ServiceImpl<TreeMapper, TreeEntity> implements TreeService {
@Override
public List<TreeEntity> getTreeList(Long parentId) {
List<TreeEntity> treeList = baseMapper.selectTreeList(parentId);
for (TreeEntity tree : treeList) {
List<TreeEntity> children = getTreeList(tree.getId());
if (!CollectionUtils.isEmpty(children)) {
tree.setChildren(children);
}
}
return treeList;
}
}
```
以上就是基于MyBatis-Plus和递归查询实现的树形结构的列表查询方法。
阅读全文