关于xxxxxxRepository.search()方法一个分页的小陷阱

2023-11-13

背景介绍:

我有20几万的数据,现在要推送给别人。这样我势必要从自己的数据库中先查出来,然后一点一点的传给对方。

所以我的思路是这样的:

20万数据,Repository自带的search方法有分页功能,我只需要传一个pageable给它,告诉它怎么分页就可以了,然后用一个for循环,循环调用这个search方法查出分页之后的数据,循环传送给对方。

我的代码如下:

Integer count = aRepository.countByIsPush(1);//计算“推送状态”=1的数据条数
Integer page; //需要推送的总数据,按每次推送100条,总共需要推送的次数
if (0 == count % 100) {
page = count / 100;
} else {
page = (count / 100) + 1;
}
for (int x = 0; x < page; x++) {
    aInput.setIsPush(1);
    aInput.setPage(x);
    aInput.setSize(100);
    aInput.setOrderSort("ASC");
    Page<A> aPage = aRepository.search(aInput);
   

    ...略...


}//for

        

由上可看出

1. 我计算出来总共需要推送的数据量count

2.每次传100条给对方,传count条我需要传page次

3.定义了一个PageableInput (即aInput),在for循环里,根据x的变化,我每次都会改变aInput的Page值,用来告诉search方法我这次要取哪一页,然后还定义aInput的size=100,告诉search数据按每页100条数据进行切分,也定义了一个排序ASC,告诉它查出来的数据按递增排序。

这样我就可以利用for循环,以及变化的page值100条100条的取,分page次取完这20万条数据并推送给对方。

的确一切很顺利,按照想象中的步骤进行了。但却出现了隐藏的问题。

我查看数据库的时候,我发现:

id为1~100的数据推送成功了;

id为101~200的数据推送失败了;

id为201~300的数据推送成功了;

id为301~400的数据推送失败了;

id为401~500的数据推送成功了;

id为501~600的数据推送失败了;

................

这是为什么????

后来问了大佬,发现原来是我那句

aInput.setIsPush(1);

的锅。

因为我给了一个条件,每次都查询推送状态是“1”的数据。

假设我有600条数据需要推送,一开始所有数据的推送状态都是“1”,这时候,我告诉search方法,我要查出推送状态为“1”的数据,按每页100条进行切分,你给我第1页。此时search查出来的应该是全部数据600条,然后search方法把id为1~100的数据给我了,我推送完了以后推送状态改为了“0”。

