内存分页法
现在有个场景,页面需要分页处理,但是后端在查询完数据库后又会进行筛选,就会导致后端的查询数目跟请求的每页条数是不一样。
解决方案:内存分页法
在内存筛选后手动实现分页逻辑,保证返回数量与请求的 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条) |