当前使用版本(必填,否则不予处理)

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 page = Page.of(currentPage, pageSize);

报错信息

生成的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还可以查出来 而且也不出错了

.