参考:
https://blog.csdn.net/desongzhang/article/details/124941189
参考之后 自己遇到的坑+解决办法
一、问题描述
分页时,同时在数据库中添加数据,导致第n页和第n+1页有部分数据重复(重复条数和查询分页时的添加的数据量有关)
二、解决办法
分页的过程中,插入了一条记录,导致再查询下一页的时候,查出来上一页的记录,那么,我思考,我可不可以不去查询他新增的这一条记录。那么这样,就查询不到别人新增的这条记录了。
那么需要的条件就出来了: 数据库表要有创建时间的这么一个字段|实际项目时,根据业务需求的所用的排序条件。如:order by create_time desc
那么解决思路就出来了,首先是要前端进行配合。那么其解决思路为:
1、分页接口中新增接收参数:排序条件的上一页最后一条记录的值。如:上一页最后一条记录的创建时间:lastRecordCreateTime ,
2、分页接口的实现方法中新增第一步中的条件。如:where create_time> lastRecordCreateTime
3、 网页端或客户端访问分页接口时,将排序条件的上一页最后一条记录的值传到分页接口中。第一页时,“排序条件的上一页最后一条记录的值”如:lastRecordCreateTime 可不传。后端使用该参数时,需要判断null.
坑1:完成上述工作后,分页不会出现相同数据,但第二页及其往后的数据查询出来 不是正常的分页数据,而是在 前端传的分页参数(where create_time> lastRecordCreateTime)条件下的第N页,所以,
n+1页时:需要后端设置当前页码为1
//分页时,参数有上一页的时间参数查询条件时,需要将页码设置为第一页
if (request.getPageIndex() > 1 && StringUtils.isNotEmpty(request.getCreateDate())){
request.setPageIndex(1);
}