java
主页 > 软件编程 > java >

Mybatis-Plus 3.5.12分页拦截器消失的问题及快速解决方法

2025-08-10 | 佚名 | 点击:

作为 Java 开发者,我们都爱用 Mybatis-Plus 简化 CRUD 操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询。但最近有位朋友在集成 Mybatis-Plus 3.5.12 版本时踩了个坑:PaginationInnerInterceptor类突然找不到了!这篇文章就来聊聊这个问题的来龙去脉,教你快速解决,还会附赠分页功能的完整使用指南。

一、问题场景:分页拦截器突然 “失踪”

先看一段熟悉的配置代码,这是我们常用的 Mybatis-Plus 分页配置:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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;

}

}

当使用 Mybatis-Plus 3.5.12 版本时,IDE 突然报错:PaginationInnerInterceptor类不存在!这是怎么回事?明明之前的版本用得好好的,难道是版本升级后类被移除了?

二、问题根源:依赖拆分惹的祸

其实不是类被移除了,而是 Mybatis-Plus 在 3.5.0 版本后对依赖进行了拆分。在早期版本中,分页插件和核心包是捆绑在一起的,但从 3.5.0 开始,官方将一些扩展功能(包括分页插件)单独拆分成了mybatis-plus-extension模块。

如果你在 pom.xml 中只引入了核心包:

1

2

3

4

5

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>mybatis-plus-core</artifactId>

<version>3.5.12</version>

</dependency>

就会找不到PaginationInnerInterceptor,因为它已经被移到mybatis-plus-extension里了。

三、解决办法:添加扩展依赖

只需在 pom.xml 中添加mybatis-plus-extension依赖,问题就能迎刃而解:

1

2

3

4

5

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>mybatis-plus-extension</artifactId>

<version>3.5.12</version>

</dependency>

为什么这行依赖能解决问题?

四、分页功能完整使用指南

解决了依赖问题,我们再来完整梳理一下 Mybatis-Plus 分页功能的使用步骤,确保新手也能快速上手。

步骤 1:配置分页拦截器

就是我们开头提到的配置类,这里再强调几个注意点:

1

2

3

4

5

6

7

8

9

10

11

@Configuration

@MapperScan({"com.xx.**.mapper"}) // 扫描Mapper接口所在包

public class MybatisPlusConfig {

@Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

// 注意:这里可以指定数据库类型,避免分页语句适配问题

interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

return interceptor;

}

}

关键说明:

步骤 2:编写 Mapper 接口

无需手动写分页 SQL,直接继承BaseMapper即可:

1

2

3

4

public interface UserMapper extends BaseMapper<User> {

// 自定义分页查询(可选)

IPage<User> selectUserByAge(Page<User> page, @Param("age") Integer age);

}

步骤 3:Service 层调用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

@Service

public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

@Override

public IPage<User> getUserPage(Integer pageNum, Integer pageSize) {

// 创建分页对象

Page<User> page = new Page<>(pageNum, pageSize);

// 调用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);

// 调用自定义分页方法

return baseMapper.selectUserByAge(page, age);

}

}

步骤 4:Controller 层使用

1

2

3

4

5

6

7

8

9

10

11

12

13

@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:分页结果解析

分页查询返回的IPage对象包含了丰富的分页信息:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{

"code": 200,

"msg": "success",

"data": {

"records": [

{"id": 1, "name": "张三", "age": 20},

{"id": 2, "name": "李四", "age": 22}

],

"total": 100, // 总记录数

"size": 10, // 每页条数

"current": 1, // 当前页码

"pages": 10, // 总页数

"hasNext": true, // 是否有下一页

"hasPrevious": false // 是否有上一页

}

}

五、常见问题排查

六、总结

Mybatis-Plus 的分页功能大大简化了我们的开发工作,但版本升级带来的依赖变化可能会让新手踩坑。记住 3.5.x 版本后需要单独引入mybatis-plus-extension依赖才能使用分页拦截器,这是解决PaginationInnerInterceptor类不存在问题的关键。

希望这篇文章能帮你彻底搞懂 Mybatis-Plus 分页功能的配置和使用,如果你还有其他相关问题,欢迎在评论区交流!

原文链接:
相关文章
最新更新