当前使用版本(必填,否则不予处理)
3.4.3.4
该问题是如何引起的?(确定最新版也有问题再提!!!)
正常使用。
重现步骤(如果有就写完整)
1、引入3.4.3.4包
2、配置分页插件 @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return mybatisPlusInterceptor; }
3、分页查询 Page
报错信息
生成的count语句:Actual SQL: slave ::: SELECT COUNT() AS total FROM t_test WHERE data_status = ? ::: [1] mysql执行预发错误
Comment From: miemieYaho
最新版给出复现demo
Comment From: astorage
最新版给出复现demo
目前新版本是3.5.2,我测试了这个问题已经修复了。
在countsql自动生成的方法autoCountSql中:在sql优化标志是true(默认), 没有groupby,没有distinct,没有orderby。select字段没有“?”的情况, 不走lowLevelCountSql逻辑。直接plainSelect.setSelectItems(COUNT_SELECT_ITEM);
两个版本生成的count语句如下: 3.4.3.4版本:COUNT() AS total 3.5.2版本:COUNT(*) AS total
也看了源码,3.4.3.4和3.5.2差别如下:
3.4.3.4版本
protected static final List<SelectItem> COUNT_SELECT_ITEM = Collections.singletonList(defaultCountSelectItem());
private static SelectItem defaultCountSelectItem() {
Function function = new Function();
function.setName("COUNT");
function.setAllColumns(true);
return new SelectExpressionItem(function).withAlias(new Alias("total"));
}
public String toString() {
String params;
if (parameters != null || namedParameters != null) {
...........
} else {
params = "()";
}
String ans = getName() + params;
...........
return ans;
}
3.5.2版本
protected static final List<SelectItem> COUNT_SELECT_ITEM = Collections.singletonList((new ((new
Column()).withColumnName("COUNT(*)"))).withAlias(new Alias("total")));
@Override
public String toString() {
return expression + ((alias != null) ? alias.toString() : "");
}
Comment From: Qwenjin
3.4.x版本能不能加个版本修复这个bug?3.5.x变更太大了,不敢升级
Comment From: elminsterjimmy
今天在做安全升级的时候也碰到一样的问题了
一个WA: 手工关掉count optimize
com.baomidou.mybatisplus.extension.plugins.pagination.Page.setOptimizeCountSql(false)
Comment From: haotonghui000
Page<User> rowPage = new Page(currentPage, pageSize);
rowPage.setOptimizeCountSql(false);
设置完后total还可以查出来 而且也不出错了