【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;
}
相关推荐
神明不懂浪漫6 小时前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
码兄科技14 小时前
实战:基于Spring Boot + UniApp的地理信息小程序开发
spring boot·后端·uni-app
腾讯云云开发15 小时前
腾讯云 CloudBase 登上 WAIC:我们为 Agent 重新设计了云的生产线
后端
Jelena1577958579215 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
星栈15 小时前
从装一堆工具到看懂 Node 工程化思维:我的项目复盘记录
后端·node.js
65岁退休Coder16 小时前
LangChain v1.3.4 笔记 - 05 Agent 上下文记忆
后端
颜酱16 小时前
04 | 召回前置准备:搭好召回所需的四个数据库
前端·人工智能·后端
JaneConan16 小时前
鸿蒙 韶非 UI 系列:能力调用 startAbilityForResult,跳能力拿回参,鸿蒙能力路由入门
后端·harmonyos
晴空了无痕16 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
用户83562907805116 小时前
如何使用 Python 在 Excel 中添加、编辑和删除超链接
后端·python