MyBatis-Plus 分页设置不生效

文章讨论了在使用MybatisPlus时遇到分页不生效的问题,指出问题可能出在拦截器配置上。提供了两种添加拦截器的方法:一种是在配置类上添加,另一种是针对设置了数据源的情况在数据源上添加。示例代码中展示了如何正确配置MybatisPlusInterceptor和PaginationInnerInterceptor,以支持MySQL数据库的分页操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页不生效的原因都是拦截器的问题

添加拦截器有两种情况

  1. 在配置类上加拦截器

@Configuration

public class MyBatisPlusConfig {
    /**
     * 新增分页拦截器,并设置数据库类型为mysql
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 向Mybatis过滤器链中添加分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;

    }
}

2.当你设置了数据源需要在数据源上添加拦截器

@Bean
    public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception {
        //修改为MybatisSqlSessionFactoryBean
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        //插件类
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        
        sqlSessionFactoryBean.setDataSource(dataSourceProxy);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
        sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
        sqlSessionFactoryBean.setGlobalConfig(globalConfig);
        //添加插件
        sqlSessionFactoryBean.setPlugins(mybatisPlusInterceptor);
        return sqlSessionFactoryBean.getObject();
    }

### MyBatis-Plus 分页插件配置 为了使 MyBatis-Plus分页功能正常工作,需确保正确配置分页插件并合理设置依赖项。具体而言: #### 配置分页插件 在 Spring Boot 应用程序中,可以通过 `@Bean` 注解注册分页拦截器来启用分页支持。 ```java import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 添加分页拦截器 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } ``` 上述代码片段展示了如何创建一个名为 `mybatisPlusInterceptor()` 的 Bean 来初始化分页插件,并将其添加到 MyBatis Plus 拦截器链中[^1]。 #### 常见问题排查 当遇到分页失效的情况时,应考虑以下几个方面的原因分析与处理方法: ##### 版本兼容性检查 确认所使用的 MyBatis-Plus 和 jsqlparser 之间的版本是否存在冲突。如果两者之间存在不兼容之处,则可能导致分页逻辑无法按预期运行。建议查阅官方文档或 GitHub 发布页面了解最新推荐搭配组合。 ##### SQL 执行计划优化 有时即使分页参数传递无误,但由于数据库端执行效率低下也会造成看似“分页失败”的现象。此时可以尝试通过 EXPLAIN 查看实际查询语句的执行路径,进而调整索引结构或其他影响因素以提高性能表现[^2]。 ##### 自定义记录行统计接口 对于某些特殊场景下,默认提供的总数计算方式可能不够高效甚至引发长时间等待的问题。针对这种情况,可以根据业务需求自行实现一套更为轻量化的计数机制,在每次请求分页数据的同时一并返回预估的结果集大小给前端展示层使用。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值