MyBatis-Plus 中 SQL 注释引发的诡异解析异常:failed to concat orderBy from IPage

UG NX二次开发(C#)--详细讲述编程模板NXOpen_CS_Wizard的代码意义,帮你轻松进入NXOpen(C#)二次开发 有几个读者私信问我,在看了“NX1957在VS2019上二次开发的环境配置”后,能完成了UG NX二次开发(C#)模板的配置,也能根据模板创建工程,但是对工程文件.cs不甚理解;并且,在UG Styler新建完成后,其也有一个dlx文件和.cs文件,也不清楚怎么使用。本文先对UG NX二次开发(C#)模板文件进行讲解,在下一个博客中,讲解Styler新建后的模板文件。以上就是对编程模板NXOpen_CS_Wizard(c#)的讲解,其实只要明白了逻辑关系,编程实现只是时间问题,祝你好运。 阅读详情

项目场景:

在开发或运行使用 MyBatis-Plus 分页功能的项目时,控制台突然抛出以下异常:

[http-nio-8082-exec-7] c.b.m.e.p.i.PaginationInnerInterceptor   failed to concat orderBy from IPage, exception:
java.util.concurrent.ExecutionException: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "group" "GROUP"
    at line 18, column 9.

Was expecting:
    <EOF>

问题排查

该异常直接指向 SQL 语法错误,且与分页时的 ORDER BY 拼接有关。通常需要检查:

  1. 分页查询的 Page 对象是否设置了正确的排序字段?
  2. 被分页的 SQL 语句本身语法是否正确?特别是 ORDER BY 子句附近。

根本原因分析

经过汗流浃背的排查,发现问题并非出现在 Page 对象的排序设置上,也不是 ORDER BY 子句本身的语法错误。

真正的罪魁祸首是:MyBatis-Plus 映射文件 (XXXMapper.xml) 中的 SQL 语句注释方式!


场景描述:

在一个较长的、包含 GROUP BY 子句的 SQL 语句中间,使用 XML 注释 (< !-- … -->) 注释掉了一段代码。

被注释掉的代码块恰好位于 GROUP BY 关键字之前或之中。

例如,原始有效的 SQL 结构可能是:

SELECT ... FROM ... WHERE ...
-- 这里被注释掉了一大段逻辑 (例如 JOIN 或 WHERE 条件)
GROUP BY ... -- 第18行附近
ORDER BY ...

在本案例中,注释导致了 GROUP BY 关键字直接暴露在了 SQL 语句中一个语法解析器无法理解的位置(例如,紧跟在某个未结束的表达式或子句之后,或者出现在 ORDER BY 应该出现的位置之前)。这使得 MyBatis-Plus 的分页拦截器在尝试追加 ORDER BY 时,整个 SQL 的语法结构已经因为之前的注释而被破坏,最终引发了 jsqlparser 在解析拼接后的 SQL 时遇到的 GROUP 关键字异常。


错误示例 (注释导致结构破坏):

<select id="selectComplexData" resultType="...">
    SELECT col1, col2, SUM(col3) AS total
    FROM main_table
    <!-- 原计划注释掉这个JOIN和相关条件,但注释位置不当 -->
    <!--
    JOIN other_table ON main_table.id = other_table.ref_id
    WHERE other_table.status = 'ACTIVE'
    AND some_condition = true
    -->
    GROUP BY col1, col2 -- 第18行:解析器期望前面有完整的FROM/JOIN/WHERE结构,但注释导致结构缺失
    ORDER BY col1 ASC
</select>

解决方案:

彻底删除无用代码: 将 XML 映射文件中被注释掉的、不再需要的 SQL 片段完全删除。这是最安全、最推荐的做法,避免未来维护者踩坑。

删除掉 XML 文件中导致 SQL 语法结构破坏的注释代码块后(或者将注释的sql挪到最后),SQL 语句恢复完整的、正确的语法结构。MyBatis-Plus 的分页拦截器 (PaginationInnerInterceptor) 能够正常地在原始 SQL 后追加 ORDER BY 子句,jsqlparser 也能正确解析拼接后的完整 SQL,异常消失,分页功能恢复正常。

经验总结:

  1. 警惕 XML 注释对 SQL 结构的影响: MyBatis XML 中的注释 (< !-- … -->)会物理移除注释内容。如果注释掉的是连接 SQL 关键部分的代码,极易导致剩余 SQL语法错误。这种错误往往比较隐蔽,因为注释掉的代码本身不执行,但会影响剩下的“可见”代码的结构。
  2. 清理无用代码: 长期不用的、注释掉的代码应及时清理,减少干扰和潜在风险。
  3. 理解分页拦截器的工作机制: MyBatis-Plus 的分页是通过拦截器修改原始 SQL 实现的。任何导致原始 SQL语法结构异常的因素(如本案例的注释破坏),都可能在拦截器拼接 ORDER BY 或 LIMIT 时暴露出来。
手把手教你完成基于matlab的LSTM时间序列分析 时间序列是按时间顺序组织的数字序列,是数据分析中重要的处理对象之一。时间序列的主要特点是数据获取方式一般具有客观性,能反映某种现象的变化趋势或统计指标,进而预测未来走向,这在本质上也是一个回归预测的问题。长短时记忆网络(Long Short-Term Memory,LSTM)是一种循环神经网络,适合处理有更长时间跨度的内部记忆,被广泛应用于时间序列分析,能够保持数据的内在持续性,反映数据的细粒度走势,具有良好的预测效果。 阅读详情

相关推荐

高德地图爬虫

高德地图爬虫 工具:Pycharm,win10,Python3.6.4 1.需求分析 这篇爬虫和上一篇百度地图爬虫要求一样,百度地图爬虫我发现有一个auth参数会一直变化,一旦变化则获取的数据是不准确的,所以我上高德地图看了一下,高德地图没有这个反爬机制。但是高德地图大概爬取120个页面就会跳一次验证码,我这里是通过换IP解决这个问题的。 2.数据准备 同样我们需要全国地级市信息,用之前...

123的博客 1万+

Mybatis使用IPAGE排序错误

这里”failed to concat orderBy from IPage, exception=null“只是提示你错误了,但是没有提及是哪里出现问题。

qq_34819372的博客 2399

微信小程序使用ucharts折线图,有负数显示0刻度线

当数据有负数和正数的时候默认不会显示0刻度线,不方便看出正负对比。

欢迎来到我的博客!在这里,我将分享我在前端开发方面的知识和经验。让我们一起探索前端开发的无限可能! 1579

解决mybatis-plus排序异常:failed to concat orderBy from IPage, exception=null

解决方案 String sql = "xxx"; // 放入不能正常进行排序的SQL语句 CCJSqlParserUtil.parse(sql); // 调用该方法,查看报错信息 根据parse方法执行时所抛出的异常信息中的line和column,定位出SQL语句中有问题的那一块代码,然后进行修正 将修正过后的SQL语句放入mapper中 注意,不要只看line和column给出位置的代码...

kenzo2017的博客 5314

修复ASUS in WinRE教程

暑假入手了天选三,发现是win11家庭版,本来想着家庭版将就一下无所谓,结果在使用的过程中发现相较于专业版真的是不能比,于是自己就重装了系统,发现ASUS in WinRE入口不见了,折腾半天最后成功修复。

weixin_46202629的博客 1万+

Deepseek 10分钟化身理性荐股神器:触碰程序员不敢想的天花板

在这个消息疯狂、波动频繁的市场,“理性”两字显得弥足珍贵。通过Deepseek+AkShare+Aktools+Dify四位一体的方案,能帮我们降低信息搜集成本,并在短期投资领域搭建出一套“可解释、低门槛、易定制”的量化荐股流程。不要再盲目听小道消息或依赖情绪驱动,不妨给自己一个机会,让数据说话。而要注意的是,“理性荐股”并非万能,它只是工具,最终的收益还得依赖投资者自身对风险和机遇的权衡。祝大家都能在这股市里收获理性的底气,寻得更精准的入场时机。

qqxdh的博客 3750

myBatis-plus page分页插件的排序无效(failed to concat orderBy from IPage, exception=null)

主要原因是 jsqlparser 解析sql时出错,抛出异常 mybatis-plus捕获 记录了failed to concat orderBy from IPage, exception=null logger.warn("failed to concat orderBy from IPage, exception=" + e.getMessage()); 请检查sql中是否有关键字未用 ` `, 可以使用 CCJSqlParserUtil.parse(sql);来判断sql是否可以被解析. 本人遇到

qq_41094351的博客 4274

深入解析音频信号处理的核心算法——傅里叶变换、语音增强、回声消除与主动降噪

本文系统介绍了现代音频信号处理的核心技术。首先阐述傅里叶变换作为理论基础的重要性,它能将声音分解为频域成分。随后重点分析三大关键技术:语音增强利用谱减法、维纳滤波和深度学习从噪声中提取人声;回声消除采用自适应滤波器消除通话中的回声;主动降噪通过声波干涉原理抵消环境噪声。文章最后指出,这些技术在实际应用中协同工作,形成完整的音频处理链路,共同提升语音质量和听觉体验。随着算法进步和算力提升,音频处理技术正向着更智能、更高效的方向发展。

程序猿老樊的博客 1325

mybatis-plus 排序遇到的坑

sql不能有以下字段,否则会报“ failed to concat orderBy from IPage, exception= ”异常 net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "(" "(" at line 28, column 3. Was expecting one of...

u010614534的专栏 5482

【AI基础学习系列】二十一、一文搞懂GPT

本文系统介绍了GPT(Generative Pre-trained Transformer)模型的核心内容。首先阐述了GPT的本质是基于Transformer的预训练语言模型,其创新在于使用单向Transformer编码器。其次详细解析了GPT架构,包括输入层的Tokenization和Embedding处理、Transformer解码器堆叠的核心组件(自注意力机制、前馈神经网络等)以及预训练和微调两阶段训练过程。接着说明了GPT的工作原理:通过无监督预训练学习语言统计规律,再结合有监督微调适应具体任务。

ASH_GUARDIAN的博客 1685

GPU硬件架构与微架构深度解析28-稀疏计算:稀疏矩阵计算的硬件支持

本文介绍了GPU加速稀疏计算的关键技术。主要内容包括:1)稀疏数据的存储格式(COO、CSR、CSC)及其特点;2)现代GPU的稀疏计算硬件优化,如NVIDIA的稀疏张量核心和内存访问优化;3)稀疏计算在推荐系统、NLP和科学计算等领域的应用案例;4)性能优化技巧,包括存储格式选择、硬件特性利用和混合精度计算等。文章指出,专用稀疏计算技术可显著提升AI和大规模科学计算的效率,相比传统方法可获得5-10倍的性能提升。

