news 2026/7/7 0:23:25

来源三处的数据组合后,手动进行分页

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
来源三处的数据组合后,手动进行分页

背景:业务中需要将来源三处的数据先进行各自的数据逻辑处理,再把数据整合到一起,手动分页后返回给前端;在数据量小的情况下,可以做到几秒就能查出,但是如果其中一处的数据达到上万,加上数据处理,就会使前端接收接口返回值超时。

方法:针对三部分数据,我们采取手动分页,分开处理;
先查询每部分有多少数据,根据数据有无判定是否执行该部分数据的处理逻辑;首先处理第一部分数据,有数据则进行判定,三种情况:1-数据满足分页要求,即分页的pagenum和pagesize在第一部分数据中即可找到,则直接返回,不进行后续两部分数据的查询;2-数据满足部分分页要求,即第pagenum页的pagesize数量的数据空位,在第一部分数据有一些,另一些空位需要拿第二部分数据填充,所以进行一、二查询,不进行三;3-一满足部分分页,二满足部分分页,剩下的需要在三中进行数据获取,这时候一二三都进行查询;

以上查询都不是查询全部,而且根据pagenum和pagesize查询对应页码和数量数据,这样做大大提高了查询效率,在我们业务逻辑上将接口查询效率从查询超时优化到10秒内返回参数(业务数据量大)

分页方法:

Intcount1=selectCountPart1();Intcount2=selectCountPart2();Intcount3=selectCountPart3();//计算totalinttotal=count1+count2+count3;//获取页码,页数intpageNum=StringUtil.isNotEmptyOrNull(requestDTO.getPageNum())&&requestDTO.getPageNum()!=0?requestDTO.getPageNum():1;intpageSize=StringUtil.isNotEmptyOrNull(requestDTO.getPageSize())&&requestDTO.getPageSize()!=0?requestDTO.getPageSize():10;//开始位置和结束位置Integerstart=(pageNum-1)*pageSize;Integerend=pageNum*pageSize;// 如果总数比开始小if(total<start){returnresponseDTO;}/** * 判断查询位置在哪里 */if(start<=count1){//第一部分数据查询selectPageInfo1(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,roleInventoryId,roleInventoryName,userName,start,end);if((end>count1)){if(count2>0){intpage2End=pageNum*pageSize-count1;intpage2Start=page2End-(pageSize-list.size());//第二部分数据查询selectPageInfo2(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,userListAll,userName,page2Start,page2End);}//结尾在3位置,需要查询3位置的数据if(end>(count1+count2)){if(count3>0){intpage3End=pageNum*pageSize-count1-count2;intpage3Start=page3End-(pageSize-list.size());//查询累计历史的数据selectPageInfo3(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,roleInventoryId,roleInventoryName,userName,page3Start,page3End);}}}}elseif(start<=(count1+count2)){if(count2>0){intpage2End=pageNum*pageSize-count1;intpage2Start=page2End-(pageSize-list.size());selectPageInfo2(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,userListAll,userName,page2Start,page2End);}//结尾在3位置,需要查询3位置的数据if(end>(count1+count2)){if(count3>0){intpage3End=pageNum*pageSize-count1-count2;intpage3Start=page3End-(pageSize-list.size());//查询累计历史的数据selectPageInfo3(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,roleInventoryId,roleInventoryName,userName,page3Start,page3End);}}}else{if(count3>0){intpage3End=pageNum*pageSize-count1-count2;intpage3Start=page3End-(pageSize-list.size());//查询累计历史的数据selectPageInfo3(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,roleInventoryId,roleInventoryName,userName,page3Start,page3End);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 11:23:52

LIN总线:汽车低速网络的低成本通信之道

1. 为什么汽车电子需要LIN总线&#xff1f; 当你按下车窗升降按钮时&#xff0c;可能不会想到这个简单动作背后藏着精妙的通信设计。在汽车电子领域&#xff0c;像车窗控制、雨刷调节、座椅加热这类功能&#xff0c;既不需要毫秒级响应&#xff0c;又对成本极其敏感。这时候&am…

作者头像 李华
网站建设 2026/7/3 2:30:54

TileLang 编写自定义算子,让 AMD GPU 算力不再浪费

从 CUDA 思维到 TileLang 实践 很多习惯了 NVIDIA 生态的开发者&#xff0c;在初次面对 AMD Instinct 系列显卡&#xff08;如 MI300X&#xff09;时&#xff0c;往往会有种“有力使不出”的焦虑。明明硬件参数亮眼&#xff0c;显存带宽惊人&#xff0c;但跑起大模型推理来&…

作者头像 李华
网站建设 2026/7/3 22:33:51

TPS65263与PIC18LF46K22嵌入式电源管理方案解析

1. 项目背景与核心需求在嵌入式系统设计中&#xff0c;电源管理一直是个既基础又关键的环节。随着现代MCU和外设对多电压域的需求日益复杂&#xff0c;传统的单路或双路降压方案已难以满足要求。这正是TPS65263这类三重输出同步降压转换器大显身手的场景。我最近在一个工业控制…

作者头像 李华
网站建设 2026/7/5 3:55:43

GPT-4稀疏激活与MoE架构原理深度解析

1. 这不是“参数越多越好”的简单故事&#xff1a;GPT-4参数量与激活机制的真相拆解你可能已经看到过那条刷屏的推文&#xff1a;“GPT-4有1.8万亿参数&#xff0c;但每次生成一个词&#xff08;token&#xff09;只用其中2%。”这句话像一颗小石子&#xff0c;激起了技术圈一圈…

作者头像 李华