MybatisPlus拦截器实现分页处理

本文解释了MybatisPlus中如何通过自定义拦截器(PaginationInterceptor)实现分页功能,包括处理不同数据库类型的分页需求,并利用IPage配合查询条件进行分页操作。
摘要由CSDN通过智能技术生成

为什么mybatisplus的拦截器可以实现分页效果? 

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    return interceptor;
}

在实现分页处理的时候,通常mybatisplus需要加上一个分页拦截器(PaginationInterceptor),通过拦截器可以实现将所有的sql请求拦截并做处理

对于一些非mysql数据库, 它存在分页字段语法不相同的情况, 使用分页拦击器可以同一管理不同种类数据源的分页操作

使用分页插件的时候, 使用Mybatis提供的IPage配合拦截器实现分页效果

@Override
public ResponseResult findList(WmMaterialDto dto) {
    IPage page = new Page(dto.getPage(),dto.getSize());
    LambdaQueryWrapper<WmMaterial> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    if (dto.getIsCollection() != null&&dto.getIsCollection() == 1){
        lambdaQueryWrapper.eq(WmMaterial::getIsCollection,dto.getIsCollection());
    }
    lambdaQueryWrapper.eq(WmMaterial::getUserId,WmThreadLocalUtil.getUser().getId());
    lambdaQueryWrapper.orderByDesc(WmMaterial::getCreatedTime);
    page = page(page,lambdaQueryWrapper);
    responseResult.setData(page.getRecords());
    return responseResult;
}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`PaginationInterceptor` 是一个在基于Spring Boot框架的项目中用于实现分页功能的拦截器类。它主要用于在数据库查询操作中添加分页条件,从而优化性能并减少对内存的消耗。 ### 如何工作: `PaginationInterceptor` 工作时通常会接收几个参数,包括当前请求的页码(page)、每页显示的数量(pageSize)以及查询语句等信息。当调用分页相关的API或执行SQL查询时,这个拦截器会在实际的数据检索之前,动态地添加分页逻辑到SQL语句中。 例如,在MyBatis或Hibernate环境下,通过配置`PageHelper`插件来自动实现分页逻辑,使得开发者不需要直接编写复杂的分页SQL。 ### 使用示例: 假设我们使用MyBatis作为持久层框架,要实现分页功能,我们可以这样做: #### 1. 添加依赖 在`pom.xml`文件中添加MyBatis的相关依赖: ```xml <dependencies> ... <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <!-- 或者 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.14</version> </dependency> ... </dependencies> ``` #### 2. 配置 PageHelper 在`application.properties`中配置PageHelper: ```properties # 分页插件配置 pagehelper.enabled=true pagehelper.supportMethodsArguments=true pagehelper.params=count=countSql ``` #### 3. 使用分页 在Service接口或实现类中定义分页查询的方法: ```java public interface UserRepository { List<User> findUsers(int page, int pageSize); } ``` 在Controller中调用这个方法: ```java @RestController @RequestMapping("/users") public class UserController { private final UserRepository userRepository; public UserController(UserRepository userRepository) { this.userRepository = userRepository; } @GetMapping("") public ResponseEntity<List<User>> getUsers() { List<User> users = userRepository.findUsers(1, 10); // 获取第一页,每页10条记录 return ResponseEntity.ok(users); } } ``` ### 相关问题: 1. `PaginationInterceptor`与`PageHelper`的区别是什么? 2. 怎样调整`PageHelper`的配置以满足不同的分页需求? 3. 当遇到分页查询性能瓶颈时,有哪些优化策略?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值