使用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());
相关推荐
孤蓬&听雨8 个月前
MyBatis和MyBatis Plus比较详解
java·mybatis·mybatis plus·持久层
鱼鱼大头鱼8 个月前
1. 使用MyBatis的ResultHandler实现流式查询,避免大数据量一次加载
mybatis·mybatis plus·resulthandler·mybatis流式查询·流式查询
厂里英才8 个月前
Mybatis plus批量插入的优化
java·spring boot·后端·mybatis plus
青石路8 个月前
都说了能不动就别动,非要去调整,出生产事故了吧 → 补充
mybatis·mybatis plus·druid·hikari
Joseph 乔1 年前
【MyBatis-Plus】多数据源分页配置(低版本暂时就支持一种(可选),高版本多支持)
mybatis plus
求知.1 年前
【MyBatis Plus】深入探索 MyBatis Plus 的条件构造器,自定义 SQL语句,Service 接口的实现
mybatis plus
求知.1 年前
【MyBatis Plus】初识 MyBatis Plus,在 Spring Boot 项目中集成 MyBatis Plus,理解常用注解以及常见配置
mybatis plus
Hello Dam1 年前
若依管理系统后端将 Mybatis 升级为 Mybatis-Plus
mybatis·若依管理系统·mybatis plus