添加 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 已經生效了。
常用方法一
<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);
}
}
結果如下:
常用方法二
使用 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 頁),對超界頁碼不處理。