Pagehelper 在 Spring Boot 中的使用

一、什麼是Pagehelper

Pagehelper 是 MyBatis 分頁插件,可以使用最簡單的方法實現 MyBatis 分頁查詢,支持多種資料庫。

使用 Pagehelper 可以避免我們手動在 SQL 中編寫分頁邏輯,讓開發更為便捷和高效。

二、在 Spring Boot 中使用 Pagehelper

1. 添加依賴

我們可以在 pom.xml 中添加 Pagehelper 的依賴:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

2. 開啟分頁插件

在 Spring Boot 的配置文件中開啟 Pagehelper :

# 開啟分頁插件支持
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

其中 helperDialect 表示資料庫類型, reasonable 表示分頁合理化參數,默認值為 false。支持方法參數類型集合,默認值為 false。

params 表示使用 map 接收分頁參數時,param1 參數作為前綴值,count 作為後綴值,用於收集數據總數信息。也可以用這種方式自定義參數名。

3. 編寫 DAO 層代碼

我們可以在 DAO 層介面中直接使用 PageHelper 進行分頁查詢,如下所示:

List<SomeEntity> selectPage(@Param("pageNum") int pageNum, 
                                 @Param("pageSize") int pageSize);

這裡的 pageNum 表示當前頁碼,pageSize 表示頁面大小。

4. 編寫 Service 層代碼

在 Service 層中直接調用 DAO 層進行分頁操作,如下所示:

@Service
public class SomeService {
    @Autowired
    private SomeDAO someDAO;

    public PageInfo<SomeEntity> selectPage(int pageNum, int pageSize) {
        // 開始分頁
        PageHelper.startPage(pageNum, pageSize);
        List<SomeEntity> list = someDAO.selectPage();
        // 封裝分頁結果
        return new PageInfo<>(list);
    }
}

在使用 Pagehelper 進行分頁查詢時,我們需要先調用 PageHelper.startPage(pageNum, pageSize) 方法,設置頁碼和頁面大小,然後執行查詢操作。最後使用 PageInfo 對查詢結果進行封裝。

三、注意事項

1. 分頁參數的傳遞方式

PageHelper 的分頁參數可以使用方法參數、Map 或者 RowBounds 三種方式之一進行傳遞。

List<SomeEntity> selectPage(@Param("pageNum") int pageNum, 
                                 @Param("pageSize") int pageSize);

List<SomeEntity> selectPage(Map<String, Object> params);

List<SomeEntity> selectPage(RowBounds rowBounds);

2. 排序參數的使用

PageHelper 支持排序功能,我們可以在分頁查詢的時候指定排序欄位和排序方向,如下所示:

PageHelper.orderBy("id DESC");

在使用 PageHelper.orderBy 方法時,需要注意使用大寫字母進行排序欄位的指定。

3. Mybatis Generator 自動生成代碼的情況

如果使用了 Mybatis Generator 自動生成的代碼,在生成的 Example 類中,我們需要使用類似如下的方式進行分頁查詢:

Example example = new Example(SomeEntity.class);
example.createCriteria().andXXXEqualTo(XXX);
// 排序
example.setOrderByClause("id DESC");
// 開始分頁
PageHelper.startPage(pageNum, pageSize);
List<SomeEntity> list = someEntityMapper.selectByExample(example);
// 封裝分頁結果
return new PageInfo<>(list);

在使用 Mybatis Generator 自動生成的代碼時,我們需要特別注意傳遞對象的方式和 Example 對象的使用。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/311310.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-05 13:23
下一篇 2025-01-05 13:23

相關推薦

發表回復

登錄後才能評論