SpringBoot、mybatis返回树结构的数据实现
作者:华大哥 发布时间:2022-05-12 18:56:08
标签:SpringBoot,mybatis,返回树结构
公司有个业务需要查出所有的用户权限分类,并将最后一层类别所包含的权限查出来。
数据库说明,有一个parent_id 字段是最好的:、
parent_id的值就是上级的id,一般的话,最顶级的parent_id是设置为0。
先看看表结构:
下面不说废话,直接上代码:
定义的vo类:
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("父ID")
private Long parentId;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("子节点")
private List<UserVo> children;
获取列表
List<UserVo> userList userService.findUsersAndChildrenList(User);
List<UserVo> users = new ArrayList<>();
for (UserVo r : userList) {
UserVo user = new UserVo();
user.setId(r.getId());
user.setParentId(r.getParentId());
user.setName(r.getName());
List<UserVo> children = this.getChildrenList(r.getId(), status);
user.setChildren(children);
users.add(user);
}
public List<UserVo> getChildrenList(Long cid){
List<UserVo> users= userService.findUserChildrenByParentId(cid);
List<UserVo> userList= new ArrayList<>();
if(users){
for (UserVo u : users) {
UserVo user = new UserVo();
user.setId(u.getId());
user.setName(u.getName());
user.setParentId(u.getParentId());
List<UserVo > children = this.getChildrenList(u.getId());
user.setChildren(children);
userList.add(user);
}
}
return userList;
}
mybatis查询:
<select id="findUserChildrenList" resultMap="BaseResultMap">
SELECT *
FROM user
WHERE parent_id=#{id}
</select>
最终的数据结构:
{
"message":'获取成功',
"data":{
"num":1,
"pageSize":20,
"total":1,
"list":[
{
"id":6,
"name":"测试",
"parent_id":1,
"children":[
{
"id":9,
"name":"测试1",
"parent_id":6,
"children":[
{
"id":20,
"name":"测试2",
"parent_id":9,
"children":[
{
"id":21,
"name":"测试3",
"parent_id":20,
},
{
"id":22,
"name":"测试4",
"parent_id":20,
},
{
"id":23,
"name":"测试5",
"parent_id":20,
}
],
}
],
},
],
}
]
},
"code":200
}
如果要查某个节点的所有父节点:
mybatis查询改为 :
<select id="findUserParentListById" resultMap="BaseResultMap">
SELECT *
FROM user
WHERE id=#{id}
</select>
public List<UserVo> getParentList(Long cid){
List<UserVo> users= userService.findUserParentListById(cid);
List<UserVo> userList= new ArrayList<>();
if(users){
for (UserVo u : users) {
UserVo user = new UserVo();
user.setId(u.getId());
user.setName(u.getName());
user.setParentId(u.getParentId());
List<UserVo > children = this.getParentList(u.getParentId());
user.setChildren(children);
userList.add(user);
}
}
return userList;
}
来源:https://blog.csdn.net/lchmyhua88/article/details/124228470


猜你喜欢
- 当前,JVM生态圈主要的三大构建工具:Apache Ant(带着Ivy)MavenGradle对于初学者,Ant是最清晰的,只要读懂Xml配
- 一,功能介绍本点单系统主要是基于SpringBoot框架和小程序开发的,主要是为当代人们的生活提供更便利、更高效的服务,也为营销者提供更好的
- 本篇介绍在SpringBoot中配置Email服务的具体步骤,以及常见的异常分析。 具体案例以QQ邮箱以及QQ企业邮箱为例。QQ邮箱发送方式
- 本文实例讲述了C#之Expression表达式树,分享给大家供大家参考。具体实现方法如下:表达式树表示树状数据结构的代码,树状结构中的每个节
- 背景数据之间两两趋势比较在数据分析应用中是非常常见的应用场景,如下所示:模拟考批次班级学生语文数学英语202302三年一班张小明130145
- 下面分享的是一个Java多线程模拟停车场系统的小实例(Java的应用还是很广泛的,哈哈),具体代码如下:Park类public class
- 实现GridView的横向滚动效果如下图:具体实现的代码•1. 主界面布局代码:activity_main.xml<?xml vers
- 开发中最让人头疼的是应用突然 * ,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误
- 内部类的介绍定义在另外一个类中的类,叫内部类成员内部类1..new 创建成员内部类必须先创建外部类的实例,然后通过.new 创建内部类的对象
- 本文实例讲述了Android编程之SharedPreferences文件存储操作的方法。分享给大家供大家参考。具体分析如下:SharedPr
- @CompentScan excludeFilters配置无效@CompentScan 注解配置需要扫描的包excludeFilters 是
- 理解C#中的闭包1、 闭包的含义首先闭包并不是针对某一特定语言的概念,而是一个通用的概念。除了在各个支持函数式编程的语言中,我们会接触到它。
- 本文实例为大家分享了java实现图片角度旋转并获得图片信息的具体代码,供大家参考,具体内容如下public class Demo {/**
- 本文实例讲述了C#生成随机数的方法。分享给大家供大家参考。具体如下:/// <summary> /// 生成num位
- 本文实例为大家分享了Android倒计时的开始与停止,剩余时分秒的展示效果,供大家参考,具体内容如下1.声明开启倒计时相关方法Handler
- 目录前提第一步、去官网创建高德Key第二步 通过Gradle集成SDK(方便):第三步 配置
- 直接用javaw.exe想打开aspectj-1.9.4.jar安装aspectJ选Java™ Platform SE binary提示JV
- 本文实例讲述了C#实现的字符串转MD5码函数。分享给大家供大家参考,具体如下:/*测试环境:WinXP SP3、Visual Studio
- VideoView介绍之前介绍过使用MediaPlayer+SurfaceView实现播放视频功能。无意间发现官方封装了VideoView组
- 本文实例讲述了java数据结构排序算法之树形选择排序。分享给大家供大家参考,具体如下:这里我们就来说说选择类排序之一的排序:树形选择排序在简