报错信息:
caused by: net.sf.jsqlparser.parser.parseexception: encountered unexpected token: "=" "="
报错sql
<select id="tablelist" resulttype="org.jeecg.modules.activiti.modules.entity.tableinfo">
select
table_name, table_comment, create_time
from information_schema.tables
where table_schema = (select database()) and table_name not like 'act_%' and table_name not like 'sys_%'
<if test="tablename != null and tablename.trim() != ''">
and table_name like concat('%', #{tablename}, '%')
</if>
order by create_time desc
</select>
错误信息:
caused by: net.sf.jsqlparser.parser.parseexception: encountered unexpected token: "=" "="
at line 3, column 22.
was expecting one of:
"&"
"&&"
")"
"::"
"<<"
">>"
"and"
"at"
"collate"
"connect"
"except"
"for"
"group"
"having"
"intersect"
"minus"
"or"
"start"
"union"
"xor"
"["
"^"
"|"
at net.sf.jsqlparser.parser.ccjsqlparser.generateparseexception(ccjsqlparser.java:30694)
at net.sf.jsqlparser.parser.ccjsqlparser.jj_consume_token(ccjsqlparser.java:30527)
at net.sf.jsqlparser.parser.ccjsqlparser.fromitem(ccjsqlparser.java:7692)
at net.sf.jsqlparser.parser.ccjsqlparser.plainselect(ccjsqlparser.java:5443)
at net.sf.jsqlparser.parser.ccjsqlparser.setoperationlist(ccjsqlparser.java:5645)
at net.sf.jsqlparser.parser.ccjsqlparser.selectbody(ccjsqlparser.java:5324)
at net.sf.jsqlparser.parser.ccjsqlparser.select(ccjsqlparser.java:5319)
at net.sf.jsqlparser.parser.ccjsqlparser.singlestatement(ccjsqlparser.java:232)
at net.sf.jsqlparser.parser.ccjsqlparser.statement(ccjsqlparser.java:153)
at net.sf.jsqlparser.parser.ccjsqlparserutil.parsestatement(ccjsqlparserutil.java:188)
1.方法1:先排除自己的代码书写类错误,
类如sql错误,引用类错误,
我的其中一个原因就是mapper对应实体的包名错误,因为是合并别的项目拷贝过来的,包名错误竟然还能编译通过启动,真tm的邪门。。。。。
方法2::在mapper层的请求方法上 忽略mybatis的解析
有的博客说@interceptorignore(tenantline = "true")的作用是对某个mapper方法 忽略多租户处理,从这次报错来看不仅是这个作用,感觉应该还有忽略mysql关键词解析的作用,因为我的sql包含关键词database
@interceptorignore(tenantline = "true")
list<tableinfo> tablelist(string tablename);
至此我的bug用上面的方法已经解决了,
加上一些别的问题把问题弄复杂了,搞了几个小时
别的搜到的方法也记下吧
=====================================================================
原因:
mybatis-plus包与原本存在的pagehelper存在com.github.jsqlparser:jsqlparser冲突
解决方案:
解决:
方法3.排除其他依赖中的jsqlparser的包,引入新的jsqlparser,
也可以只排除在其中一个的,使用另一个的jsqlparser包,不用重新导入
排除pagehelper中的jsqlparser
<dependency>
<groupid>com.github.pagehelper</groupid>
<artifactid>pagehelper-spring-boot-starter</artifactid>
<version>${pagehelper.boot.version}</version>
<exclusions>
<!-- 解决jsqlparser 依赖版本冲突-->
<exclusion>
<artifactid>jsqlparser</artifactid>
<groupid>com.github.jsqlparser</groupid>
</exclusion>
</exclusions>
</dependency>
排除mybatis-plus中的jsqlparser
<!-- mybatis-plus 增强crud -->
<dependency>
<groupid>com.baomidou</groupid>
<artifactid>mybatis-plus-boot-starter</artifactid>
<version>3.4.1</version>
<exclusions>
<!-- 解决jsqlparser 依赖版本冲突–>-->
<exclusion>
<artifactid>jsqlparser</artifactid>
<groupid>com.github.jsqlparser</groupid>
</exclusion>
</exclusions>
</dependency>
引入新的jsqlparser jsqlparser最好还是原来的版本
不知道的话看下 allvalue类所在的版本
<dependency>
<groupid>com.github.jsqlparser</groupid>
<artifactid>jsqlparser</artifactid>
<version>4.4</version>
</dependency>
方法4.修改mybatis-plus或pagehelper包的版本,这个就需要自己试试了
发表评论