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

文章介绍了在使用SQL排序时遇到的警告,特别是涉及`convert(nameusinggbk)asc`的表达式。问题源于PaginationInnerInterceptor在优化countSQL时的异常。解决方案包括禁用分页插件的SQL优化或创建自定义的Page类,在初始化时设置`optimizeCountSql(false)`,以避免每次都手动设置。
摘要由CSDN通过智能技术生成

方法一

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<T> 然后在这个里面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<Class> of = Page.of(page);即可过滤掉这个警告。避免每次都要设置这个setOptimizeCountSql。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值