springboot~mybatis-pagehelper原理與使用

张占岭發表於2024-07-19

原理

PageHelper是一個用於MyBatis的分頁外掛,pagehelper-spring-boot-starter是其在Spring Boot中的整合元件。下面簡要介紹PageHelper的分頁原理:

PageHelper的分頁原理

  1. 攔截器機制PageHelper透過MyBatis的攔截器機制實現分頁功能。它會在SQL執行前攔截並修改SQL語句,新增分頁相關的資訊。

  2. ThreadLocal儲存分頁引數:在呼叫分頁查詢之前,會將分頁引數(如頁碼、每頁數量)儲存在當前執行緒的ThreadLocal中,確保每次查詢都能獲取到正確的分頁資訊。

  3. 自動構建分頁SQL:根據儲存在ThreadLocal中的分頁引數,在攔截器中自動構建帶有分頁邏輯的SQL語句,例如使用LIMITOFFSET來限制返回結果集。

  4. 執行分頁查詢:當執行帶有分頁引數的查詢時,PageHelper會攔截該查詢並根據分頁引數重新構建SQL語句,然後執行查詢操作。

  5. 封裝分頁結果:在查詢完成後,PageHelper會將查詢結果封裝成包含分頁資訊的物件,方便在業務邏輯中使用。

PageHelper-Spring-Boot-Starter的整合原理

  1. 自動配置pagehelper-spring-boot-starter提供了自動配置類,可以根據配置檔案中的屬性自動配置PageHelper的相關引數,簡化了在Spring Boot專案中整合PageHelper的步驟。

  2. 注入攔截器:在自動配置過程中,會向MyBatis的SqlSessionFactory中注入PageInterceptor,這個攔截器負責攔截SQL並處理分頁邏輯。

  3. 配置引數:透過在application.propertiesapplication.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.propertiesapplication.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屬性。

相關文章