文章目录
问题描述
实体对象查询完成后转为Vo对象,出现返回的分页参数中total数据是实际返回数据条数,而不是分页的总数
解决方案
建立一个ThreadLocal存储正确的total数据
java
import com.github.pagehelper.PageHelper;
import com.platform.common.core.page.PageDomain;
import com.platform.common.core.page.TableSupport;
import com.platform.common.utils.sql.SqlUtil;
/**
* 分页工具类
*/
public class PageUtils extends PageHelper {
// pageHelper失效时使用
public static final ThreadLocal<Long> PAGE_TOTAL = new ThreadLocal<>();
/**
* 设置请求分页数据
*/
public static void startPage() {
PAGE_TOTAL.remove();
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
Boolean reasonable = pageDomain.getReasonable();
PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
}
/**
* 清理分页的线程变量
*/
public static void clearPage() {;
PAGE_TOTAL.remove();
PageHelper.clearPage();
}
/**
* 设置页面总计
*/
public static void setPageTotal(Object mybatisObj) {
com.github.pagehelper.Page pageObj = (com.github.pagehelper.Page) mybatisObj;
PAGE_TOTAL.set(pageObj.getTotal());
}
}
封装对象
java
// 示例Ruoyi中的封装对象
protected TableDataInfo getDataTable(List<?> list)
{
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
rspData.setRows(list);
// 此处判断是否存在手动设置的PAGE_TOTAL
Long total = PageUtils.PAGE_TOTAL.get();
if(ObjectUtils.isEmpty(total)){
rspData.setTotal(new PageInfo(list).getTotal());
}else{
rspData.setTotal(total);
}
return rspData;
}