添加 pagehelper-spring-boot-starter 依賴

<!-- pom.xml -->
	<dependencies>	
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>2.1.1</version>
		</dependency>
	</dependencies>

啓動項目,控制枱能打印出 PageHelper banner 説明 PageHelper 已經生效了。

Spring Boot 使用 PageHelper 分頁插件_PageHelper

常用方法一

<mapper namespace="dev.xyz.hello_spring.mapper.UserMapper">
  <!-- 查詢所有用户 -->
  <!-- sql 語句中不需要添加 limit,其功能由 PageHelper 來完成 -->
  <select id="findAll"> SELECT id, username, password, enabled, created_time FROM users </select>
</mapper>
// UserMapper.java
@Mapper
public interface UserMapper {
  // UserMapper 中也不需要分頁參數
  public List<User> findAll();
}

// UserService.java
@Service("UserService")
@RequiredArgsConstructor
public class UserService {
  
  private final UserMapper userMapper;

  public PageInfo<User> findAll(int pageNum, int pageSize) {
    // 開啓分頁(關鍵:這行代碼後,第一個查詢會自動分頁)
    PageHelper.startPage(pageNum, pageSize);
    
    // 執行查詢(無需修改,PageHelper 自動攔截並添加分頁條件)
    List<User> users = userMapper.findAll();
    
    // 封裝分頁結果(PageInfo 包含總條數、總頁數等關鍵信息)
    return new PageInfo<>(users);
  }
}

// UserController.java
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {

  private final UserService userService;

  @GetMapping("")
  public PageInfo<User> getAll(int pageNum, int pageSize) {
    return userService.findAll(pageNum, pageSize);
  }
}

結果如下:

Spring Boot 使用 PageHelper 分頁插件_分頁_02

常用方法二

使用 PageHelper.offsetPage(int offset, int limit) 替換 PageHelper.startPage(int pageNum, int pageSize),修改 Service 方法

// UserService.java
@Service("UserService")
@RequiredArgsConstructor
public class UserService {
  
  private final UserMapper userMapper;

  public PageInfo<User> findAll(int offset, int limit) {
    // 開啓分頁(關鍵:這行代碼後,第一個查詢會自動分頁)
    PageHelper.startPage(offset, limit);
    
    // 執行查詢(無需修改,PageHelper 自動攔截並添加分頁條件)
    List<User> users = userMapper.findAll();
    
    // 封裝分頁結果(PageInfo 包含總條數、總頁數等關鍵信息)
    return new PageInfo<>(users);
  }
}

startPage 是常規業務的首選,核心優勢是前端友好、無需手動計算,適合用户直接參與分頁的場景。

offsetPage 適合程序邏輯主導分頁的場景,需要精準控制 “從第 N 條數據開始查詢”。

控制分頁查詢時是否自動執行總條數統計 count(*)

當你用 PageHelper 分頁時,默認會執行 兩條 SQL:主查詢 SQL,添加 LIMIT 分頁條件,查詢當前頁數據(如 SELECT * FROM user LIMIT 0,10);統計 SQL:自動拼接 count(),查詢全量數據總條數(如 SELECT COUNT() FROM user)。

全局配置 pagehelper.defaultCount 的作用就是控制是否自動執行這條 count(*) 統計 SQL。還可是通過局部方法覆蓋全局配置:

// 示例 1:startPage 手動關閉 count
PageHelper.startPage(pageNum, pageSize, false); // 第三個參數 false = 不統計總條數

// 示例 2:offsetPage 手動開啓 count
PageHelper.offsetPage(offset, limit, true); // 第三個參數 true = 強制統計總條數

// 示例 3:默認繼承全局配置(不指定第三個參數)
PageHelper.startPage(pageNum, pageSize); // 遵循全局 defaultCount 配置

開啓 reasonable: true(分頁合理化)時,若 defaultCount: true,PageHelper 會根據 total 判斷 “頁碼是否超出總頁數”(如 pageNum=100 但總頁數只有 50,自動跳轉到最後一頁);若 defaultCount: false,reasonable 無法判斷總頁數,僅對 pageNum≤0 生效(跳轉到第 1 頁),對超界頁碼不處理。