这时候,进行了下一次for循环,x随着page的变化增加了,变成了2,这时候,我告诉search方法,我要查出推送状态为“1”的数据,按每页100条进行切分,你给我第2页。但是,由于id为1~100的数据我已经推送过了,推送状态也变成了0,于是在这次search中,那100条已经推送了的数据是不满足查询条件“推送状态=1”的,所有这一次search查询出来的总数据量=500,即id为101~600这500条数据,而我又告诉它我要第2页,于是,这时候他就给我id为201~300的那100条数据,而不是id为101~200的那100条数据,然后我推送了这100条数据。故而就会出现上面那种情况。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于xxxxxxRepository.search()方法一个分页的小陷阱 的相关文章

  • 软件设计师笔记 2021年下半年

    软件设计师笔记 1 第一章 计算机知识 控制器包含 地址寄存器 S single M multiple I 指令流 Data 数据流 2 第二章
  • 【状态估计】基于UKF、AUKF的电力系统负荷存在突变时的三相状态估计研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及数据 1 概述 基于UKF和AUKF的电力系统负荷存在突
  • ARM发布Cortex-X1,是为了向苹果自研A系列处理器发起冲击吗?

    对于Arm来说 2019年是伟大的一年 这一年ARM的Cortex内核依然是手机CPU领域的佼佼者 特别是Cortex A77 红极一时的高通骁龙865处理器采用的就是Cortex A77 据说采用骁龙865处理器的手机有70款之多 其中就
  • c语言文件处理中ab,C语言文件处理中wt是什么操作方式?

    匿名用户 1级 2013 04 25 回答 最常用的文件使用方式及其含义如下 1 r 为读而打开文本文件 不存在则出错 2 rb 为读而打开二进制文件 3 w 为写而打开文本文件 若不存在则新建 反之 则从文件起始位置写 原内容将被覆盖 4
  • 【中间件】Redis如何解决BigKey

    BigKey 的弊端 BigKey 需要解决 根源就在于 BigKey 会带来的问题 占用内存 因为 Redis 数据结构的底层数据结构 大 Key 会占用更多的内存空间 造成更大的内存消耗 单线程模型 因为 Redis 的通信依赖于 So
  • 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系

    我们知道 不同肤色的人外貌差别很大 而双胞胎的辨识很难 有意思的是Web服务器 Web容器 Web应用程序服务器 反向代理有点像四胞胎 在网络上经常一起出现 本文将带读者对这四个相似概念如何区分 Web服务器概念与基本原理 Web服务器的历
  • CSS基础之CSS文本属性

    文章目录 前言 1 color 2 text align 3 font size 4 text decoration 5 text indent 6 line height 7 文本属性总结 前言 CSS 文本属性可以设置文本的 外观 比如
  • 从同源政策到跨域解决方法

    一 同源政策 同源政策的目的 是为了保证用户信息的安全 防止恶意的网站窃取数据 所谓同源指的是协议 域名 端口相同 否则就会产生跨域问题 二 跨域 跨域问题主要分为三类 1 Cookie LocalStorage 和 IndexDB 无法读
  • 记一次jQuery EasyUI使用-Easyui combobox的使用方法

    开局附上最最最有用的官方文档 划重点 easyui使用手册 进入正题 现象 有这样一段代码 浏览器请求getSystemSignList方法有返回数据并且严格符合easyui的应答规范 一个json格式的list对象 tr td class
  • 大模型讲习班丨第四范式黄世宇:强化学习的发展历程与基于人类反馈的强化学习...

    人工智能研究与应用范式正经历一场剧变 越来越多的顶级团队和杰出人才纷纷加入这一变革浪潮 作为AI大模型科研先锋 智源研究院携手一批卓越的学者与工程师 致力于将尖端技术与经验传授给有潜力的学习者 通过高效的学习方式 让更多人能迅速融入这一重要
  • MobileNet网络结构详解

    下图展示了传统卷积与DW卷积的差异 在传统卷积中 每个卷积核的channel与输入特征矩阵的channel相等 每个卷积核都会与输入特征矩阵的每一个维度进行卷积运算 而在DW卷积中 每个卷积核的channel都是等于1的 每个卷积核只负责输
  • Python-安装库-图像处理库-cv2

    问题 在pycharm中搜索cv2库 发现没有版本 在网上查找资料 找到了类似官方文档的资料 提到了安装方法 https pypi org project opencv python description cv2介绍 CV2指的是Open
  • ERROR 1064 (42000): You have an error in your SQL syntax

    mysql使用load data infile导入数据 出现如下错误 root NoName 21 19 12 gt load data infile change csv into table change CHARACTER SET u
  • JAVA基础知识点大全之二

    1 泛型 1 1 泛型类 定义格式 修饰符 class 类名 lt 类型 gt 1 2 泛型方法 定义格式 修饰符 lt 类型 gt 返回值类型 方法名 类型 变量名 1 3 泛型接口 定义格式 修饰符 interface 接口名 lt 类
  • c/c++多线程编程(1):线程的创建

    参考资料 多线程和线程同步 C C 运行环境 wsl2 Ubuntu 20 04 vscode clangd xmake gcc9 4 0 1 创建线程 1 1 线程函数 每个线程都有一个属于自己的线程id id的类型为phtread t
  • 解决centos 8命令ip add无效问题

    之前用Xshell连接虚拟机一直正常 突然一台节点总是连不上 查询众多资料后 终于找到了问题所在 出错情况 输入命令 root node01 service NetworkManager start root node01 nmcli ne
  • 图腾柱电路工作原理

    图腾柱就是上下各一个晶体管 上管为NPN c极接正电源 下管为PNP e极接负电源 注意 是负电源 是地 两个b极接到一起 接输入 上管的e和下管的c接到一起 接输出 用来匹配电压 或者提高IO口的驱动能力 有几种图腾柱电路的变种 一种是两
  • Log4j2安全 JNDI漏洞 CVE-2021-44228

    Apache Log4j2是基于Java的日志记录工具 工具重写了Log4j框架 并且引入了大量丰富特性 该日志框架被大量用于业务系统开发 用来记录日志信息 大多数情况下 开发者可能会将用户输入导致的错误信息写入日志中 因该组件使用极为广泛
  • linux内核态发送tcp包,Linux内核发送构造数据包的方式

    本文欢迎自由转载 但请标明出处 并保证本文的完整性 作者 Godbach 日期 2009 09 01 一 构造数据包简析 这里并不详细介绍如何在内核中构造数据包 下文如有需要会在适当的位置进行分析 这里简单的分析讲一下内核态基于Netfil
  • 系统掌握数据结构8 树与二叉树 第二节

    树与二叉树 2节 1 线索二叉树的逻辑结构 2 线索二叉树的物理结构 3 中序线索二叉树 3 1 逻辑结构 3 2 代码实现 4 先序线索二叉树 5 后序线索二叉树 6 三叉链表的物理结构 7 先序线索二叉树的三叉链表存储实现 8 后序线索

