SpringBoot+Mybatis+PageHelper分页(踩坑-total,pages总数有误)

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个多小时。记录一下,望广大友军勿采坑

转载于:https://my.oschina.net/u/3647421/blog/3005199

你可能感兴趣的:(SpringBoot+Mybatis+PageHelper分页(踩坑-total,pages总数有误))