使用Mybatis-plus分页查询的Total与实际条数不对应

现象

对于单表查询是没有问题的。而需要多表关联查询(自写sql)时,就会查询调用Mybatis-Plus的.page(Page page,Wrapper queryWrapper);

可以看到后台实际执行sql有两个。

一个是查询sql的数据:

java 复制代码
select
        visit.id as id,
        visit.rfid_card_num as rfidCardNum,
        cp.id as bizClinicalPathId,
        users.nickname as nickName
        from  ecqm_biz_patient_visit visit
        left join ecqm_biz_clinical_path  cp 
         	on  visit.id = cp.pv_id and cp.deleted  = 0
        left join system_users users 
        	on users.id = visit.creator and users.deleted = 0
        WHERE visit .deleted = 0

另一个为统计Total数量的sql;

但是查询total的语句却是:

java 复制代码
select count(*) from  ecqm_biz_patient_visit visit 
where visit .deleted = 0

显然是有问题的;

原因

这是因为对查询进行了优化(只查主表符合查询条件的总条数),这就导致两条查询sql的表数量不一致,从而导致查询总条数不一致的情况。

com.baomidou.mybatisplus.extension.plugins.pagination.Page源码:

java 复制代码
    /**
     * 自动优化 COUNT SQL
     */
    protected boolean optimizeCountSql = true;
    /**
     * 是否进行 count 查询
     */
    protected boolean searchCount = true;
	
	......其他源码省略
	
	public Page<T> setOptimizeCountSql(boolean optimizeCountSql) {
        this.optimizeCountSql = optimizeCountSql;
        return this;
    }

解决方案

关闭分页查询优化即可: page.setOptimizeCountSql(false)。

java 复制代码
Page<BizPatientVisitRespVO> page = new Page<>(pageReqVO.getPageNo(),pageReqVO.getPageSize());
//关闭分页查询优化
page.setOptimizeCountSql(false);
Page<VO> result = bizPatientVisitMapper.getInPatient(page,pageReqVO );
return new PageResult<>(result.getRecords(), result.getTotal());
相关推荐
wgslucky2 天前
SpringBoot3.x + MybatisPlus + Druid 多数据源配置及开启Druid监控与统计功能
多数据源·mybatis plus·druid监控·druid数据库
九皇叔叔11 天前
【07】SpringBoot3 MybatisPlus 删除(Mapper)
java·开发语言·mybatis·mybatis plus
九皇叔叔12 天前
【03】SpringBoot3 MybatisPlus BaseMapper 源码分析
java·开发语言·mybatis·mybatis plus
九皇叔叔13 天前
【04】SpringBoot3 MybatisPlus 查询(Mapper)
java·mybatis·mybatis plus
九皇叔叔15 天前
【01】SpringBoot3 MybatisPlus 工程创建
java·mybatis·springboot3·mybatis plus
小坏讲微服务2 个月前
Spring Boot 4.0 新特性整合 MyBatis-Plus 完整教程
java·spring boot·后端·spring cloud·微服务·mybatis·mybatis plus
小坏讲微服务2 个月前
Spring Boot 4.0 与 MyBatis Plus 整合完整指南
java·spring boot·后端·mybatis·springcloud·mybatis plus·java开发
小坏讲微服务2 个月前
SpringCloud整合Scala实现MybatisPlus实现业务增删改查
java·spring·spring cloud·scala·mybatis plus
后端小张3 个月前
【JAVA 进阶】Mybatis-Plus 实战使用与最佳实践
java·spring boot·spring·spring cloud·tomcat·mybatis·mybatis plus
gorgor在码农8 个月前
Spring Boot多数据源切换:三种实现方式详解与实战
java·spring boot·后端·mybatis·mybatis plus·多数据源切换