当前使用版本(必须填写清楚,否则不予处理)
3.3.0
该问题是怎么引起的?(最新版上已修复的会直接close掉)
分页查询附带排序时,MP在查询总数时把order By带进去了,sqlserver在select count的时候不能带order by 所有就报错了
重现步骤
IPage<WebNews> page = new Page<>(pageNum, pageSize);
webNewsService.lambdaQuery().orderByDesc(WebNews::getModitime).page(page);
报错信息
生成的SQL: SELECT COUNT(1) FROM ( SELECT ID FROM Web_News ORDER BY Moditime DESC ) TOTAL 数据库错误信息: The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
Comment From: miemieYaho
你这个是jsqlparser无法解析sql而生成的固定count格式
Comment From: 534519560
也就是我哪里没有配置好?那我再仔细检查检查,谢谢
Comment From: miemieYaho
https://github.com/baomidou/mybatis-plus/blob/3.0/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/optimize/JsqlParserCountOptimize.java 走到 131行了
Comment From: 534519560
经检查,是项目引用了低版本的jsqlparser导致的,再次感谢
Comment From: Horrypotter
@534519560 咋解决的,我项目里单纯引入了mybatis-plus,没有引入jsqlparser,应该没有低版本的问题,也是sqlserver加了排序就报错
Comment From: 534519560
@Horrypotter 检查下别的框架有没有引入?我是之前手动引入了1.2版本的jsqlparser,去掉后就可以了.用maven检查下jsqlparser有没有版本冲突