参考博客:https://blog.csdn.net/seantdj/article/details/99949281
我在写一个条件分页查询时,使用mybatis-plus遇到一个问题,
这是我的sql代码
这里我使用了ifnull聚合函数结果reviewStatus 作为条件查询,分页查询时报错:在进入paginationInterceptor queryTotal找不到clounm “ reviewStatus ”这个字段
打断点进入PaginationInterceptor拦截类的
方法查询total的sql
导致的这种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