如何正確使用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/zh-tw/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

發表回復

登錄後才能評論