【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;
}
相关推荐
Wang's Blog8 小时前
Java 接入Redis: 服务启动停止与后台运行配置
java·服务器·redis
此时不提桶,更待何时8 小时前
01-04-B-垃圾回收面试与生产事故实战
java·jvm·面试
GreenTea9 小时前
GrokBot 核心成员 Lauren Tan:每月交付 2000 个 PR 的人,是怎么用 AI 的
前端·后端·架构
码事漫谈9 小时前
FDE:一个缩写,两种命运
后端
名字还没想好☜10 小时前
Go context.AfterFunc 实战(Go 1.21):context 一取消就自动跑清理,告别手写 goroutine 监听 Done
后端·golang·go
鹿角片ljp10 小时前
KV Cache 解析
java·算法
captain37610 小时前
网络原理(9)-数据链路层
java·网络协议·java-ee
惊讶的猫11 小时前
意图识别置信度和检索重排的分数
java
明月_清风11 小时前
为什么最近开始关注 JEV?几个实战案例告诉你答案
人工智能·后端