由于项目组件升级,所以需要升级mybatis-plus到3.5.3.1和JSQLParser 从4.3升级到4.6版本,但发现用标准的插入也会报错,如下:
### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: INSERT INTO sys_deploy_form ( id, form_id, deploy_id, form_flag, create_by, create_time, sys_org_code ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:196) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ... 134 common frames omitted Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: INSERT INTO sys_deploy_form ( id, form_id, deploy_id, form_flag, create_by, create_time, sys_org_code ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:39) at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserMulti(JsqlParserSupport.java:74) at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.beforePrepare(TenantLineInnerInterceptor.java:81) at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:102) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy609.prepare(Unknown Source) at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:87) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at org.jeecg.config.mybatis.MybatisInterceptor.intercept(MybatisInterceptor.java:135) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy608.update(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy608.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) ... 140 common frames omitted Caused by: java.util.concurrent.ExecutionException: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "\n\n\n" <ST_SEMICOLON> at line 3, column 11.
但用JSQLParser4.3是正常,所以就只能问官方JSQLParser了,回复如下:
Re: [JSQLParser/JSqlParser] [BUG] JSQLParser Version 4.6:mysql5.7ParseException: Encountered unexpected token: "\n\n\n" <ST_SEMICOLON> (Issue#1842) manticore-projects We know that MyBatis inserts 2 empty lines into the statements and we suggest to fix it upstream in their software.
从上面看应该是mybatis-plus的问题了,所以后来问了mybatis-plus官方,确实上面有类似的问题
看来只能后续升级mybatis-plus来解决了,不过有一个临时的解决办法就是如下:
就是增加一个配置来临时解决版本冲突问题。
#mybatis-plus出现两个空行问题,后续版本应该会修正,临时先加这个解决与JSqlParser4.6冲突问题
shrink-whitespaces-in-sql: true
mybatis-plus: mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml,classpath*:com/nbcio/modules/**/xml/*Mapper.xml global-config: # 关闭MP3.0自带的banner banner: false db-config: #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)"; id-type: ASSIGN_ID # 默认数据库表下划线命名 table-underline: true configuration: # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 返回类型为Map,显示null对应的字段 call-setters-on-nulls: true #mybatis-plus出现两个空行问题,后续版本应该会修正,临时先加这个解决与JSqlParser4.6冲突问题 shrink-whitespaces-in-sql: true