MyBatis中PageHelper不生效的解决方案

 更新时间:2021年06月17日 11:53:06   作者:格子间里格子衫  
这篇文章主要介绍了MyBatis中PageHelper不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MyBatis中PageHelper不生效

今天使用pageHelper,发现设置了PageHelper.startPage(page, pageSize);pageSize设置为10,但是结果并没有分页,查处了全部的数据;

问题解决:

原因是mybatis的依赖版本问题,之前配置的是1.0.0版本,这个版本不支持分页拦截

<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>1.0.0</version>
</dependency>

所以修改成1.1.1版本解决问题

<!-- mybatis -->
<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>1.1.1</version>
 </dependency>
 <!-- 分页插件 -->
<dependency>
 <groupId>com.github.pagehelper</groupId>
 <artifactId>pagehelper</artifactId>
 <version>4.1.6</version>
</dependency>

MyBatis PageHelper手动设置pages属性不生效

环境: springboot+mybatis, 其中使用了pagehelp插件

依赖如下:

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

问题描述:

手动构建Page对象, 设置的pages属性不生效, 例如设置值为3, 获取的时候依然是0;

原因:

构造的Page对象没有设置pageSize属性. 调用page对象的setTotal()方法时, 该方法内部根据pageSize属性重置了pages属性的值.

Page对象的setTotal方法源码如下:

public void setTotal(long total) {
        this.total = total;
        if (total == -1) {
            pages = 1;
            return;
        }
        // 如果pageSize<=0, 则直接设置pages=0; pageSize默认为0
        if (pageSize > 0) {
            pages = (int) (total / pageSize + ((total % pageSize == 0) ? 0 : 1));
        } else {
            pages = 0;
        }
        //分页合理化,针对不合理的页码自动处理
        if ((reasonable != null && reasonable) && pageNum > pages) {
            pageNum = pages;
            calculateStartAndEndRow();
        }
    }

手动构造Page对象代码如下:

// 返回值page对象
Page<StudyRecordVo> pageResult = new Page<>();
// 不设置pageSize,setPages方法调用无效, setTotal方法覆盖了pageResult的pages属性
// 解决方案: 1. 设置pageSize属性在调用setTotal方法之前; 2. setTotal方法调用之后在设置pages属性
pageResult.setPageSize(pageDto.getPageSize());
pageResult.setPages(totalPages);
pageResult.setTotal(totalElements);
pageResult.addAll(studyRecordVoList);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java Web中常用的分页组件(Java端实现)

    Java Web中常用的分页组件(Java端实现)

    本文通过使用场景分析给大家介绍了Java Web中常用的分页组件(Java端实现),非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-05-05
  • Nacos源码阅读方法

    Nacos源码阅读方法

    这篇文章将会带大家阅读Nacos源码以及教大家阅读源码的技巧,感兴趣的朋友跟随小编一起看看Nacos源码阅读方法
    2022-03-03
  • spring-boot-autoconfigure模块用法详解

    spring-boot-autoconfigure模块用法详解

    autoconfigure就是自动配置的意思,spring-boot通过spring-boot-autoconfigure体现了"约定优于配置"这一设计原则,而spring-boot-autoconfigure主要用到了spring.factories和几个常用的注解条件来实现自动配置,思路很清晰也很简单,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • 详解SpringMVC中的四种跳转方式、视图解析器问题

    详解SpringMVC中的四种跳转方式、视图解析器问题

    这篇文章主要介绍了SpringMVC的四种跳转方式、视图解析器,springmvc核心配置文件和视图解析器的使用,添加视图解析器,通过案例讲解四种跳转方式,需要的朋友可以参考下
    2022-10-10
  • java基于quasar实现协程池的方法示例

    java基于quasar实现协程池的方法示例

    本文主要介绍了java基于quasar实现协程池的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-06-06
  • java一个接口多个实现类的调用方式

    java一个接口多个实现类的调用方式

    这篇文章主要给大家介绍了关于java一个接口多个实现类的调用方式的相关资料,经测试确认,当一个接口有多个实现时,调用时只会执行一个,有时候需要多个实现调用,需要的朋友可以参考下
    2023-09-09
  • 详解Springboot 注入装配到IOC容器方式

    详解Springboot 注入装配到IOC容器方式

    今天通过实例代码给大家介绍了Springboot 注入装配到IOC容器方式,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,感兴趣的朋友跟随小编一起看看吧
    2021-10-10
  • Java的IO模型、Netty原理解析

    Java的IO模型、Netty原理解析

    Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇文章主要介绍了Java的IO模型、Netty原理详解,需要的朋友可以参考下
    2025-03-03
  • Java读写txt文件时防止中文乱码问题出现的方法介绍

    Java读写txt文件时防止中文乱码问题出现的方法介绍

    这篇文章主要介绍了Java读写txt文件时防止中文乱码问题出现的方法,同时需要注意系统默认的文本保存编码的设置,需要的朋友可以参考下
    2015-12-12
  • Java实现用位运算维护状态码

    Java实现用位运算维护状态码

    位运算是一种非常高效的运算方式,在算法考察中比较常见,那么业务代码中我们如何使用位运算呢,感兴趣的小伙伴快跟随小编一起学习一下吧
    2024-03-03

最新评论