mybatisPlus3.5.1有个奇葩bug的解决方法
文章目录
- 1.啥bug?
- 1.1mybatisPlus官网及GitHub项目地址
- 1.2 bug问题
- 2.解决方法
- 2.1根据报错修改表中字段
- 2.2 升级JSqlParser依赖的版本
- 2.3升级mybatisPlus的版本
- 3.mysql关键字大全
- 4.总结
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"
"["
"^"
"|"
<EOF>
<K_DATETIMELITERAL>
<K_DATE_LITERAL>
<K_NEXTVAL>
<K_STRING_FUNCTION_NAME>
<S_CHAR_LITERAL>
<S_IDENTIFIER>
<S_QUOTED_IDENTIFIER>
2.解决方法
2.1根据报错修改表中字段
将表中字段包含mysql关键字的字段给去掉,然后重试,这个也是有点麻烦的,对比字段都不知道哪个包含关键字的。
2.2 升级JSqlParser依赖的版本
由于mybatisPlus3.5.1的JSqlParser依赖是4.2
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
<exclusions>
<!-- 解决jsqlparser 依赖版本解析问题-->
<exclusion>
<artifactId>jsqlparser</artifactId>
<groupId>com.github.jsqlparser</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.6</version>
</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不用修改表中字段就省事情的解决了,可以选择适合你自己的方式方法,本次分享到此结束,希望我的分享能对你有所启发和帮助,请一键三连,么么么哒!