解决mybtis分页插件getTotal,getPage全部为0的“坑”

本文介绍了在使用MybatisPlus分页插件时遇到Total和Page返回0的常见问题。问题根源在于缺少必要的配置。通过提供正确的MybatisPlusInterceptor配置并确保使用了PaginationInnerInterceptor,可以解决全量查询而非分页查询的问题。同时,注意Page对象的构造参数,传入false会导致不执行计数查询。修复这些问题后,分页查询将能正常工作。

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

解决mybtis分页插件getTotal,getPage全部为0的“坑”

getRecords可以获取全部数据,但getTotal,getPage全部为0。其实不是插件本身的坑,而是忘记配合了config。(把别的项目代码迁了过来,没有迁config)注意点和问题原因已在代码中标注

@Configuration
public class MybatisPlusPageConfig {

    /*	旧版本配置
	@Bean
	public PaginationInterceptor paginationInterceptor(){
		return new PaginationInterceptor();
	}*/

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,
     * 需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
    //创建拦截器,对执行的sql进行拦截
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //对Mysql拦截
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}

再来看一下控制台分页查询的执行情况

JDBC Connection [HikariProxyConnection@379300548 wrapping com.mysql.cj.jdbc.ConnectionImpl@6c7fbfdb] will not be managed by Spring
==>  Preparing: SELECT COUNT(*) FROM product_order WHERE (open_id = ?) 
==> Parameters: o4y6G4hvJSxYp1dsm3wwNhybgsug(String)
<==    Columns: COUNT(*)
<==        Row: 33
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@792e6f5f]

可以看到sql语句是全量查询的,可以猜出分页流程为:全量查询-》本地分页,而如果不对查询结果进行拦截,mybatis将不能执行分页操作,自然也拿不到页数和总数的数据了。
当然,如果在查询时配置Page时将参数设置为false,也将不能正常查询,如

new Page<ProductOrderDO>(page,size,false)

Page对象的第三个参数传的是false,如果传false的话,代表不执行查询总记录数的那条sql语句。默认是true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值