mybatis-plus 聚合函数使用的时候 自动分页时total 不准或者获取失败解决办法

参考博客:https://blog.csdn.net/seantdj/article/details/99949281

我在写一个条件分页查询时,使用mybatis-plus遇到一个问题,
这是我的sql代码

mybatis-plus 聚合函数使用的时候 自动分页时total 不准或者获取失败解决办法_第1张图片
 
这里我使用了ifnull聚合函数结果reviewStatus 作为条件查询,分页查询时报错:在进入paginationInterceptor queryTotal找不到clounm “ reviewStatus ”这个字段

打断点进入PaginationInterceptor拦截类的


 
方法查询total的sql

mybatis-plus 聚合函数使用的时候 自动分页时total 不准或者获取失败解决办法_第2张图片
 
导致的这种bug该怎么处理? 分页查询很多时候都会使用到聚合函数并以之为条件进行查询,然后拦截进行查询的时候别名就不能识别

 

解决办法:

MybatisPlus 是目前最好用的Mybatis增强工具,比如它的分页功能,不过有时也会遇到点问题
最近在使用分页功能的时候发现统计到的total和预期不符,于是在控制台查看分页count sql,
发现mybatis自动优化了sql,把select 后面要查询的内容全部省略,直接count。这是mysql自动优化的策略。
正常情况下这样做并没有什么问题,但是当我select 后面需要聚合,比如使用sum函数的时候,自动优化得到的total就会比预期多。
当日解决办法也是有的,就是禁用自动优化

page.setOptimizeCountSql(false);
1
这样他会在你原先的SQL外面包一层select count(1) from (原先的SQL) total,那么得到的记录数就和预期一样了
不过我还是不太推荐这么做,因为本身SQL有聚合,原先的SQL相当于查询全部数据,效率比较低。
推荐自己写count sql,去掉聚合
代码如下:

page.setSearchCount(false);
page.setTotal(mapper.repListCount(sns));
1
2
repListCount就是自己写的count sql
————————————————
版权声明:本文为CSDN博主「seantdj」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/seantdj/article/details/99949281

你可能感兴趣的:(springboot,mysql)