Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页

前提:语言用的是kotlin(和Java一样,但更简洁),写下这篇文章用来记录编程过程中遇到的一些难点

1、功能需求

前端用户A点击“我的推荐”后,调用后台的接口,查询到所有的下家(不仅包括直接下家)

如图所示,当前用户A要查询所有下家用户,就是以自己为树的“根”节点,遍历所有下家用户,并返回所有下家:B、C、D、E···。

2、代码实现

//我的推荐
fun queryLower(request: QueryLowerRequestModel,userToken: UserToken): PageData2<QueryLowerResponseModel> {
//创建一个list,用于存储递归后的返回
var mutableList = mutableListOf<String>()
GetMyRecommend(userToken.userId!!,mutableList) var responseList = mutableListOf<QueryLowerResponseModel>() var userAsset = assetRepository.findAll()
for(i in mutableList) {
userAsset.forEach { e ->
if (e.username == i)
{
responseList.add(QueryLowerResponseModel(
userName = i,
baseMoney = e.base_money,
create_time = e.base_money_time,
isDirect = 0
))
}
}
}
var toIndex = (request.pageNo+1)*request.size-1
if( (request.pageNo+1)*request.size > mutableList.size)
{
toIndex = mutableList.size
}
var totalPages :Int = (mutableList.size / request.size)+1 return PageData2(
list = responseList.subList(request.pageNo*request.size,toIndex),
totalNum = mutableList.size.toLong(),
pageNo = request.pageNo,
totalPages = totalPages,
hasMore = false
)
}

其中的GetMyRecommend函数是我自定义的一个递归函数,函数体如下:

    //递归获取我的推荐
fun GetMyRecommend(id:Long ,nameList:MutableList<String> )
{ var userList = usersRepository.selectLowerUsers(id)
if(userList.isEmpty())
{
return
}
else
{
for( i in userList)
{
nameList.add(i)
var userId = usersRepository.findUserEntityByUsername(i)
GetMyRecommend(userId.id,nameList)
}
}
}

可以看到,在递归过程中,每次我都进行了数据库的操作,虽然这样的效率很低,但在敏捷开发过程中,首要的任务就是将功能实现,其次再考虑性能的问题。这个递归我利用了list传地址的特性,每次对list操作都会改变list中的值,这样就记录下来了所有下家。其次进行分页(分页是基础操作),并返还给前端。

Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页的更多相关文章

  1. spring boot中利用mybatis-generator插件生成代码

    使用Idea在spring boot中集成mybatis-generator,自动生成mapper.xml  model  dao 文件 一.配置 pom.xml 在pom.xml的<plugi ...

  2. spring boot 中使用redis session

    spring boot 默认的httpsession是存在内存中.这种默认方式有几个缺点:1.当分布式部署时,存在session不一致的问题:2.当服务重启时session就会丢失,这时候用户就需要重 ...

  3. 利用 Spring Boot 中的 @ConfigurationProperties,优雅绑定配置参数

    使用 @Value("${property}") 注释注入配置属性有时会很麻烦,尤其是当你使用多个属性或你的数据是分层的时候. Spring Boot 引入了一个可替换的方案 -- ...

  4. Spring Boot中使用 Spring Security 构建权限系统

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...

  5. spring boot(三):Spring Boot中Redis的使用

    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...

  6. Spring Boot中的事务管理

    原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...

  7. Spring Boot中的注解

    文章来源:http://www.tuicool.com/articles/bQnMra 在Spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了 ...

  8. springboot(十一):Spring boot中mongodb的使用

    mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...

  9. 在Spring Boot中使用swagger-bootstrap-ui

    在Spring Boot中使用swagger-bootstrap-ui swagger-bootstrap-ui是基于swagger接口api实现的一套UI,因swagger原生ui是上下结构的,在浏 ...

随机推荐

  1. 1、Dapper介绍

    1.Dapper是一个轻量级的O/R框架,性能强劲,支持原生sql与模型对象混合写法,通过DapperExtension插件可以实现纯模型的操作(零Sql)语句. 2.创建VS 项目,添加相关的依赖包 ...

  2. 理解和实现分布式TensorFlow集群完整教程

    手把手教你搭建分布式集群,进入生产环境的TensorFlow 分布式TensorFlow简介 前一篇<分布式TensorFlow集群local server使用详解>我们介绍了分布式Ten ...

  3. 2019-3-8-win10-uwp-渲染原理-DirectComposition-渲染

    title author date CreateTime categories win10 uwp 渲染原理 DirectComposition 渲染 lindexi 2019-03-08 09:18 ...

  4. Python--day25--接口类

    接口类,起规范作用

  5. P1109 桃花岛

    题目描述 不是任何人都可以进入桃花岛的,黄药师最讨厌象郭靖一样呆头呆脑的人.所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成.有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩 ...

  6. nginx+tomcat实现负载均衡(windows环境)

    一.准备工作 nginx1.14 nginx1.14下载链接 tomcat8 tomcat8下载链接 windows系统 二.实现目标 访问http://localhost地址时, 将请求轮询到tom ...

  7. element-ui—dialog使用过程中的坑

    场景一:我们将dialog写成一个可复用的公共组件用于显示不同内容(如表格操作中的修改或添加的弹窗),之后发现dialog的遮罩将弹出层(点击修改或添加后理应由一个弹窗显示出来)都盖住了,而我想要的效 ...

  8. PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析  PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...

  9. H3C 递归查询

  10. thinkjs解决跨域

    this.header("Access-Control-Allow-Origin", "*"); 将上面的代码在请求发送之前执行即可 如果不知道放在哪里 可以参 ...