Mybatis-Plus?3.5.12?分頁攔截器消失的問題及快速解決方法
作為 Java 開發(fā)者,我們都愛用 Mybatis-Plus 簡化 CRUD 操作,尤其是它的分頁功能,幾行代碼就能搞定復(fù)雜的分頁查詢。但最近有位朋友在集成 Mybatis-Plus 3.5.12 版本時踩了個坑:PaginationInnerInterceptor類突然找不到了!這篇文章就來聊聊這個問題的來龍去脈,教你快速解決,還會附贈分頁功能的完整使用指南。
一、問題場景:分頁攔截器突然 “失蹤”
先看一段熟悉的配置代碼,這是我們常用的 Mybatis-Plus 分頁配置:
package com.xx.config.mybatis; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @MapperScan({"com.sq.twinbee.**.mapper"}) public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 添加分頁攔截器 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } }
當(dāng)使用 Mybatis-Plus 3.5.12 版本時,IDE 突然報錯:PaginationInnerInterceptor類不存在!這是怎么回事?明明之前的版本用得好好的,難道是版本升級后類被移除了?
二、問題根源:依賴拆分惹的禍
其實不是類被移除了,而是 Mybatis-Plus 在 3.5.0 版本后對依賴進(jìn)行了拆分。在早期版本中,分頁插件和核心包是捆綁在一起的,但從 3.5.0 開始,官方將一些擴(kuò)展功能(包括分頁插件)單獨(dú)拆分成了mybatis-plus-extension模塊。
如果你在 pom.xml 中只引入了核心包:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-core</artifactId> <version>3.5.12</version> </dependency>
就會找不到PaginationInnerInterceptor,因為它已經(jīng)被移到mybatis-plus-extension里了。
三、解決辦法:添加擴(kuò)展依賴
只需在 pom.xml 中添加mybatis-plus-extension依賴,問題就能迎刃而解:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.5.12</version> </dependency>
為什么這行依賴能解決問題?
- mybatis-plus-extension是 Mybatis-Plus 的擴(kuò)展模塊,包含了分頁插件、性能分析插件等增強(qiáng)功能
- 3.5.12 版本嚴(yán)格遵循 “按需引入” 原則,核心包只保留最基礎(chǔ)的 CRUD 功能
- 擴(kuò)展模塊與核心包版本必須保持一致,否則可能出現(xiàn)兼容性問題
四、分頁功能完整使用指南
解決了依賴問題,我們再來完整梳理一下 Mybatis-Plus 分頁功能的使用步驟,確保新手也能快速上手。
步驟 1:配置分頁攔截器
就是我們開頭提到的配置類,這里再強(qiáng)調(diào)幾個注意點(diǎn):
@Configuration @MapperScan({"com.xx.**.mapper"}) // 掃描Mapper接口所在包 public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 注意:這里可以指定數(shù)據(jù)庫類型,避免分頁語句適配問題 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
關(guān)鍵說明:
- 建議明確指定數(shù)據(jù)庫類型(如DbType.MYSQL),Mybatis-Plus 會根據(jù)數(shù)據(jù)庫類型生成對應(yīng)的分頁 SQL(MySQL 用 LIMIT,Oracle 用 ROWNUM)
- 攔截器可以添加多個,比如同時添加分頁攔截器和樂觀鎖攔截器
步驟 2:編寫 Mapper 接口
無需手動寫分頁 SQL,直接繼承BaseMapper即可:
public interface UserMapper extends BaseMapper<User> { // 自定義分頁查詢(可選) IPage<User> selectUserByAge(Page<User> page, @Param("age") Integer age); }
步驟 3:Service 層調(diào)用
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override public IPage<User> getUserPage(Integer pageNum, Integer pageSize) { // 創(chuàng)建分頁對象 Page<User> page = new Page<>(pageNum, pageSize); // 調(diào)用BaseMapper的selectPage方法 return baseMapper.selectPage(page, null); } @Override public IPage<User> getUserByAge(Integer pageNum, Integer pageSize, Integer age) { Page<User> page = new Page<>(pageNum, pageSize); // 調(diào)用自定義分頁方法 return baseMapper.selectUserByAge(page, age); } }
步驟 4:Controller 層使用
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/page") public Result<IPage<User>> getUserPage( @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize) { IPage<User> page = userService.getUserPage(pageNum, pageSize); return Result.success(page); } }
步驟 5:分頁結(jié)果解析
分頁查詢返回的IPage對象包含了豐富的分頁信息:
{ "code": 200, "msg": "success", "data": { "records": [ {"id": 1, "name": "張三", "age": 20}, {"id": 2, "name": "李四", "age": 22} ], "total": 100, // 總記錄數(shù) "size": 10, // 每頁條數(shù) "current": 1, // 當(dāng)前頁碼 "pages": 10, // 總頁數(shù) "hasNext": true, // 是否有下一頁 "hasPrevious": false // 是否有上一頁 } }
五、常見問題排查
- 分頁不生效?
- 檢查是否配置了分頁攔截器
- 確認(rèn)依賴是否正確引入
- 查看是否有多個攔截器沖突
- 分頁語句錯誤?
- 確保指定了正確的數(shù)據(jù)庫類型
- 檢查實體類與表結(jié)構(gòu)映射是否正確
- 依賴沖突?
- 用mvn dependency:tree查看依賴樹,排除沖突版本
- 確保 Mybatis-Plus 各模塊版本一致
六、總結(jié)
Mybatis-Plus 的分頁功能大大簡化了我們的開發(fā)工作,但版本升級帶來的依賴變化可能會讓新手踩坑。記住 3.5.x 版本后需要單獨(dú)引入mybatis-plus-extension依賴才能使用分頁攔截器,這是解決PaginationInnerInterceptor類不存在問題的關(guān)鍵。
希望這篇文章能幫你徹底搞懂 Mybatis-Plus 分頁功能的配置和使用,如果你還有其他相關(guān)問題,歡迎在評論區(qū)交流!
到此這篇關(guān)于Mybatis-Plus 3.5.12 分頁攔截器消失的文章就介紹到這了,更多相關(guān)MybatisPlus 分頁攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Sharding-JDBC對數(shù)據(jù)進(jìn)行分片處理詳解
這篇文章主要介紹了使用Sharding-JDBC對數(shù)據(jù)進(jìn)行分片處理詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10MybatisPlus #{param}和${param}的用法詳解
這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09JdbcTemplate方法介紹與增刪改查操作實現(xiàn)
這篇文章主要給大家介紹了關(guān)于JdbcTemplate方法與增刪改查操作實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用JdbcTemplate具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Java分布式鎖、分布式ID和分布式事務(wù)的實現(xiàn)方案
在分布式系統(tǒng)中,分布式鎖、分布式ID和分布式事務(wù)是常用的組件,用于解決并發(fā)控制、唯一標(biāo)識和數(shù)據(jù)一致性的問題,本文將介紹Java中常用的分布式鎖、分布式ID和分布式事務(wù)的實現(xiàn)方案,并通過具體的示例代碼演示它們的用法和應(yīng)用場景2023-06-06Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場景
這篇文章主要介紹了Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場景,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06