MyBatis Plus 的分頁外掛 PaginationInnerInterceptor
是透過攔截資料庫操作來實現分頁功能的。它的工作原理如下:
-
配置分頁外掛:在你的 Spring Boot 應用中,你需要配置
MybatisPlusInterceptor
並向其新增PaginationInnerInterceptor
。這是在你的配置類MybatisPlusConfig
中完成的,如下所示:這段程式碼的作用是建立一個
MybatisPlusInterceptor
例項,並向其新增一個配置好的PaginationInnerInterceptor
例項,這樣就啟用了分頁功能。 -
使用分頁功能:當你需要執行分頁查詢時,你會建立一個
Page
物件並傳遞給 MyBatis Plus 的page
方法。例如,在你的控制器中,當呼叫furnService.page(...)
方法時,你實際上是在請求 MyBatis Plus 為你執行分頁查詢:在這個例子中,
new Page<>(pageNum, pageSize)
建立了一個分頁請求,pageNum
是當前頁號,pageSize
是每頁顯示的記錄數。furnService.page(...)
方法內部會根據這些引數,使用分頁外掛自動修改 SQL 語句,以實現分頁查詢。 -
分頁外掛的作用:
PaginationInnerInterceptor
會自動修改你的 SQL 查詢,新增 LIMIT 子句(對於 MySQL 資料庫),以實現分頁功能。它還會執行另一個查詢以獲取總記錄數(總行數),這是為了支援分頁控制元件顯示總頁數和總記錄數。 -
體現:分頁外掛的作用主要體現在:
-
自動改寫原始 SQL 語句,新增用於限制結果集大小的語句,實現物理分頁。
-
自動查詢總記錄數,並將結果封裝到
Page
物件中,方便前端分頁顯示和操作。 -
開發者無需手動編寫分頁邏輯和計算總頁數,極大提高開發效率。
-
總之,分頁外掛的生效是在你配置了相應的攔截器並在服務層呼叫分頁方法時自動實現的。這個過程對開發者來說是透明的,你只需要按照正常方式編寫你的查詢條件,剩下的分頁處理都由 MyBatis Plus 和分頁外掛完成。
2 也就是說如果用到MybatisPlus的分頁操作,形如furnService.page(...)的,就必須注入一個分頁外掛/攔截器對嗎?
是的,你的理解是正確的。如果你想使用 MyBatis Plus 的分頁功能,例如透過 furnService.page(...)
這樣的方法實現自動分頁,那麼你必須在你的 Spring Boot 應用中配置並注入 MyBatis Plus 的分頁外掛,也就是 PaginationInnerInterceptor
。這是因為 MyBatis Plus 的分頁功能是透過這個分頁外掛來實現的。
分頁外掛工作的方式是攔截所有的查詢操作,然後檢查是否有分頁引數(Page
物件),如果有,則自動修改 SQL 語句以實現分頁查詢。同時,分頁外掛還會自動執行一個額外的查詢以獲取總記錄數,從而支援前端的分頁顯示。
要啟用分頁功能,你需要按照如下步驟在你的配置類中新增分頁外掛:
這段程式碼將確保在執行資料庫操作時,分頁外掛能夠攔截到這些操作,並根據需要修改 SQL 語句以實現分頁。因此,確實需要注入這個分頁外掛/攔截器,以便你的應用能夠使用 MyBatis Plus 提供的分頁功能。
3 page
方法是透過 MyBatis Plus 實現自動分頁的核心方法
在 MyBatis Plus 中進行分頁操作的那部分程式碼是這一行:
public class AttrgroupServiceImpl extends ServiceImpl<AttrgroupDao, AttrgroupEntity> implements AttrgroupService {
在這段程式碼中:
-
this.page(...)
方法是 MyBatis Plus 提供的,用於執行分頁查詢。this
在這裡指的是當前的服務類AttrgroupServiceImpl
的例項,它繼承自ServiceImpl<AttrgroupDao, AttrgroupEntity>
,而ServiceImpl
類提供了page
方法,用於執行分頁查詢。因此,這裡的this
實際上就是指當前的服務例項,它繼承了ServiceImpl
從而具有執行分頁查詢的能力。 -
new Query<AttrgroupEntity>().getPage(params)
是建立一個分頁查詢條件,其中Query
是一個工具類,它根據傳入的引數params
(這些引數一般包括分頁的資訊,如當前頁和每頁大小等),構造出一個IPage<AttrgroupEntity>
型別的物件,這個物件表示分頁請求的資訊。 -
wrapper
是一個QueryWrapper<AttrgroupEntity>
類的例項,它定義了查詢的條件。如果wrapper
沒有指定任何條件,那麼page
方法將會返回所有記錄的分頁結果。
因此,this.page(...)
這行程式碼是執行分頁操作的核心,它結合了分頁資訊和查詢條件,進行資料庫查詢,並返回查詢結果。這裡的 page
方法是透過 MyBatis Plus 實現自動分頁的核心方法,透過它可以非常方便地實現複雜的分頁邏輯。