MyBatis-Plus 的分页插件
时间: 2025-05-02 22:49:33 浏览: 27
### MyBatis-Plus 分页插件的使用方法与实现原理
#### 一、MyBatis-Plus 分页插件概述
MyBatis-Plus 是一款基于 MyBatis 的增强工具,在简化开发的同时提供了丰富的功能支持,其中包括内置的分页插件。该分页插件通过拦截 SQL 查询语句并动态注入分页参数的方式,实现了对查询结果的分页处理[^1]。
---
#### 二、分页插件的核心实现机制
MyBatis-Plus 的分页功能主要依赖于 **拦截器 (Interceptor)** 来完成。具体来说,当执行带有分页需求的查询时,分页插件会拦截原始 SQL 并对其进行解析和修改,最终生成一条包含 `LIMIT` 和 `OFFSET` 子句的新 SQL 语句[^3]。以下是其核心工作流程:
1. 用户调用分页接口(如 `Page<T>` 对象)传递分页参数。
2. 插件捕获到分页请求后,分析当前上下文中的 SQL 语句。
3. 动态向 SQL 中追加分页条件(例如 MySQL 的 `LIMIT offset, size`)。
4. 执行修改后的 SQL,并返回封装好的分页数据结构。
这种设计使得开发者无需手动拼接复杂的分页逻辑即可轻松实现分页功能。
---
#### 三、分页插件的具体使用步骤
##### 1. 添加 Maven 依赖
在项目的 `pom.xml` 文件中引入 MyBatis-Plus 及其相关依赖:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
```
##### 2. 配置分页插件
为了启用分页功能,需注册分页拦截器至全局配置中。可以通过创建一个配置类来完成此操作:
```java
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 注册分页拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
```
上述代码片段展示了如何通过 Spring Boot 自动装配机制加载分页插件[^2]。
##### 3. 编写业务代码
假设有一个名为 `UserMapper` 的 Mapper 接口以及对应的 Service 层和服务控制器,则可以按照如下方式进行分页查询:
###### (1)定义实体类
```java
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
```
###### (2)编写 Mapper 方法
```java
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<User> selectUsersByCondition(Map<String, Object> params);
}
```
###### (3)Service 层实现分页逻辑
```java
@Service
public class UserServiceImpl implements IService<User> {
@Autowired
private UserMapper userMapper;
public IPage<User> getUserList(Page page, Map<String, Object> queryParams) {
return userMapper.selectPage(page, queryParams); // 调用分页查询方法
}
}
```
###### (4)Controller 曾暴露 RESTful API
```java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
public Result<IPage<User>> userList(@RequestParam(defaultValue = "1") int current,
@RequestParam(defaultValue = "10") int size) {
Page<User> page = new Page<>(current, size);
IPage<User> result = userService.getUserList(page, null);
return Result.success(result);
}
}
```
以上代码演示了一个完整的分页查询过程,其中前端传入的 `current` 表示当前页码,`size` 则表示每页显示记录数[^4]。
---
#### 四、注意事项
1. 如果项目中已存在其他分页组件(如 PageHelper),可能会因冲突而导致异常行为。因此建议仅保留一种分页方案。
2. 不同数据库对于分页语法的支持有所差异,例如 Oracle 使用 `ROWNUM` 而不是 `LIMIT OFFSET`。为此,MyBatis-Plus 提供了针对多种主流数据库的适配能力。
---
阅读全文
相关推荐

















