方法一
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。