使用java进行List分页查询
作者:互联网
学习大佬博客:https://blog.csdn.net/as875784622/article/details/81031470,这篇博客非常好,强推
前提
后台的首页公告,一个首页公告可以发布好几个城市,按理来说,存一个首页公告时有一个字段要存下所有的发布城市,那么这个首页公告就在数据库里只有一条记录就行了,但是实际上存的是一个城市一条记录,那么就是比如说我一个首页公告发布了2个城市,那么现在存库的时候库里就有两条记录,除了发布城市的cityCode码不同外,其他首页公告的属性信息比如说名称,跳转链接和是否生效以及公告图片都相同,但是实际在分页查询的时候是一个首页公告名称只显示一条记录,那些多个的发布城市已经被一个字段给代替了
数据库里的存储
原型
思路
先根据条件从数据库里查出所有的满足条件的记录,再进行java级别的分页显示
代码
/**
* 后台分页查询
*
* @param noticeQuery 首页公告查询
* @return 结果集
*/
@PostMapping("/listByNotices")
public CommonRes<PageModel<List<NoticeQueryPageVo>>> listByNotices(
@RequestHeader("X-Token") String token,
@RequestBody NoticeQuery noticeQuery) throws Exception {
logger.info("[首页公告] 首页公告入参为{}", noticeQuery.toString());
// 分页参数初始化
initDefaultPageParameter(noticeQuery);
PageModel<List<NoticeQueryPageVo>> noticeQueryPageVoPageModel = new PageModel<>();
try {
//满足条件的所有数据
List<NoticeDTO> list = noticeService.listByNotice(noticeQuery);
logger.info("首页公告数据库查询结果出参为{}", JsonUtil.toJson(list));
List<NoticeQueryPageVo> noticeQueryPageVos = new ArrayList<>();
if (list.size() <= 0) {
noticeQueryPageVoPageModel.setCount(0);
noticeQueryPageVoPageModel.setBody(noticeQueryPageVos);
noticeQueryPageVoPageModel.setPageSize(noticeQuery.getPageSize());
noticeQueryPageVoPageModel.setCurrentPage(noticeQuery.getCurrentPage());
return CommonRes.success(noticeQueryPageVoPageModel);
}
List<String> collect = list.stream().filter((listDo) -> {
return StringUtils.hasText(listDo.getTitle());
}).distinct().map(listDo -> {
return listDo.getTitle().trim();
}).distinct().collect(Collectors.toList());
logger.info("去重的首页公告名称出参为{}", JsonUtil.toJson(collect));
for (String s : collect) {
List<Integer> cityCode = new ArrayList<>();
NoticeQueryPageVo noticeQueryPageVo = new NoticeQueryPageVo();
for (NoticeDTO dto : list) {
if (s.trim().equals(dto.getTitle().trim())) {
cityCode.add(dto.getCityCode());
BeanUtils.copyProperties(dto, noticeQueryPageVo);
}
}
cityCode = cityCode.stream().distinct().collect(Collectors.toList());
noticeQueryPageVo.setCityCode(cityCode);
noticeQueryPageVos.add(noticeQueryPageVo);
}
logger.info("满足首页公告查询的最终数据为{}", JsonUtil.toJson(noticeQueryPageVos));
int count = noticeQueryPageVos.size();
int totalPage = count % noticeQuery.getPageSize(); // 一共多少页
if (totalPage > 0) {
totalPage = count / noticeQuery.getPageSize() + 1;
} else {
totalPage = count / noticeQuery.getPageSize();
}
Integer currentPage = totalPage > noticeQuery.getCurrentPage() ? noticeQuery.getCurrentPage() : totalPage;
int fromIndex = (currentPage - 1) * noticeQuery.getPageSize();
int toIndex = currentPage * noticeQuery.getPageSize() > count ? count : currentPage * noticeQuery.getPageSize();
noticeQueryPageVos = noticeQueryPageVos.subList(fromIndex, toIndex);
noticeQueryPageVoPageModel.setCount(count);
noticeQueryPageVoPageModel.setBody(noticeQueryPageVos);
noticeQueryPageVoPageModel.setPageSize(noticeQuery.getPageSize());
noticeQueryPageVoPageModel.setCurrentPage(noticeQuery.getCurrentPage());
logger.info("首页公告分页查询出参为,result:{}", JsonUtil.toJson(noticeQueryPageVoPageModel));
} catch (Exception e) {
logger.error("[首页公告] 分页查询 error:{}", e.getMessage());
}
return CommonRes.success(noticeQueryPageVoPageModel);
}
标签:count,getPageSize,noticeQuery,java,分页,公告,List,noticeQueryPageVos,首页 来源: https://blog.csdn.net/qq_43318174/article/details/114041663