Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页
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中利用递归算法查询到所有下级用户,并手动进行分页的更多相关文章
- spring boot中利用mybatis-generator插件生成代码
使用Idea在spring boot中集成mybatis-generator,自动生成mapper.xml model dao 文件 一.配置 pom.xml 在pom.xml的<plugi ...
- spring boot 中使用redis session
spring boot 默认的httpsession是存在内存中.这种默认方式有几个缺点:1.当分布式部署时,存在session不一致的问题:2.当服务重启时session就会丢失,这时候用户就需要重 ...
- 利用 Spring Boot 中的 @ConfigurationProperties,优雅绑定配置参数
使用 @Value("${property}") 注释注入配置属性有时会很麻烦,尤其是当你使用多个属性或你的数据是分层的时候. Spring Boot 引入了一个可替换的方案 -- ...
- Spring Boot中使用 Spring Security 构建权限系统
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...
- spring boot(三):Spring Boot中Redis的使用
spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...
- Spring Boot中的事务管理
原文 http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...
- Spring Boot中的注解
文章来源:http://www.tuicool.com/articles/bQnMra 在Spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了 ...
- springboot(十一):Spring boot中mongodb的使用
mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...
- 在Spring Boot中使用swagger-bootstrap-ui
在Spring Boot中使用swagger-bootstrap-ui swagger-bootstrap-ui是基于swagger接口api实现的一套UI,因swagger原生ui是上下结构的,在浏 ...
随机推荐
- Python关键点常识
关键点常识 Python的发音与拼写 Python的作者是Guido van Rossum(龟叔) Python正式诞生于1991年 Python的解释器如今有多个语言实现,我们常用的是CPython ...
- Bootstrap之Form表单验证神器: BootstrapValidator(转)
前言:做Web开发的我们,表单验证是再常见不过的需求了.友好的错误提示能增加用户体验.博主搜索bootstrap表单验证,搜到的结果大部分都是文中的主题:bootstrapvalidator.今天就来 ...
- Activiti7工作流+SpringBoot
文章目录 一. Activiti相关概念 1. Activiti介绍 2. 核心类 2.1 ProcessEngine 2.2 服务(Service)类 2.2.1 TaskService 2.2.2 ...
- 通过PdfiumViewer.dll实现pdf直接从流显示(效果不好)
开源的PdfiumViewer.dll并不完整 需要不开源的pdfium.dll配合使用 引用只需添加PdfiumViewer.dll,但pdfium.dll必须跟它放在一个路径下 界面中添加控件: ...
- 2018-8-10-WPF-调试-获得追踪输出
title author date CreateTime categories WPF 调试 获得追踪输出 lindexi 2018-08-10 19:16:51 +0800 2018-05-16 1 ...
- 怎样判断一个jquery对象是否为空jquery对象
if ( $('#myDiv').length ){} http://stackoverflow.com/questions/47... 也可以直接判断$('#myDiv')[0]===undefin ...
- pytorch实现BiLSTM+CRF用于NER(命名实体识别)
pytorch实现BiLSTM+CRF用于NER(命名实体识别)在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质量 ...
- redis常用指令总结以及功能介绍
第一部分 redis的常用指令 一.针对key的操作 1.1 del key [key .. ] , 删除指定的一个或者多个key;1.2 dump key ...
- 原生PHP实现Mysql数据分页功能
一. 思路整理 实现一个数据分页功能,需要有数据的总条数,每页展示的条数,和当前在第几页这三个参数 通过⌈总条数/每页展示的条数⌉可以得到总页数,比如某留言板有101条留言,每页展示10条,一那就需要 ...
- GitHub上传项目到远程库
写文章 GitHub上传项目到远程库 GitHub上传项目到远程库 今天把想把文件托管到GitHub仓库,但是执行一系列的命令以后,刷新GitHub网站还是没有任何更新.后来终于找到原因,原来 ...