【Springboot】解决PageHelper在实体转Vo下出现total数据问题

文章目录

问题描述

实体对象查询完成后转为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;
}
相关推荐
该昵称用户已存在9 分钟前
从成本中心到价值引擎:MyEMS 开源系统激活企业能源数据资产
java·后端·struts
隐退山林9 分钟前
JavaEE进阶:SpringBoot配置文件
java·spring boot·java-ee
阿维的博客日记21 分钟前
求解深分页问题,last pk适合什么情况
java·mysql·深分页
舞影天上22 分钟前
Docker Desktop 卡在启动界面?可能是你的 “.wslconfig” 写错了
后端
小gaigagi1 小时前
旺店通·旗舰奇门数据集成到金蝶云星空的技术实现案例
后端
用户607320369451 小时前
Python 入门必备-pip install 常用命令例子大全:从基础安装到国内镜像加速实战
后端
极客先躯1 小时前
高级java每日一道面试题-2025年12月09日-实战篇[Docker]-如何配置 Docker 的日志驱动?有哪些日志驱动可选?
java·docker·日志驱动的作用与配置层级·日志驱动全览与对比·日志驱动配置的要点·日志标签定制·容器与宿主机时间戳
小小小前端啊1 小时前
前端网络知识指南
后端
rabbit_pro2 小时前
Spring AI使用Ollama
java·人工智能·spring