记录一个关于分页查询的bug,手动对其进行分页查询与可以用PageHelper自动分页

问题:使用package com.github.pagehelper.page;框架的分页查询接口后,出现查询结果少于分页size,一直都只有4个数据。后来发现其原理是对第一个mapper的sql语句起到分页操作,所以,如果是在mapper中是一对多的查询,再组合的方法,则查询的结果会少于组合后的数据。

例如:

这就是所谓的10条数据,但我是一对多,所以会把id相同的组合在一起,所以应该是只有4条数据出来。 

 于是便造成了数据错误的现象,所以目前只能手动分组处理。

            TableDataInfo rspData = new TableDataInfo();

            TmTaskDetail tmTaskDetail = new TmTaskDetail();
            tmTaskDetail.setProblemId(String.valueOf(documentId));
            tmTaskDetail.setRuleType("11");
            list =evidenceDocumentService.queryTask(tmTaskDetail);

            Integer size = list.size();
            List<TmTaskDetail> result = list.stream().skip((long)pageSize * (pageNum - 1))
                    .limit(pageSize)
                    .collect(Collectors.toList());

            rspData.setCode(HttpStatus.SUCCESS);
            rspData.setRows(result);
            rspData.setMsg("查询成功");
            rspData.setTotal(size);
            return rspData;

 查询出全部,在截取区间的数据展示。

自动分页

/**
     * 查询实证模板
     * @param templateNameDescription
     * @return
     */
    @GetMapping("/select")
    public TableDataInfo select(@RequestParam(value = "templateNameDescription", required = false ) String templateNameDescription,
                                @RequestParam(value = "pageNum", required = false, defaultValue = "1")Integer pageNum,
                                @RequestParam(value = "pageSize", required = false, defaultValue = "10")Integer pageSize){
        try {
            TableDataInfo rspData = new TableDataInfo();
            PageHelper.startPage(pageNum,pageSize);
            ICEvidenceDocumentTemplateQueryDTO icEvidenceDocumentTemplateQueryDTO = new ICEvidenceDocumentTemplateQueryDTO();
            icEvidenceDocumentTemplateQueryDTO.setTemplateNameDescription(templateNameDescription);
            List<ICEvidenceDocumentTemplate> icEvidenceDocumentTemplates = icEvidenceDocumentTemplateService.query(icEvidenceDocumentTemplateQueryDTO);
            rspData.setTotal((new PageInfo(icEvidenceDocumentTemplates)).getTotal());
            rspData.setRows(icEvidenceDocumentTemplates);
            rspData.setMsg("分页成功!");
            rspData.setCode(HttpStatus.SUCCESS);
            return rspData;
        }catch (Exception e){
            e.printStackTrace();
            TableDataInfo rspData = new TableDataInfo();
            rspData.setCode(HttpStatus.ERROR);
            rspData.setMsg("分页失败!");
            rspData.setTotal(0);
            return rspData;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值