jpa获取所有数据进行分页展示
最近在做项目总会遇到分页查询排序问题,最好的方法就是先获取全部数据进行排序然后在进行分页,方法如下:
按照条件查询获取所有数据
//获取所有点位信息
List<CameraInfoEntity> page = cameraInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> list = new ArrayList<Predicate>();
if (!StringUtils.isEmpty(paramVo.getOrgIndexCode())) {
List<String> childOrgIndexCodes = new ArrayList<>();
childOrgIndexCodes = getChildOrgIndexCodes(childOrgIndexCodes, paramVo.getOrgIndexCode(),
regionListDTOList);
childOrgIndexCodes.add(paramVo.getOrgIndexCode());
Expression<String> exp = root.get("regionIndexCode").as(String.class);
list.add(exp.in(childOrgIndexCodes));
}
if (!StringUtils.isEmpty(paramVo.getCameraIndexCode())) {
list.add(criteriaBuilder.like(root.get("cameraIndexCode"),
"%" + addStringEscpae(paramVo.getCameraIndexCode()) + "%", '/'));
}
if (!StringUtils.isEmpty(paramVo.getCameraName())) {
list.add(criteriaBuilder.like(root.get("cameraName"),
"%" + addStringEscpae(paramVo.getCameraName()) + "%", '/'));
}
if (!StringUtils.isEmpty(paramVo.getCameraIP())) {
list.add(criteriaBuilder.like(root.get("cameraIP"), "%" + paramVo.getCameraIP() + "%"));
}
Predicate[] ps = new Predicate[list.size()];
return criteriaBuilder.and(list.toArray(ps));
});
//点位静态数据统计信息,按照异常次数进行排序,从大到小进行排序
cameraStatisticInfoList.sort(Comparator.comparing(CameraStatisticInfoVo::getAbnormalTimes).reversed());
}
分页
//分页
long total = cameraStatisticInfoList.size();
//获取所有数据进行分页
if (total > paramVo.getPageSize()) {
long toIndex = paramVo.getPageSize() * paramVo.getPageNo();
if (toIndex > total) {
toIndex = total;
}
cameraStatisticInfoList = cameraStatisticInfoList.subList(paramVo.getPageSize() * (paramVo.getPageNo() - 1), (int) toIndex);