分页查询重复数据问题:第一页最后一条与第二页第一条相同 - 解决方法
分页查询重复数据问题:第一页最后一条与第二页第一条相同 - 解决方法
在分页查询中,你可能会遇到第一页的最后一条数据和第二页的第一条数据相同的问题。这通常是由于在获取第一页数据时,没有将最后一条数据的 createBy 添加到过滤条件中,导致在获取第二页数据时,依然会包含第一页最后一条数据的 createBy。
问题分析
你的代码中,在获取第一页数据时,你遍历了 list 列表,并将满足条件的 createBy 添加到 createBys 列表中。但是,在遍历过程中,你只添加了满足 query 条件的 createBy,并没有将最后一条数据的 createBy 添加到 createBys 列表中。
在获取第二页数据时,你将 createBys 列表作为过滤条件,因此第一页最后一条数据的 createBy 仍然在过滤条件中,导致它出现在第二页数据中。
解决方法
为了解决这个问题,你需要在获取第一页数据时,将最后一条数据的 createBy 添加到 createBys 列表中。
以下是如何修改代码:
List<String> createBys=new ArrayList<>();
String query=queryData.getParams().get('query');
//在任务中显示任务执行人与候选用户
for(int i=0; i<list.size(); i++){
BpmTask task = list.get(i);
Set<TaskExecutor> executors=bpmTaskUserService.getTaskExecutors(task);
instIds.add( task.getInstId());
task.setTaskExecutors(executors);
JPaasUser userById = userClient.getUserById(task.getCreateBy());
if (BeanUtil.isNotEmpty(userById)&&BeanUtil.isNotEmpty(query)&&BeanUtil.isNotEmpty(userById.getFullName())&&userById.getFullName().contains(query)){
createBys.add(task.getCreateBy());
}
// 判断是否是最后一条数据
if (i == list.size() - 1) {
createBys.add(task.getCreateBy());
}
}
通过在 for 循环中添加判断,当 i 等于 list.size() - 1 时,即为最后一条数据,将 task.getCreateBy() 添加到 createBys 列表中,就能确保第一页的最后一条数据不会出现在第二页中。
总结
通过对代码的细致分析,并添加必要的判断逻辑,我们可以有效地解决分页查询中重复数据的问题,确保数据的完整性和一致性。
原文地址: https://www.cveoy.top/t/topic/l3oP 著作权归作者所有。请勿转载和采集!