SpringBoot整合MybatisPlus使用IPage实现分页

概述

MybatisPlus 提供了分页的功能。
IPage内部原理是基于拦截器,但是这个拦截的是方法以及方法中的参数,这个也会判断是否是查询操作。如果是查询操作,才会进入分页的处理逻辑。
进入分页逻辑处理后,拦截器会通过反射获取该方法的参数进行判断是否存在IPage对象的实现类。如果不存在则不进行分页,存在则将该参数赋值给IPage对象。然后进行拼接sql的处理完成分页操作。使用IPage需要注入一个bean拦截器交给spring进行管理。

项目依赖

  • JDK 1.8
  • SpringBoot 2.5.1
  • MybatisPlus 3.4.3.1

分页实现

maven依赖

 <!-- SpringBoot MybatisPlus --> 
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.4.3.1</version>
</dependency>
<dependency>
 <!-- MyBatisPlus Core --> 
<groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus</artifactId>
  <version>3.4.3.1</version>
### Spring Boot 中集成 MyBatis-Plus 实现分页功能 #### 一、MyBatis-Plus 简介 MyBatis-Plus 是 MyBatis 的增强工具包,在原有框架基础上提供了更多的便捷功能和增强特性,能够显著提升开发效率[^4]。 --- #### 二、Spring Boot 整合 MyBatis-Plus 的详细配置 为了在 Spring Boot 中使用 MyBatis-Plus 并实现分页功能,需完成以下步骤: 1. **创建 Spring Boot 项目** 创建一个新的 Spring Boot 项目并引入必要的依赖项。 2. **导入 Maven 或 Gradle 依赖** 在 `pom.xml` 文件中添加 MyBatis-Plus 和分页插件的相关依赖: ```xml <!-- MyBatis-Plus 核心依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <!-- 数据库驱动 (以 MySQL 为例) --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- 分页插件支持 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.0</version> </dependency> ``` 3. **数据库连接配置** 修改 `application.yml` 文件中的数据源配置: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath:/mapper/*.xml type-aliases-package: com.example.demo.entity ``` 4. **启用分页插件** 在项目的启动类或配置类中注册分页拦截器: ```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; } } ``` 5. **实体类定义** 定义与数据库表对应的实体类。例如: ```java package com.example.demo.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; } ``` 6. **Mapper 接口编写** 编写 Mapper 接口继承 BaseMapper<T> 类型接口: ```java package com.example.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.entity.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> {} ``` 7. **Service 层逻辑** 调用分页方法获取分页结果: ```java import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.demo.entity.User; import com.example.demo.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public IPage<User> getUserList(int currentPage, int pageSize) { Page<User> page = new Page<>(currentPage, pageSize); return userMapper.selectPage(page, null); // 查询分页数据 } } ``` 8. **Controller 层调用** 提供 RESTful API 来访问分页服务: ```java import com.baomidou.mybatisplus.core.metadata.IPage; import com.example.demo.entity.User; import com.example.demo.service.UserService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping("/users") public IPage<User> getUsers(@RequestParam(defaultValue = "1") int current, @RequestParam(defaultValue = "10") int size) { return userService.getUserList(current, size); } } ``` --- #### 三、测试分页功能 运行应用程序后,可以通过浏览器或 Postman 访问 `/users` 接口来验证分页功能是否正常工作。URL 参数如下: - `current`: 当前页码,默认值为 1。 - `size`: 每页显示记录数,默认值为 10。 返回的结果是一个 JSON 对象,包含总记录数 (`total`)、当前页码 (`current`)、每页大小 (`size`) 及具体的数据列表 (`records`)。 --- ### 总结 通过上述步骤可以成功在 Spring Boot 应用程序中集成分页功能。核心在于正确配置 MyBatis-Plus 插件及其分页拦截器,并合理设计 Service 和 Controller 层逻辑[^3]。 ```python print("分页功能已成功集成到 Spring Boot 项目中!") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值