SpringBoot + MybatisPlus + Stream 聚合操作实现数据树形结构
SpringBootMyBatisPlusStream API实现树形结构效果如下:{"code": 200,"data": [{"id": 1,"pid": 0,"name": "一级","sort": 0,"status": 20,"children": [{.
·
SpringBoot
MyBatisPlus
Stream API
实现树形结构效果如下:
{
"code": 200,
"data": [
{
"id": 1,
"pid": 0,
"name": "一级",
"sort": 0,
"status": 20,
"children": [
{
"id": 2,
"name": "二级",
"sort": 0,
"status": 20,
"children": [],
"pid": 1
},
{
"id": 3,
"name": "二级",
"sort": 0,
"status": 20,
"children": [],
"pid": 1
},
{
"id": 4,
"name": "二级",
"sort": 0,
"status": 20,
"children": [],
"pid": 1
}
]
}
],
"msg": "操作成功"
}
一、 数据库结构:
二、 entity 结构:
package com.boot.voice.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.*;
import lombok.*;
import java.util.Date;
import java.util.List;
/**
* 分类表(GoodsCategory)实体类
*
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString(callSuper = true)
@TableName(value = "goods_category")
public class GoodsCategoryEntity implements Serializable {
private static final long serialVersionUID = -52811708863040780L;
@TableId(type = IdType.AUTO)
private Long id;
/**
* 父分类
*/
private Long pId;
/**
* 分类名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
/**
* 分类状态
*/
private Integer status;
@TableField(exist = false)
public List<GoodsCategoryEntity> children;
}
三、serviceImpl 结构:
package com.boot.voice.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.boot.voice.mapper.GoodsCategoryMapper;
import com.boot.voice.entity.GoodsCategoryEntity;
import com.boot.voice.common.dto.GoodsCategoryDto;
import com.boot.voice.service.IGoodsCategoryService;
import com.boot.voice.common.map.GoodsCategoryConverter;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 分类表(GoodsCategory)表服务实现类
*/
@Slf4j
@Service("goodsCategoryService")
public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper, GoodsCategoryEntity> implements IGoodsCategoryService {
@Override
public List<GoodsCategoryEntity> tree() {
LambdaQueryWrapper<GoodsCategoryEntity> queryWrapper = Wrappers.lambdaQuery();
List<GoodsCategoryEntity> list = this.list(queryWrapper);
List<GoodsCategoryEntity> result = list.stream()
.filter(permission -> permission.getPId().equals(0L))
.map(permission -> covert(permission, list))
.collect(Collectors.toList());
return result;
}
/**
* 将权限转换为带有子级的权限对象
* 当找不到子级权限的时候map操作不会再递归调用covert
*/
public GoodsCategoryEntity covert(GoodsCategoryEntity permission, List<GoodsCategoryEntity> permissionList) {
List<GoodsCategoryEntity> children = permissionList.stream()
.filter(subPermission -> subPermission.getPId().equals(permission.getId()))
.map(subPermission -> covert(subPermission, permissionList))
.collect(Collectors.toList());
permission.setChildren(children);
return permission;
}
}
四、Controller 控制器:
package com.boot.voice.controller;
import com.boot.voice.core.result.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.boot.voice.entity.GoodsCategoryEntity;
import com.boot.voice.service.IGoodsCategoryService;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import java.util.List;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;
/**
* 分类表(GoodsCategory)表控制层
*/
@RestController
@RequestMapping("goodsCategory")
public class GoodsCategoryController {
/**
* 服务对象
*/
@Autowired
private IGoodsCategoryService goodsCategoryService;
@GetMapping("/tree")
public R list() {
List<GoodsCategoryEntity> list = goodsCategoryService.tree();
return R.success(list);
}
}

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)