PaginationInterceptor——MyBatisPlus实现自动处理分页逻辑

  PaginationInterceptor 是 MyBatis-Plus 框架早期版本(MyBatisPlus 3.4.0之前)用于实现分页查询功能的拦截器。在进行数据库查询时,分页是一个常见的需求,PaginationInterceptor 能够自动处理分页逻辑,简化开发过程。

一、工作原理

        PaginationInterceptor 作为一个 MyBatis 的拦截器,会在 SQL 执行之前对其进行拦截。当检测到查询操作中包含分页信息时,它会自动修改原始 SQL 语句,添加分页相关的语法(如 MySQL 的 LIMIT 关键字),并执行相应的分页查询。

二、使用步骤

1、引入依赖

        确保项目中已经引入了 MyBatis-Plus 相关依赖。以 Maven 为例,在 pom.xml 中添加以下依赖:


    com.baomidou
    mybatis-plus-boot-starter
    根据实际情况选择合适版本(3.4.0 之前)

2、配置 PaginationInterceptor

        在 Spring Boot 项目中,需要创建一个配置类来配置 PaginationInterceptor。示例如下:

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

        在上述代码中,通过 @Bean 注解将 PaginationInterceptor 注册到 Spring 容器中,这样 MyBatis-Plus 就能够使用该拦截器来处理分页查询。 

3、实体类和 Mapper 接口

        创建实体类和对应的 Mapper 接口,用于进行数据库操作。示例如下:

import com.baomidou.mybatisplus.annotation.TableName;

@TableName("your_table_name")
public class YourEntity {
    private Long id;
    private String name;

    // getter 和 setter 方法
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

@Repository
public interface YourEntityMapper extends BaseMapper {
}

4、进行分页查询

        在服务层使用 Page 对象来指定分页信息,并调用 Mapper 接口的方法进行分页查询。示例如下:

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class YourEntityService {

    @Autowired
    private YourEntityMapper yourEntityMapper;

    public IPage getEntitiesByPage(int currentPage, int pageSize) {
        // 创建 Page 对象,指定当前页码和每页记录数
        Page page = new Page<>(currentPage, pageSize);
        // 调用 Mapper 接口的 selectPage 方法进行分页查询
        return yourEntityMapper.selectPage(page, null);
    }
}

在上述代码中:

  • Page 对象用于封装分页信息,currentPage 表示当前页码,pageSize 表示每页记录数。
  • selectPage 方法是 BaseMapper 接口提供的用于分页查询的方法,第一个参数是 Page 对象,第二个参数是查询条件(这里传入 null 表示查询所有记录)。

5、注意事项 

        从 MyBatis-Plus 3.4.0 版本开始,PaginationInterceptor 被弃用,取而代之的是 MybatisPlusInterceptor 和 PaginationInnerInterceptor。如果你使用的是 3.4.0 及以上版本,建议使用新的分页插件。使用新的分页插件时,分页查询的代码基本保持不变。示例如下:

import com.baomidou.mybatisplus.annotation.DbType;
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(DbType.MYSQL));
        return interceptor;
    }
}

你可能感兴趣的:(mybatis,数据库,oracle)