原java代碼塊
Page<CrmCustomer> customerPage = baseMapper.selectPage(page, Wrappers.lambdaQuery(crmCustomer)
.eq(CrmCustomer::getOpenSeaFlag, CommonConstants.ZERO)
.in(CrmCustomer::getUserId, userIdList));
查詢條件userList唆缴,當(dāng)userList為空的時(shí)候會(huì)報(bào)錯(cuò)誤
Encountered unexpected token: "IN" "IN"
at line 7, column 14.
Was expecting one of:
"&"
")"
"::"
"<<"
">>"
"COLLATE"
"["
"^"
"|"
at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:31468) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:31301) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:9818) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:9696) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.XorExpression(CCJSqlParser.java:9678) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.Expression(CCJSqlParser.java:9649) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.WhereClause(CCJSqlParser.java:9037) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.PlainSelect(CCJSqlParser.java:5667) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:5867) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:5516) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.Select(CCJSqlParser.java:5511) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.SingleStatement(CCJSqlParser.java:232) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:153) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:188) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:63) ~[jsqlparser-4.4.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:38) ~[jsqlparser-4.4.jar:na]
at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:49) ~[mybatis-plus-extension-3.5.3.1.jar:3.5.3.1]
... 160 common frames omitted
MyBatisPlus中in的源碼如下
protected ISqlSegment inExpression(Object[] values) {
if (ArrayUtils.isEmpty(values)) {
return () -> "()";
}
return () -> Arrays.stream(values).map(i -> formatParam(null, i))
.collect(joining(StringPool.COMMA, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET));
}
可以看到當(dāng)數(shù)據(jù)為空的時(shí)候直接返回了一個(gè)“()”,解析到sql執(zhí)行的時(shí)候就是
select * from crm_customer where user_id in ()
顯然這樣sql是無(wú)法解析的晃听,因此在使用in傳入集合參數(shù)的時(shí)候要判斷是否為空。