2301_79143213的博客 111

java.util.concurrent.ExecutionException: net.sf.jsqlparser.parser.ParseException: Encountered unexpe

【代码】java.util.concurrent.ExecutionException: net.sf.jsqlparser.parser.ParseException: Encountered unexpe。

poem_2010的博客 4277

金属表面粗糙度对信号的影响

之前的文章中,已经采用CST中的微带线模块进行了很多的仿真分析,本文将再次利用这些模块,从另外一个角度去探讨关于传输线的使用问题--金属的表面粗糙度。 众所周知,数据传输中,当速率越来越高时,信号在金属介质中的趋肤效应就愈发明显,能量就会更多地集中于金属的表面进行流动,此时,如果金属表面不再光滑而是凹凸不平,能量的传输过程就会产生波动,当这种波动积累到一定的量级,就会严重影响到传输线的阻抗稳定性,从而导致信号失真和传输异常。

一只豌豆象的博客 2895

mysql-plus 设置问题

问题: 在spring项目中mapper 里的sql 语句无法执行 在Navicat中可以运行,一些关键字会被认为错误 ### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: net.sf.jsqlparser.parser.ParseExcept...

xu2693119912的博客 1681

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

sql异常:Encountered unexpected token: “.“ “.“

一、问题描述 在用mybatis-plus的过程中,没排序就好好的,一旦排序,报如下错误: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "." "." at line 14, column 11. Was expecting one of: "&" "," "::" ";" "<<" ">>" "ACTION"

