springboot 集成 PageHelper 分页失效

news/2024/7/24 9:31:13 标签: spring boot, 后端, java, mybatis

前言

项目启动初期,在集成mybatis的分页插件,自定义封装了一个分页的工具类,方便后期项目的扩展。部分的代码如下:

java">  /**
     * 分页查询
     * 进行count计算
     *
     * @param pageNum  页数
     * @param pageSize 每页数量
     * @param supplier 查询操作
     * @return
     */
    public static <T> PageInfo<T> pageQueryWithCount(int pageNum, int pageSize, Supplier<List<T>> supplier) {
        if (pageNum < 1) pageNum = getDefaultPageNum();
        if (pageSize < 1) pageSize = getDefaultPageSize();
        try {
            Page<T> page = PageHelper.startPage(pageNum, pageSize, true);
            supplier.get();
            return new PageInfo<T>(page);
        } finally {
            PageHelper.clearPage();
        }
    }

问题

结果懵逼了,无法分页了。怎么设置搞都没办法正常分页,把我脑子搞晕乎了哎呀。

分析
  1. 发现问题
    找了很久,一直不明白为什么会无法进行分页。对PageHelper进行了封装,然后直接调用的工具类的代码。我的代码如下:
java"> PageInfo<SysUserDO> sysUserDOPageInfo = PageUtils.pageQueryWithCount(pageNum, pageSize, () ->
                sysUserDao.get()
        );

        GenericPageRspBO genericPageRspBO = new GenericPageRspBO();
        genericPageRspBO.setTotal(sysUserDOPageInfo.getTotal());
        genericPageRspBO.setResultList(BeanCopyUtils.deepCopyBeanList(sysUserDOPageInfo.getList(), SysUserBO.class));

        return genericPageRspBO;
  1. 分析问题
    为什么会出现这样的问题呢,在网上找了很久,但是没有找到对应的解决方案。因为项目是springboot工程,项目管理方面跟spring是有差异的,就像昨天对ApplicationContextAware做封装一样,需要使用@Component管理bean是一个道理。可能是maven依赖的问题导致的我的分页插件失效了。一开始使用的maven依赖
java">                 <dependency>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper</artifactId>
                    <version>5.1.11</version>
                </dependency>
  1. 解决问题
  • 为了验证我的猜想,我先把代码单独的拎出来打断点跑一下。代码如下:
java">        PageHelper.startPage(1,5);
        List<SysUserDO> sysUserDOS = sysUserDao.get();
        PageInfo<SysUserDO> sysUserDOPageInfo = new PageInfo<>(sysUserDOS);
  • 结果正如所料,打了断点看代码,并没有成功的进行分页。设置了分页参数,但是查询了12条数据。
    在这里插入图片描述
  • 果然,把代码抽出来看一下就知道究竟是我的工具类封装有问题还是分页插件的问题。找到了问题接下来就顺畅很多了。我先替换了maven的依赖,使用springboot工程版本。maven依赖如下:
java">        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.1</version>
        </dependency>
  • 这次打断点一看,分页成功了。
    在这里插入图片描述
总结

做人做到底,送佛送到西。今天踩了一个坑。对PageHelper 分页失效的问题进行一下汇总。

  • PageHelper未正确配置: 请确保你的PageHelper配置在Spring Boot的配置文件中已经生效。你的配置看起来正确,但需要确保配置文件的位置和名称与Spring Boot的要求一致(通常是application.yml或application.properties)。

  • PageHelper版本问题: 有时候,PageHelper的版本与MyBatis或Spring Boot版本不兼容可能导致问题。请确保你正在使用兼容的版本。

  • 注意pom.xml导入的依赖:应该是spring版本的而不是其独立的版本
    在这里插入图片描述

  • SQL查询是否正确: 最后,请确保你的SQL查询在数据库中是有效的,且返回了正确的结果。你可以在数据库中手动运行查询来验证它是否按预期工作。

  • 只有紧跟着PageHelper.startPage()的sql语句才被pagehelper起作用。(注意,经过再次验证,这里不是扯淡,其原理可能是
    “PageHelper.startPage(pageNum,pageSize)”在使用的时候启动了一个线程,致使了其能达到这个效果”)


http://www.niftyadmin.cn/n/5066625.html

相关文章

Python之json的dump和dumps方法

一&#xff0c;dumps 将字典转换为字符串 info_dcit {foo1:a, foo2:b, foo3:c, } data_dumps json.dumps(info_dcit, indent4) print(data_dumps) # data_dumps: <class str>data_dumps: {"foo1": "a","foo2": "b","…

力扣 -- 377. 组合总和 Ⅳ

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int combinationSum4(vector<int>& nums, int target) {int nnums.size();vector<double> dp(target1);//初始化dp[0]1;//填表for(int i1;i<target;i){for(int j0;j<n;j){//填表if(…

云原生定义整理

云原生定义整理 Pivotal 是云原生应用的提出者&#xff0c;并推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架&#xff0c;成为云原生应用架构中先驱者和探路者。 Pivotal最初的定义 Pivotal公司的Matt Stine在2015年写了一本叫做<<迁移到云…

接口自动化中如何完成接口加密与解密?

加密是一种限制对网络上传输数据的访问权的技术。将密文还原为原始明文的过程称为解密&#xff0c;它是加密的反向处理。在接口开发中使用加密、解密技术&#xff0c;可以防止机密数据被泄露或篡改。在接口自动化测试过程中&#xff0c;如果要验证加密接口响应值正确性的话&…

计算机网络(文章链接汇总)

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 计算机网络&#xff08;一&#xff09;&#xff1a;概述计算机网络&#xff08;二&#xff09;&#xff1a;物理层计算机网络&#xff08;三&#xff09;&#xff1a;数据链路层计算机网…

Django的模版使用(Django-03)

一 模版的使用 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术。它实现了 把前端代码和服务端代码分离 的作用&#xff0c;让项目中的业务逻辑代码和数据表现代码分离&#xff0c;让前端开发者和服务端开发者可以更好的完成协同开发。 静态网页&…

两种新建CAA项目快捷启动方式

文章目录 一、前言二、新建项目快捷启动方式&#xff08;相当于直接Cnext进入&#xff09;方式一&#xff1a;按下面图示操作&#xff08;以V5 R21为例&#xff09;方式二&#xff1a;按下面图示操作&#xff08;以V5 R18为例&#xff09; 一、前言 环境变量配置文件可存放路径…

ARM汇编与C言语的混合编程

1. C言语如何与汇编进行交互 有些时候&#xff0c;我们需要在汇编代码中调用C代码&#xff0c;或者说C代码中调用汇编代码。 那么&#xff0c;汇编调用C代码&#xff0c;或者C代码调用汇编函数&#xff0c;他们的函数参数、返回值是如何传递的&#xff1f; 对应ARM架构来说&…