1、如何集成插件
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.2
2、application-dev.properties配置信息(pageHelper使用默认配置,不写也OK 的)
###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
3、看代码,这个代码是错误的,total,pages跟实际数据库数据不一致。pages=1,total=1,并且该值永远等于查询页的记录数, 即getTotal和getSize()效果相同. 读者若自行查看SQL日志, 可发现startPage()方法成功执行, 返回的List是符合查询条件的.啥原因呢?
网上有说1.2.0版本有问题,也有人说查出来的list,不能进行操作,否则会引起total根实际数据不一致的情况,如下我对查出来的list把领域E转成DTO了等等说法。
public ResponseMessage> getDocTemplateList(DocTemplateDTO docTemplateDTO,Integer currentPage,Integer pageSize) {
ResponseMessage> resp = new ResponseMessage<>();
PagePing p=new PagePing<>();
try {
PageHelper.startPage(currentPage,pageSize);
DocTemplateE docTemplateE = this.docTemplateDomainFactory.convert(docTemplateDTO);
List list = docTemplateE.findList(docTemplateE);
if (CollectionUtils.isNotEmpty(list)) {
PageInfo pageInfo = new PageInfo<>(docTemplateConverter.dataToDTO(list));
// 转换成自己的分页信息
PageBean 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;
}
4、解决方法,对比如上。在设置Page page = (Page) PageHelper.startPage(currentPage,pageSize); 获取page数据。因为PageInfo里面 的page信息,都是对于查询结果进行分页的。
public ResponseMessage> getDocTemplateList(DocTemplateDTO docTemplateDTO,Integer currentPage,Integer pageSize) {
ResponseMessage> resp = new ResponseMessage<>();
PagePing p=new PagePing<>();
try {
Page page = (Page) PageHelper.startPage(currentPage,pageSize);
DocTemplateE docTemplateE = this.docTemplateDomainFactory.convert(docTemplateDTO);
List list = docTemplateE.findList(docTemplateE);
if (CollectionUtils.isNotEmpty(list)) {
PageInfo pageInfo = new PageInfo<>(docTemplateConverter.dataToDTO(list));
// 转换成自己的分页信息
PageBean 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个多小时。记录一下,望广大友军勿采坑