mashangzhifu的博客 3万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【无标题】mybatis-plus使用报错

项目运行页面首次查询报错500, 刷新查询不报错;使用MPJLambdaWrapper,未使用直接的sql命令。报错的mysql单独在数据库中执行不报错(sql语句没问题)百度网上很多情况,我的错误导入这个依赖就可以解决。pom.xml文件导入依赖,不报错。使用mybatis-plus。

sumishiwo的博客 2754

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MyBatis Plus 模糊查询报错, 但是不影响返回结果[解决]

@[TOC]MyBatis Plus 查询报错, 但是不影响返回结果) 1 现状 模糊查询报错, 但不影响查询结果 2 报错信息 optimize this sql to a count sql has exception, sql: xxxxxxxxxxxxxxxxxxxxx ...(控制台打印了一串排版很乱的sql语句) xxxxxxxxxxxxxxxxxxxxx , exception: net.sf.jsqlparser.parser.ParseException: Encountered

weixin_53008424的博客 8583

mybatisplus查询分页并且排序报错解决方法,适用于自定义sql和sqlserver

mybatisplus的分页查询很好用,当然大部分人分页后查询也没有问题,因为使用mybatis的构造器分页并且排序不会出现各种各样的问题,sql自动的帮你生成了。 但是当我们需要查询多张表时或者查询sql复杂的情况下,我们或许需要自己写sql,然后调用Page来实现分页。 唔姆,到这里都没有问题。 Page<持久层实体> queryPage = queryRepository.selectPageVo(new Page<持久层实体>(当前页, 页长度), 查询条件

weixin_43910915的博客 6279

mybatis-plus 多表联合查询指定列排序分页

1.在分页Page类中有一个属性是 List orders List<OrderItem> orders=new ArrayList<>(); OrderItem orderItem=new OrderItem(); orderItem.setColumn("clounm"); orderItem.setAsc(false); orders.add(orderItem); Page<T> p

qq_38030465的博客 3097

net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: “,“ “,“ 问题解决方案

在使用mybaits plus中的动态数据源配置使用时报以下错误!!!

IT_51888_liang的博客 6578

Mybatis-plus解析sql发生异常:net.sf.jsqlparser.JSQLParserException

在使用mybatis-plus的过程中,有一个jsonb字段使用了jsonb_exists_any (field_name, text[]) Caused by: net.sf.jsqlparser.JSQLParserException: Encountered unexpected token MyBatis_Plus框架中,有多租户的功能,MP会进行数据权限的过滤导致的,可以使用下面的注解(+配置)解决:@SqlParser(filter = true)、@InterceptorIgnore(tena

qq_24615389的博客 6173

运行tomcat Server报以下错误

运行tomcat Server报以下错误: 严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].S

Hello World专栏 2466

升级mybatis-plus到3.5.3.1和JSQLParser 从4.3升级到4.6版本引起的插入问题解决

升级mybatis-plus到3.5.3.1和JSQLParser 从4.3升级到4.6版本引起的插入问题解决

宁波阿成的博客 3492

解决 Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXXXX

解决 Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:XXXXXXX

m0_54761389的博客 8251

已解决java.util.concurrent.ExecutionException异常的正确解决方法,亲测有效!!!

java.util.concurrent.ExecutionException异常的正确解决方法,亲测有效!!!

小明的Java问道之路 2万+

optimize this sql to a count sql has exception, java.util.concurrent.ExecutionException:

找了网上半天 都是排除mybatisplus里面的parse包等,总是不成功,后面仔细看提示中12行16列,从xml中数,发现12行有个replace()函数 虽然可以运行 但是报错不爽,只能放到java中替换了。

oTianKongLan123的博客 1010
上一篇: Windows 本地安装启动 Redis
下一篇: 当 @Mapper 注解选错门:一个因导错包引发的“低级错误“全解析
刘火锅
博客等级 码龄7年 121粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值