编程语言
首页 > 编程语言> > 使用java进行List分页查询

使用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