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

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"
    "["
    "^"
    "|"
    <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关键字大全

dd4c605812ad4eaf803a0efdfc66e186

4.总结

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

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值