PaginationInnerInterceptor optimize this sql to a count sql has exception, sql

方法一

sql使用了convert(name using gbk) asc进行排序发生了警告 当然只是警告没有报错 项目正常运行。

PaginationInnerInterceptor optimize this sql to a count sql has exception, sql:"select * from dict_city
          
        order by level asc, convert(name using gbk) asc", exception:
net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "(" "("
    at line 3, column 36.

Was expecting one of:

    "&"
    "::"
    ";"
    "<<"
    ">>"
    "ASC"
    "COLLATE"
    "DESC"
    "EMIT"
    "NULLS"
    "["
    "^"
    "|"
    <EOF>

看到是PaginationInnerInterceptor 发生的警告。
分页插件在处理count时会默认进行sql优化,优化失败会抛出异常
我们把这个优化去掉即可。

Page<DictCityEntity> page = Page.of(pageIndex, pageSize);
page.setOptimizeCountSql(false);

方法二

每次new Page都需要设置这个,我们可以在后台中自定义一个Page去继承com.baomidou.mybatisplus.extension.plugins.pagination.Page 然后在这个里面new的时候我们去设置,后面全部用这个自定义的Page去做分页处理。
自定义Page 继承mybatisplus的Page

public class Page<T> extends com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> {


    public Page(long pn, long ps) {
        super(pn, ps);
    }
    public Page(long pn, long ps,long total) {
        super(pn, ps,total);
    }

    public static <T> Page<T> of(Long pn, Long ps){
        if(pn == null || pn <= 0){
            pn = 1L;
        }
        if(ps == null || ps <= 0){
            ps = 10L;
        }
        Page<T> tPage = new Page<>(pn, ps);
        tPage.setOptimizeCountSql(false);
        return tPage;
    }
    public static <T> Page<T> of(RequestPage page){
        Page<T> tPage = new Page<>(page.getPn(), page.getPs());
        tPage.setOptimizeCountSql(false);
        return tPage;
    }

    public static <T> Page<T> newDefaultPage(){
        Page<T> tPage = new Page<>(1L, 10L);
        tPage.setOptimizeCountSql(false);
        return tPage;
    }


}

然后我们正常使用自己实现的Page of = Page.of(page);即可过滤掉这个警告。避免每次都要设置这个setOptimizeCountSql。

你可能感兴趣的:(java,mybatis,sql,数据库,java)