springboot整合mybatis-plus分页失效问题

本文讲述了作者在项目中使用Mybatis-Plus进行分页遇到的问题,通过排查发现需要配置分页插件才能实现,详细介绍了如何在Mybatis-PlusConfig中添加分页插件并最终解决问题的过程。

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


问题描述

问题也很简单,我在项目中使用mybatis-plus想做个分页,然后把代码写完了,然后去测试一直没办法分页,第一反应是不是因为参数没有接收到,然后使用debug模式进行测试,发现参数是没有问题的,然后又觉得是不是包导错了,去检查发现也没错,又去检查的依赖,该看的都看了,都没找到问题

分页代码:

 public R getUserPage(String keywords, PageBean pageBean) {
        QueryWrapper<User> wrapper =new QueryWrapper<>();
        if(StringUtils.hasText(keywords)){
            //根据用户名称进行模糊查询或者根据根据昵称进行模糊查询
            wrapper.like("username",keywords)
                    .or()
                    .like("cname",keywords);
        }
        Page<User> page = this.page(new Page<>(pageBean.getPage(),
                pageBean.getSize()), wrapper);

        return R.ok(new PageResult(page.getTotal(),
                CopyBean.copyBean(page.getRecords(), UserVo::new)));
    }

解决方案:

然后就去mybatis-plus官网找找看,大概意思是,写了代码还不够进行分页,还需要配置分页插件,然后就解决了,对mp还是了解的不够深入,才出现这样低价错误的。

@Configuration
public class MybatisPlusConfig {

    /**
     * 乐观锁插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 乐观锁插件
        // DbType:数据库类型(根据类型获取应使用的分页方言)
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 分页插件
        return interceptor;
    }


}

### MyBatis-Plus 分页拦截器失效解决方案 #### 配置分页插件 为了使 MyBatis-Plus分页功能正常工作,确保正确配置 `MybatisPlusInterceptor` 插件。对于 PostgreSQL 数据库,应如下所示初始化并添加分页内嵌拦截器: ```java // 创建 Mybatis Plus 拦截器实例 MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 添加分页内嵌拦截器,并指定数据库类型为 PostgreSQL interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL)); sqlSessionFactory.setPlugins(new Interceptor[]{interceptor}); ``` 上述代码片段展示了如何针对特定类型的数据库(这里是 PostgreSQL)设置分页插件[^4]。 #### 处理多数据源场景 当应用程序涉及多个数据源时,需特别注意分页插件的注册位置。如果仅在一个全局配置文件中声明了分页插件,则可能导致其他数据源未能应用此插件而引起分页失败的情况。因此,在每个数据源对应的 SQL Session Factory 中都应当单独配置分页插件。 #### 自定义拦截器的影响 有时开发者可能会实现自己的自定义拦截器来增强某些特性或满足特殊需求。然而,这些额外的拦截器可能干扰到默认提供的 `PaginationInterceptor` 正常运作。特别是那些未充分考虑 SELECT COUNT(*) 查询逻辑的情况下,容易造成总记录数统计错误等问题。建议仔细审查任何引入的应用程序级别的SQL拦截机制,确认其不会影响原有分页行为[^3]。 #### 测试与验证 完成以上调整之后,务必通过单元测试或其他方式验证分页查询能否按预期返回正确的结果集大小以及总数信息。这一步骤有助于及时发现问题所在并作出相应修正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值