mybatisPlus3.5.1有个奇葩bug的解决方法


1.啥bug?

1.1mybatisPlus官网及GitHub项目地址

https://baomidou.com/
https://github.com/baomidou/mybatis-plus
https://github.com/baomidou/mybatis-plus/releases (官方发布的各个稳定版本)


1.2 bug问题

在使用mybatisPlus3.5.1分页查询的时候报了下面这个错,分页的count正常执行,但是分页查询就报下面这个错,这个问题网上千篇一律的添加sqlParser配置,Mapper添加啥注解,我试过了没啥鸟用,这个bug是mysqlPlus的一个租户相关会去解析sql检查执行的sql字段中是否包含关键字,如果包含关键字直接报如下的错误,乍一看自己写的sql在Navicat客户端上还可以正常执行,怎么mybatisPlus执行就报这种奇葩的错误,也是让人蛋疼的问题,所以进过各种尝试之后找到了可以行的解决办法,分享给大家,希望对大家有所帮助,报错如下:
net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "," ","    at line 1, column 22.
Was expecting one of:
"&" "::" ";" "<<" ">>" "ACTION" "ACTIVE" "ALGORITHM" "ARCHIVE" "ARRAY" "AS" "AT" "BYTE" "CASCADE" "CASE" "CAST" "CHANGE" "CHAR" "CHARACTER" "CHECKPOINT" "COLLATE" "COLUMN" "COLUMNS" "COMMENT" "COMMIT" "CONNECT" "COSTS" "CYCLE" "DBA_RECYCLEBIN" "DESC" "DESCRIBE" "DISABLE" "DISCONNECT" "DIV" "DO" "DUMP" "DUPLICATE" "EMIT" "ENABLE" "END" "EXCLUDE" "EXTRACT" "FALSE" "FILTER" "FIRST" "FLUSH" "FN" "FOLLOWING" "FORMAT" "FULLTEXT" "GROUP" "HAVING" "HISTORY" "INDEX" "INSERT" "INTERVAL" "INTO" "ISNULL" "JSON" "KEY" "LAST" "LEADING" "LINK" "LOCAL" "LOG" "MATERIALIZED" "NO" "NOLOCK" "NULLS" "OF" "OPEN" "OVER" "PARALLEL" "PARTITION" "PATH" "PERCENT" "PRECISION" "PRIMARY" "PRIOR" "QUERY" "QUIESCE" "RANGE" "READ" "RECYCLEBIN" "REGISTER" "REPLACE" "RESTRICTED" "RESUME" "ROW" "ROWS" "SCHEMA" "SEPARATOR" "SEQUENCE" "SESSION" "SHUTDOWN" "SIBLINGS" "SIGNED" "SIZE" "SKIP" "START" "SUSPEND" "SWITCH" "SYNONYM" "SYSTEM" "TABLE" "TABLESPACE" "TEMP" "TEMPORARY" "TIMEOUT" "TO" "TOP" "TRUE" "TRUNCATE" "TRY_CAST" "TYPE" "UNQIESCE" "UNSIGNED" "USER" "VALIDATE" "VALUE" "VALUES" "VIEW" "WINDOW" "XML" "ZONE" "[" "^" "|"


2.解决方法

2.1根据报错修改表中字段

将表中字段包含mysql关键字的字段给去掉,然后重试,这个也是有点麻烦的,对比字段都不知道哪个包含关键字的。


2.2 升级JSqlParser依赖的版本

由于mybatisPlus3.5.1的JSqlParser依赖是4.2
<dependency>  <groupId>com.baomidougroupId>  <artifactId>mybatis-plus-boot-starterartifactId>  <version>3.5.1version>  <exclusions>        <exclusion>       <artifactId>jsqlparserartifactId>       <groupId>com.github.jsqlparsergroupId>     exclusion>  exclusions>dependency>       <dependency>   <groupId>com.github.jsqlparsergroupId>   <artifactId>jsqlparserartifactId>   <version>4.6version>dependency>
这种方式虽然解决了上面的问题,但是又会出现新的问题:
主要是存在换行的sql会报错:
ParseException: Encountered unexpected token: “\n\n\n”
解决方法:升级mybatisplus到3.5.5,这个是mybatisplus的一个bug。


2.3升级mybatisPlus的版本

将mybatisPlus的版本升级到3.5.5,就可以成功的解决上面的两个bug了,亲测有效。


3.mysql关键字大全

4.总结

mybatisPlus3.5.1及以下版本估计都有这个问题的,所以最好的办法就是升级,但是升级有可能有意向不到的问题,所以升级后需要做充分的测试验证,以免生产翻车,或者可以去看源码debug尝试定位是哪行代码的问题,然后试图去修复下看看能不能修复,修复不了可以找官方看看能不能提个issue,将bug反馈给官方,一般升级到大于当前的文档版本是没有啥问题的(相关版本依赖需要匹配),基本都可以解决,如果还是解决不了,那么就得考虑替代方案了,本文这个问题,不升级可以将表中字段包含的关键字去掉就可以了,就是有点麻烦,直接升级到3.5.5不用修改表中字段就省事情的解决了,可以选择适合你自己的方式方法,本次分享到此结束,希望我的分享能对你有所启发和帮助,请一键三连,么么么哒!

请使用浏览器的分享功能分享到微信等