问题描述

首先, 查询数据时是按照数据的录入时间分页查询的, 最新的数据一直是第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

数据库不断有新数据插入, 导致分页查询数据重复的问题相关推荐

  1. Mybatis+MySQL动态分页查询数据经典案例

    最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...

  2. Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)

    最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...

  3. spring boot集成mybatis-plus——Mybatis Plus 分页查询数据(图解)

    Mybatis Plus 分页查询数据(图解)  更新时间 2023-01-01 11:58:32 大家好,我是小哈. 本小节中,我们将学习如何通过 Mybatis Plus 分页查询数据库表中的数据 ...

  4. oracle 关联出现重复数据,ORACLE 分页查询出现重复记录的解决办法

    今天在用Oracle分页查询数据的时候出现了重复数据,有的数据无法查出,很郁闷,想了想,找了资料,发现问题 分页语句: select * from ( select row_.*, rownum ro ...

  5. react 前端分页查询数据导出excel

    react 前端分页查询数据导出excel 前言 一.安装file-saver.xlsx插件 二.创建export.ts文件 三.导出方法 前言 需求:前端实现导出Table中所有数据(不止是当前页面 ...

  6. java分页显示12345_elasticsearch分页查询数据restful api以及java代码实现

    elasticsearch分页查询数据restful api以及java代码实现 restful api实现如下: { "from": 0, "size": 2 ...

  7. .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑

    在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...

  8. 【MySql】MySQL排序分页查询数据顺序错乱的原因和解决办法

    本文目录 一.问题现象 二.问题复现 2.1 表结构 2.2 数据来源 2.3 问题复现 三.问题原因 四.解决方案 4.1 官网推荐的 order by 索引列 4.2 order by 后多添加一 ...

  9. MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])

    MySQL 8--学习笔记03(插入.更新.删除 数据 [DML语句]) 一.插入数据 1.1 插入所有字段.插入部分字段 1.2 同时插入多条记录(批量插入) 1.3 将查询结果插入到表中 二.更新 ...

最新文章

  1. 【Android 进程保活】oom_adj 值 ( oom_adj 值对应的进程优先级 | oom_adj 值动态改变 | 进程保活优化方向 )
  2. 我的世界java一键修复_我的世界JAVA 1.14.2最新预览版发布 修复光源BUG
  3. MySQL中的浮点数类型和定点数类型
  4. 引起LC.exe exited with code -1的两个场景
  5. JS Statements var / let / const
  6. [转载]程序员如何写出杀手级简历
  7. 开源合规处理方法_经济高效的开源软件许可合规模型
  8. 并行导致的进程数过大无法连接数据库
  9. 在lamp上简单部署应用程序
  10. 解决XCode 11 build error 编译错误 image not found
  11. linux top命令 什么意思,Linux下的top命令、%cpu和cps(s)到底是什么意思呢!
  12. TeamViewer 被发现用于(检测为)商业用途解决方案(亲测有效 )
  13. 查看pcie总线上的设备ID以及带宽计算
  14. USB3.0:VL817Q7-C0的LAYOUT指南(二)
  15. 关于hxxp //www hj234 com的问题
  16. 亚马逊云服务器使用密码登录
  17. 【引言集】韩愈:师说
  18. 工厂(Factory)模式
  19. 正则表达式6___常用的正则表达式
  20. python字典操作题_python字典练习题

热门文章

  1. Python爬虫入门——爬取贴吧图片
  2. 武大计算机保研北大,17名北大毕业生保研到武大?网友说亏大了,其实这些学生赚大了!...
  3. CentOS系统利用Gitolite搭建私有Git服务器
  4. 2017最新PHP面试题
  5. iOS 在地图上绘制出你运动的轨迹
  6. excel取html文本长度,excel字符长度 怎么计算excel里的字符串的长度
  7. [ZJCTF 2019]NiZhuanSiWei
  8. LED照明灯具与传感器技术
  9. Python unittest 之二: 测试类的执行
  10. 在QT中使用MySQL数据库