【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;
}
相关推荐
来杯@Java7 分钟前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
ltl28 分钟前
推理退化:为什么大模型会输出乱码、死循环和无意义文本
后端
ltl36 分钟前
架构视图与文档:C4 模型从入门到实战
后端
invicinble1 小时前
easyexcel开发全域理解
spring boot
不知名的老吴1 小时前
线程的生命周期之线程“插队“
java·开发语言·python
ANnianStriver1 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
杨了个杨89822 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
IT_陈寒3 小时前
Redis持久化这个坑,我爬了一整天才出来
前端·人工智能·后端
无风听海3 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
小小前端仔LC4 小时前
Node.js + LangChain + React:搭建个人知识库(六)- “吃什么”项目实战:从700+菜谱入库到Taro H5端JSON渲染
前端·后端