MyBatisPlus中IN的使用
原java代码块
Page<CrmCustomer> customerPage = baseMapper.selectPage(page, Wrappers.lambdaQuery(crmCustomer)
.eq(CrmCustomer::getOpenSeaFlag, CommonConstants.ZERO)
.in(CrmCustomer::getUserId, userIdList));
查询条件userList,当userList为空的时候会报错误
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));
}
可以看到当数据为空的时候直接返回了一个“()”,解析到sql执行的时候就是
select * from crm_customer where user_id in ()
显然这样sql是无法解析的,因此在使用in传入集合参数的时候要判断是否为空。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix