现在有个场景,页面需要分页处理,但是后端在查询完数据库后又会进行筛选,就会导致后端的查询数目跟请求的每页条数是不一样。
解决方案:内存分页法
在内存筛选后手动实现分页逻辑,保证返回数量与请求的 pageSize
一致:
@Override
public JSONObject checkByLabelType(XXXDTO req) {
JSONObject jsonObject = new JSONObject();
// 1. 执行原有查询和筛选逻辑(得到全部已筛选数据)
List<XXXVO> filteredList = getFullFilteredList(req);
// 2. 手动分页处理
int pageNum = req.getPageNum() != null ? req.getPageNum() : 1;
int pageSize = req.getPageSize() != null ? req.getPageSize() : 10;
int start = (pageNum - 1) * pageSize;
// 3. 边界检查
if (start >= filteredList.size()) {
return Collections.emptyList();
}
int end = Math.min(start + pageSize, filteredList.size());
// 4. 返回分页后的子列表
List<XXXVO> pageList = filteredList.subList(start, end);
jsonObject.put("total", filteredList.size());
jsonObject.put("rows", pageList);
return jsonObject;
}
private List<XXXVO> getFullFilteredList(XXXDTO req) {
// 这里放入原有的全部筛选逻辑(包括设备过滤、标签过滤、时间排序等)
// 返回的是完成所有内存筛选后的完整列表
}
方案 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
内存分页 | 实现简单,数据精准 | 内存压力大 | 数据量小 (<1000条) |