一、如何集成插件java
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.2</version> </dependency>
二、application-dev.properties配置信息(pageHelper使用默认配置,不写也OK 的)mysql
###pagehelper### pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true pagehelper.params=pageNum=punt=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero pagehelper.row-bounds-with-count=false
三、看代码,这个代码是错误的,total,pages跟实际数据库数据不一致。pages=1,total=1,而且该值永远等于查询页的记录数, 即getTotal和getSize()效果相同. 读者若自行查看SQL日志, 可发现startPage()方法成功执行, 返回的List是符合查询条件的.啥缘由呢?git
网上有说1.2.0版本有问题,也有人说查出来的list,不能进行操做,不然会引发total根实际数据不一致的状况,以下我对查出来的list把领域E转成DTO了等等说法。github
public ResponseMessage<PagePing<DocTemplateDTO>> getDocTemplateList(DocTemplateDTO docTemplateDTO,Integer currentPage,Integer pageSize) { ResponseMessage<PagePing<DocTemplateDTO>> resp = new ResponseMessage<>(); PagePing<DocTemplateDTO> p=new PagePing<>(); try { PageHelper.startPage(currentPage,pageSize); DocTemplateE docTemplateE = this.docTemplateDomainFactory.convert(docTemplateDTO); List<DocTemplateE> list = docTemplateE.findList(docTemplateE); if (CollectionUtils.isNotEmpty(list)) { PageInfo<DocTemplateDTO> pageInfo = new PageInfo<>(docTemplateConverter.dataToDTO(list)); // 转换成本身的分页信息 PageBean<DocTemplateDTO> pb=new PageBean<>(); pb.setCurrentPage(pageInfo .getPageNum()); pb.setPageSize(pageInfo .getPageSize()); pb.setPageCount(pageInfo .getPages()); pb.setTotalData(pageInfo .getTotal()); p.setDataList(pageInfo .getList()); p.setPage(pb); ResponseUtil.setResult(resp, p, ErrorCodeEnum.SUCCESS, true); } else { ResponseUtil.setResult(resp,null, ErrorCodeEnum.NORECORD,false); } } catch (Exception e) { logger.error("查询单证模板失败", e); ResponseUtil.setResult(resp,null, ErrorCodeEnum.ERROR,false); } return resp; }
四、解决方法,对好比上。在设置Page page = (Page) PageHelper.startPage(currentPage,pageSize); 获取page数据。由于PageInfo里面 的page信息,都是对于查询结果进行分页的。spring
public ResponseMessage<PagePing<DocTemplateDTO>> getDocTemplateList(DocTemplateDTO docTemplateDTO,Integer currentPage,Integer pageSize) { ResponseMessage<PagePing<DocTemplateDTO>> resp = new ResponseMessage<>(); PagePing<DocTemplateDTO> p=new PagePing<>(); try { Page page = (Page) PageHelper.startPage(currentPage,pageSize); DocTemplateE docTemplateE = this.docTemplateDomainFactory.convert(docTemplateDTO); List<DocTemplateE> list = docTemplateE.findList(docTemplateE); if (CollectionUtils.isNotEmpty(list)) { PageInfo<DocTemplateDTO> pageInfo = new PageInfo<>(docTemplateConverter.dataToDTO(list)); // 转换成本身的分页信息 PageBean<DocTemplateDTO> pb=new PageBean<>(); pb.setCurrentPage(page.getPageNum()); pb.setPageSize(page.getPageSize()); pb.setPageCount(page.getPages()); pb.setTotalData(page.getTotal()); p.setDataList(pageInfo.getList()); p.setPage(pb); ResponseUtil.setResult(resp, p, ErrorCodeEnum.SUCCESS, true); } else { ResponseUtil.setResult(resp,null, ErrorCodeEnum.NORECORD,false); } } catch (Exception e) { logger.error("查询单证模板失败", e); ResponseUtil.setResult(resp,null, ErrorCodeEnum.ERROR,false); } return resp; }
如上。问题坑了2个多小时。记录一下,望广大友军勿采坑sql