数据库不断有新数据插入, 导致分页查询数据重复的问题
问题描述
首先, 查询数据时是按照数据的录入时间分页查询的, 最新的数据一直是第1页; 同时, 库表不断地有新数据写入, 这就导致了分页查询数据请求出现重复问题.
例如19:31分时分页查询请求第1页数据, 返回了5条数据
在这期间, 又有5条新数据插入到了数据库;
此时, 分页查询请求第2页数据, 由于新数据的插入, 之前第1页的数据已经变成了第2页的数据了, 所以第2页返回的数据和第1页一样, 造成了数据的重复.
解决思路
解决思路1
一次性返回符合条件的所有数据, 然后交给前端去分页, 此时前端拿到比如500条数据, 然后前端的分页就是数据展示的问题了, 而不再涉及到再次请求服务器, 因而就不会出现数据重复问题
但是, 分页的目的是为了减轻服务器请求的压力, 如果一次请求的数据量过大, 就会降低服务器的反应速度, 因此这个想法不太可行.
解决思路2
请求第1页时记录第1条数据(即最新的那条)的写入时间, 然后后面查询第2,3,4...页数据, 把记录的写入时间作为参数, 然后在sql语句中做限制
例如查询第2页, 设置写入时间小于等于2019-05-15 19:31:59, 这样即使有新数据插入, 也不在我们本次分页查询的范围内.
select * from table1 where write_time <=1557919919000 order by write_time desc limit 5,5
代码步骤
1. 首先, 在PageBean中添加属性time用于记录时间
2. 然后, 在dao中的sql中添加time查询条件
3.然后, 在service中对pageBean的time赋值, 这个值是从web层传过来的
if(pageBean.getStart() == 0){// 查询的第1页, 时间置空, 获取限定时间pageBean.setTime(null);}else{// 不是第1页, 直接使用传来的限定时间pageBean.setTime(writeTime);}List<FaceCapture> faceCaptureList = faceCaptureDao.findByTimeDesc(startTime, endTime, deviceId, pageBean.getTime(),pageBean.getStart(), pageBean.getPageCount());// 第1页, 记录限定时间if(pageBean.getStart() == 0 && faceCaptureList != null && faceCaptureList.size() > 0){pageBean.setTime(faceCaptureList.get(0).getCaptureTime());}pageBean.setList(faceCaptureList);return pageBean;
service中, 首先判断PageBean.getStart()判断当前查询的是否为第1页, 如果是第1页, 就先置空PageBean的time;
然后查询数据, 因为查的是第1页, 所以第一条数据的时间就是最新的时间;
查完之后, 把这个时间赋给PageBean的time;
之后查询第2,3,4...也都要传这个参数作为sql限定
4. web层, 获取请求传来的time参数, 传给service
这样, 虽然每次请求第1页的数据都是获取最新的, 但是一旦请求完第1页, 获取最新数据的时间之后, 后面请求第2,3,4...页都会以这个时间最为限定, 从而保证新插入的数据不会影响本地查询, 也就防止了分页查询数据重复的问题.
运行效果
请求第1页数据, 传两个参数currentPage=1&pageCount=10, 然后PageBean返回time
请求第2页数据, 携带这个参数currentPage=2&pageCount=10&captureTime=1558600690102
数据库不断有新数据插入, 导致分页查询数据重复的问题相关推荐
- Mybatis+MySQL动态分页查询数据经典案例
最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...
- Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...
- spring boot集成mybatis-plus——Mybatis Plus 分页查询数据(图解)
Mybatis Plus 分页查询数据(图解) 更新时间 2023-01-01 11:58:32 大家好,我是小哈. 本小节中,我们将学习如何通过 Mybatis Plus 分页查询数据库表中的数据 ...
- oracle 关联出现重复数据,ORACLE 分页查询出现重复记录的解决办法
今天在用Oracle分页查询数据的时候出现了重复数据,有的数据无法查出,很郁闷,想了想,找了资料,发现问题 分页语句: select * from ( select row_.*, rownum ro ...
- react 前端分页查询数据导出excel
react 前端分页查询数据导出excel 前言 一.安装file-saver.xlsx插件 二.创建export.ts文件 三.导出方法 前言 需求:前端实现导出Table中所有数据(不止是当前页面 ...
- java分页显示12345_elasticsearch分页查询数据restful api以及java代码实现
elasticsearch分页查询数据restful api以及java代码实现 restful api实现如下: { "from": 0, "size": 2 ...
- .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑
在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...
- 【MySql】MySQL排序分页查询数据顺序错乱的原因和解决办法
本文目录 一.问题现象 二.问题复现 2.1 表结构 2.2 数据来源 2.3 问题复现 三.问题原因 四.解决方案 4.1 官网推荐的 order by 索引列 4.2 order by 后多添加一 ...
- MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])
MySQL 8--学习笔记03(插入.更新.删除 数据 [DML语句]) 一.插入数据 1.1 插入所有字段.插入部分字段 1.2 同时插入多条记录(批量插入) 1.3 将查询结果插入到表中 二.更新 ...
最新文章
- 【Android 进程保活】oom_adj 值 ( oom_adj 值对应的进程优先级 | oom_adj 值动态改变 | 进程保活优化方向 )
- 我的世界java一键修复_我的世界JAVA 1.14.2最新预览版发布 修复光源BUG
- MySQL中的浮点数类型和定点数类型
- 引起LC.exe exited with code -1的两个场景
- JS Statements var / let / const
- [转载]程序员如何写出杀手级简历
- 开源合规处理方法_经济高效的开源软件许可合规模型
- 并行导致的进程数过大无法连接数据库
- 在lamp上简单部署应用程序
- 解决XCode 11 build error 编译错误 image not found
- linux top命令 什么意思,Linux下的top命令、%cpu和cps(s)到底是什么意思呢!
- TeamViewer 被发现用于(检测为)商业用途解决方案(亲测有效 )
- 查看pcie总线上的设备ID以及带宽计算
- USB3.0:VL817Q7-C0的LAYOUT指南(二)
- 关于hxxp //www hj234 com的问题
- 亚马逊云服务器使用密码登录
- 【引言集】韩愈:师说
- 工厂(Factory)模式
- 正则表达式6___常用的正则表达式
- python字典操作题_python字典练习题