随机推荐

  • 【转】C#操作sqlServer数据库

    转载地址 https blog csdn net weixin 42731241 article details 81172622 工具 vs2015 SqlServer 数据库的连接及打开关闭 VS2015建立一个c 的控制台应用程序 必
  • 10个 解放双手的 IDEA 插件,让你少写冤枉代码

    公众号关注 GitHubDaily 设为 星标 每天带你逛 GitHub 友情提示 插件虽好 可不要贪装哦 装多了会 卡 卡 卡 正经干活用的 分享一点自己工作中得心应手的 IDEA 插件 可不是在插件商店随随便便搜的 都经过实战检验 用过
  • 两种通过aop设置重试机制的方式

    注意 1 不要在同一个类中调用自定义的注解 如果controller调用 注解要放在service层 其他类 2 如果有配置aop扫描的包 不能只设置扫描control下的文件 方式一 controller层 RequestMapping
  • Map

    1 说明 系统根据C Reference学习下STL gt Map 2 Map Maps are associative containers that store elements formed by a combination of a
  • 攻略:Windwos 系统中应用程序访问权限

    在Windwos XP系统中 存在着两种类型的账户 即隶属于Administrators组中的管理员账户和隶属于Users组中受限制的用户 默认情况下 管理员账户可以无限制地运行计算机中的所有程序 包括XP系统内建的以及自行安装的应用程序
  • Vue常用指令详解分析

    Vue入门 Vue是一个MVVM Model View ViewModel 的前端框架 相对于Angular来说简单 易学上手快 近两年也也别流行 发展速度较快 已经超越Angular了 比较适用于移动端 轻量级的框架 文件小 运行速度快
  • 2023AI会议时间表(持续更新)

    本文已参与 新人创作礼 活动 一起开启掘金创作之路 这篇文我会持续更新 小伙伴们可以收藏 尤其是有发论文需求的同学 当然了 如果你上网方便 有耐心的话 也可以直接上这个网站去查看 只不过要筛选一下 我这里主要是把机器学习还有我自己比较相关的
  • 【牛客网 - 华为机试】HJ59 找出字符串只出现一次的字符

    HJ59 找出字符串只出现一次的字符 题目描述 找出字符串中第一个只出现一次的字符 输入描述 输入几个非空字符串 输出描述 输出第一个只出现一次的字符 如果不存在输出 1 示例1 输入 asdfasdfo aabb 输出 o 1 impor
  • C++去掉字符串前后的多余空格

    C 中std string 没有可以直接去掉字符串前后多余空格的接口 所以自己实现了一个 借鉴Qt中QString的trimmed 函数源码实现的版本 去掉std string 字符串前后的空格 void string trimmed st
  • vscode连接服务器

    使用VScode连接服务器的好处在于 vscode可以当成一个网页端的IDE 而使用Pycharm连接服务器则存在文件的同步问题 而且很慢 此处保险起见 加一个前提条件 to the best of our knowledge 步骤一 安装
  • Vue3的fragment

    vue2时 组件的模板结构中出现多个标签时 需要使用根标签 vue3时 组件的模板结构中出现多个标签时 可以不用根标签 这是因为vue3会自动将多个标签用fragment包裹 举个例子 main js import createApp fr
  • 华为h22h05服务器装系统_在新服务器装12年前的系统,如何实现

    2020年1月14日 微软正式终止支持Windows 7 包括不再提供任何技术支持 软件更新和安全更新及修复 这意味着 如果用户不想让自己的电脑 裸奔 就得升级到更新的操作系统版本 也许有些人觉得更新操作系统并没有什么 但对那些古董软件使用
  • 社会学讲义

    文章目录 一 社会学的观点和视角 1 世界为什么不是看起来的那个样子 为什么我们需要通过社会学的视角来看世界 2 社会学的想象力 赖特 米尔斯 C Wright Mills 3 为何要培养 社会学的想象力 4 为什么说人的世界观和人的属性是
  • 关于蓝牙测试蓝牙协议(应用层)

    1 HFP 让蓝牙设备可以控制电话 如接听 挂断 拒接 语音拨号等 拒接 语音拨号要看蓝牙设备和手机是否支持 2 HSP 描述了蓝牙耳机如何与计算机或者其他蓝牙设备 手机 通信 连接配置好后耳机可以作为远程设备的音频输入和输出接口 这个是最
  • torch.bmm()函数详解

    去掉batch size这一维度 按照矩阵乘法运算即可 自行体会 class PAM Module nn Module Position attention module def init self in dim gt None super
  • vue-cli4.0下antd(ant-design-vue)按需引入(附带完整过程)

    ant design vue 踩坑记录 官网没给vue cli4的例子 于是试试按照官网vue cli3的步骤操作 遇到了一些问题 这里记录下 后文给了完整过程 我亲自重新跑过一遍 应该是没有问题的 坑1 Failed to resolve
  • [vue报错]has been blocked by CORS policy

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 8080 setMealDetail goodsId 36363684365 1 Access to XMLHttpRequest at http 132 121 80 2
  • react hook

    一 hook的定义 Hook 是 React 16 8 的新增特性 它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 二 使用react hook的好处 1 使用类组件 相关逻辑的代码会被分割到不同生命
  • Java-多线程-给线程命名

    Java 多线程 给线程命名 在Java中 通过继承Thread创建的线程 有以下两种方式可以给线程命名 通过构造器命名 因为线程类继承自Thread类 所有也继承了Thread的name属性 可以通过super的方法调用父类构造器 将na
  • 关于xxxxxxRepository.search()方法一个分页的小陷阱

    背景介绍 我有20几万的数据 现在要推送给别人 这样我势必要从自己的数据库中先查出来 然后一点一点的传给对方 所以我的思路是这样的 20万数据 Repository自带的search方法有分页功能 我只需要传一个pageable给它 告诉它