baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.32k stars 4.3k forks source link

自定义批量逻辑删除方法 #963

Closed shmily2038 closed 5 years ago

shmily2038 commented 5 years ago

当前使用版本(必须填写清楚,否则不予处理)

3.1.0

该问题是怎么引起的?*([最新版](https://search.maven.org/search?q=g:com.baomidou%20a:mybatis-)上已修复的会直接close掉)**

生成脚本的sql如上

重现步骤

先执行查询SQL,获取到数据列表,然后传入batchDelete方法,就报错

报错信息

Error updating database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, please exclude the tableName or statementId.

Error SQL: UPDATE user SET rec_status=1,modify_time=now(),rec_ver=rec_ver+1 WHERE rec_status=0 and ( (id,tenant_id,rec_ver) in ( (?,?,?) , (?,?,?) , (?,?,?) ) )

The error may exist in com/jlt/demo/mapper/UserMapper.java (best guess)

The error may involve com.jlt.demo.mapper.UserMapper.batchDelete

The error occurred while executing an update

Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, please exclude the tableName or statementId.

Error SQL: UPDATE user SET rec_status=1,modify_time=now(),rec_ver=rec_ver+1 WHERE rec_status=0 and ( (id,tenant_id,rec_ver) in ( (?,?,?) , (?,?,?) , (?,?,?) ) )] with root cause

net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "," "," at line 1, column 97.

Was expecting one of:

"&&"
")"
"AND"

at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:19398) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:19248) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:6088) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:6051) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:6142) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:6051) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.Expression(CCJSqlParser.java:6022) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.WhereClause(CCJSqlParser.java:5379) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.Update(CCJSqlParser.java:822) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.SingleStatement(CCJSqlParser.java:140) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.Statements(CCJSqlParser.java:455) ~[jsqlparser-1.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:152) ~[jsqlparser-1.4.jar:na]
at com.baomidou.mybatisplus.core.parser.AbstractJsqlParser.parser(AbstractJsqlParser.java:60) ~[mybatis-plus-core-3.1.0.jar:3.1.0]
at com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler.sqlParser(AbstractSqlParserHandler.java:66) ~[mybatis-plus-extension-3.1.0.jar:3.1.0]
at com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor.intercept(PaginationInterceptor.java:127) ~[mybatis-plus-extension-3.1.0.jar:3.1.0]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.0.jar:3.5.0]
at com.sun.proxy.$Proxy82.prepare(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) ~[mybatis-3.5.0.jar:3.5.0]
miemieYaho commented 5 years ago

自己写的自己排查

shmily2038 commented 5 years ago

自己写的自己排查

主要是框架底层报错,我的SQL在mysql上执行是正常的

miemieYaho commented 5 years ago

jsqlparser 报错,无法解析你的 sql,检查去除不必要的里面有使用 jsqlparser 的插件

shmily2038 commented 5 years ago

jsqlparser 报错,无法解析你的 sql,检查去除不必要的里面有使用 jsqlparser 的插件

知道有使用jsqlparser,但是SQL是正常的,估计这个插件无法解析此SQL语法,导致无法处理,只能换种姿势来,是吗?