原理
PageHelper
是一個用於MyBatis的分頁外掛,pagehelper-spring-boot-starter
是其在Spring Boot中的整合元件。下面簡要介紹PageHelper
的分頁原理:
PageHelper的分頁原理
-
攔截器機制:
PageHelper
透過MyBatis的攔截器機制實現分頁功能。它會在SQL執行前攔截並修改SQL語句,新增分頁相關的資訊。 -
ThreadLocal儲存分頁引數:在呼叫分頁查詢之前,會將分頁引數(如頁碼、每頁數量)儲存在當前執行緒的
ThreadLocal
中,確保每次查詢都能獲取到正確的分頁資訊。 -
自動構建分頁SQL:根據儲存在
ThreadLocal
中的分頁引數,在攔截器中自動構建帶有分頁邏輯的SQL語句,例如使用LIMIT
和OFFSET
來限制返回結果集。 -
執行分頁查詢:當執行帶有分頁引數的查詢時,
PageHelper
會攔截該查詢並根據分頁引數重新構建SQL語句,然後執行查詢操作。 -
封裝分頁結果:在查詢完成後,
PageHelper
會將查詢結果封裝成包含分頁資訊的物件,方便在業務邏輯中使用。
PageHelper-Spring-Boot-Starter的整合原理
-
自動配置:
pagehelper-spring-boot-starter
提供了自動配置類,可以根據配置檔案中的屬性自動配置PageHelper
的相關引數,簡化了在Spring Boot專案中整合PageHelper
的步驟。 -
注入攔截器:在自動配置過程中,會向MyBatis的
SqlSessionFactory
中注入PageInterceptor
,這個攔截器負責攔截SQL並處理分頁邏輯。 -
配置引數:透過在
application.properties
或application.yml
中配置pagehelper
相關屬性,可以定製化地設定分頁引數,如頁碼引數名、每頁數量等。
總的來說,PageHelper
透過攔截器機制、ThreadLocal
儲存分頁引數以及自動構建分頁SQL來實現對MyBatis的分頁支援,而pagehelper-spring-boot-starter
則在Spring Boot中簡化了PageHelper
的整合和配置過程。
實戰
下面是一個簡單的示例,演示如何在Spring Boot專案中使用pagehelper-spring-boot-starter
來實現分頁查詢:
1. 新增依賴
首先,在pom.xml
檔案中新增pagehelper-spring-boot-starter
的依賴:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>{version}</version>
</dependency>
2. 配置屬性
在application.properties
或application.yml
中配置pagehelper
相關屬性,例如:
# PageHelper配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
3. 編寫Mapper介面和XML檔案
編寫MyBatis的Mapper介面和對應的XML檔案,定義分頁查詢的方法。
4. 在Service中呼叫分頁查詢
在Service類中呼叫分頁查詢方法,示例程式碼如下:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public PageInfo<User> findUsers(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<User> userList = userMapper.selectUsers();
return new PageInfo<>(userList);
}
}
5. Controller層呼叫Service進行分頁查詢
在Controller層呼叫Service中的方法進行分頁查詢,並返回分頁結果給前端。示例程式碼如下:
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public PageInfo<User> getUsers(@RequestParam("pageNum") int pageNum, @RequestParam("pageSize") int pageSize) {
return userService.findUsers(pageNum, pageSize);
}
}
透過以上步驟,你就可以在Spring Boot專案中使用pagehelper-spring-boot-starter
來實現分頁查詢功能。記得根據具體的業務需求和資料庫型別配置相應的pagehelper
屬性。