如何正确使用PageHelper进行分页?

一、PageHelper简介

PageHelper是 Mybatis 著名开发者的开源工具包,用于对分页进行优化,PageHelper 在 Sql 执行过程中拦截 Sql 语句后自动进行分页,将分页语句封装成了 Page 对象,并且完整支持多种方言,例如 Oracle、MySQL、PostgreSQL 等。

使用 PageHelper 可以让我们不必关心复杂的分页逻辑,只需要在配置文件中指定分页参数即可,非常方便。

二、PageHelper入门使用

在使用 PageHelper 之前,需要先在 pom.xml 中引入相关依赖。

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>最新版本</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>最新版本</version>
</dependency>

在 SpringBoot 项目中,可以在 application.properties 文件中配置分页插件:

# 开启分页插件
pagehelper.helper-dialect=mysql
pagehelper.support-methods-arguments=true
pagehelper.reasonable=false
pagehelper.params=count=countSql

PageHelper 常用方法:

/**
 * 将 Page 对象传入查询接口,查询结束后 Page 对象自动填充分页信息
 * @param page 分页对象
 * @param param 查询参数
 * @return 查询结果集
 */
List<T> selectByPage(Page<T> page, Map<String, Object> param);

/**
 * 开始分页。需要紧跟在 select 方法后面,下一句 SQL 语句会被分页。
 * @param pageNum 页码
 * @param pageSize 分页大小
 */
PageHelper.startPage(pageNum, pageSize);

/**
 * 分页结束,释放资源。
 */
PageHelper.clearPage();

使用 PageHelper 进行分页基本流程:

  1. 调用 PageHelper.startPage() 方法,传入页码和分页大小。
  2. 执行查询,返回查询结果。
  3. 调用 PageHelper.stopPage() 方法,释放资源。

三、PageHelper高级使用

1. 多种分页方式

PageHelper 支持两种分页方式:

  1. 物理分页:查询所有数据后进行分页,使用简单。
  2. 逻辑分页:利用数据库本身的 limit 和 offset 等功能分页,查询速度更快。

默认情况下 PageHelper 使用逻辑分页,可以通过以下配置进行设置:

# 物理分页开关。设置为 true 后,所有的分页插件都会失效,变成物理分页。
pagehelper.offset-as-page-num=true
# 设置为 true 后,会将 RowBounds 第一个参数 offset 当成 pageNum 使用,可以用 RowBounds 实现物理分页。
pagehelper.row-bounds-with-count=true
# 默认值为 false,当该参数设置为 true 时,使用 RowBounds 分页时,会进行 count 查询。
pagehelper.row-bounds-with-count=true

2. 分页拦截

PageHelper 支持自定义拦截器进行分页逻辑拓展。继承 Interceptor 接口,重写干预方法,通过反射改写原始 Sql 实现分页功能。

// 定义自定义分页插件的类
public class CustomPageHelper extends PageInterceptor {
    // 重写进制的标签名
    @Override
    public String getLimitString(String sql, String s, int i, int i1) {
        return super.getLimitString(sql, "Tag_SG_limit", (i - 1) * i1, i1);
    }
}

// 配置类
@Configuration
public class MybatisInterceptorConfig {
    @Bean
    public CustomPageHelper pageHelper() {
        CustomPageHelper pageHelper = new CustomPageHelper();
        Properties properties = new Properties();
        properties.setProperty("supportMethodsArguments", "true");
        properties.setProperty("reasonable", "true");
        properties.setProperty("returnPageInfo", "check");
        properties.setProperty("params", "count=countSql");
        pageHelper.setProperties(properties);
        return pageHelper;
    }
}

// Mapper 接口
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user LIMIT #{pageNum},#{pageSize} Tag_SG_limit")
    List<User> selectAll(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
}

四、PageHelper优点和缺点

优点:

  1. 使用简单,无需关注复杂分页逻辑。
  2. 支持多种方言,适用范围广。
  3. 自定义拦截器可进行分页逻辑拓展。

缺点:

  1. 虽然支持多种分页方式,但默认使用逻辑分页,影响速度。
  2. 分页信息封装在 Page 对象中,如果需要合并多个查询结果,合并分页信息比较麻烦。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/204672.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-07 12:18
下一篇 2024-12-07 12:18

相关推荐

  • jQuery Datatable分页中文

    jQuery Datatable是一个非常流行的数据表插件,它可以帮助您快速地在页面上创建搜索、过滤、排序和分页的数据表格。不过,它的默认设置是英文的,今天我们就来探讨如何将jQu…

    编程 2025-04-29
  • 如何正确复制圣诞树程序代码?

    复制圣诞树程序代码是一项基本的技能,无论是初学者还是前端开发专业人员都需要掌握。本文将从多个方面详细阐述如何正确地复制圣诞树程序代码,让你能够安心地应对代码复制难题。 一、代码复制…

    编程 2025-04-28
  • uniapp分页第二次请求用法介绍

    本文将从多个方面对uniapp分页第二次请求进行详细阐述,并给出对应的代码示例。 一、请求参数的构造 在进行分页请求时,需要传递的参数体包含当前页码以及每页显示的数据量。对于第二次…

    编程 2025-04-27
  • Mybatis Plus分页失效问题及解决方案

    一、分页失效的原因 Mybatis Plus是一款优秀的ORM框架,使用简单方便。但是,在使用它进行分页时,有时会出现分页失效的问题,原因可能有以下几个方面: 1、Mybatis …

    编程 2025-04-24
  • Mybatis分页查询SQL详解

    一、Mybatis分页查询介绍 Mybatis是一款优秀的持久层框架,支持动态SQL和参数映射等功能,而分页查询也是其中非常重要的功能之一。 分页查询是指将大量的数据按照需要的记录…

    编程 2025-04-23
  • Java 手动分页的实现

    一、什么是手动分页 手动分页是指在对一份文档进行分页时需要手动进行制定分页标记的过程。在Java中,手动分页可以通过计算、遍历等方式实现,而实现手动分页的主要目的是方便用户对数据进…

    编程 2025-04-23
  • 如何正确校验Java日期格式?

    Java中对日期的处理是非常重要的,但是在处理日期时,有时候会遇到格式不正确的问题,为了保证程序的正确性,需要对日期格式进行校验。本文将从多个方面介绍如何正确校验Java日期格式。…

    编程 2025-04-23
  • 如何正确使用authorizedgranttypes

    一、介绍authorizedgranttypes 在OAuth2中,授权模式可以说是至关重要的。在Java Spring Security中,我们可以使用authorizedgra…

    编程 2025-04-12
  • C# List分页 – 实现数据分页的方法

    一、什么是数据分页 数据分页是指将一定量的数据分成多个页面来显示,从而降低页面的加载时间和用户对数据的阅读难度。在Web开发中,数据分页是常用的数据处理方式之一。 而C#语言中的L…

    编程 2025-03-12
  • 如何正确使用MyBatis缓存提高查询性能

    MyBatis是一个支持定制化SQL、存储过程以及高级映射的优秀持久层框架,缓存是MyBatis提升查询性能的重要手段之一。本文将从以下几个方面详细讲解MyBatis缓存的使用方法…

    编程 2025-02-25

发表回复

登录后才能评论