diff --git a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java b/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java index 2a7b43216b23aa7b13a8d2d5bba9ba7fd8b58344..b022f21b62479db8e9a2d72c37e72d3252635b28 100755 --- a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java +++ b/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java @@ -549,12 +549,21 @@ public abstract class AbstractWrapper value) { if (CollectionUtils.isEmpty(value)) { - return () -> "()"; + return whenCollectionIsEmpty(); } return () -> value.stream().map(i -> formatParam(null, i)) .collect(joining(StringPool.COMMA, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET)); } + /** + * 当in的参数为null或空时的动态sql + */ + private ISqlSegment whenCollectionIsEmpty(){ + // 为避免出现 "where 字段 in ()" 这样有语法错误的sql,强行弄成"where 字段 in (null)" + // 这样虽然也不完美,但是大多数时候还是挺方便的 + return () -> "(null)"; + } + /** * 获取in表达式 包含括号 * @@ -562,7 +571,7 @@ public abstract class AbstractWrapper "()"; + return whenCollectionIsEmpty(); } return () -> Arrays.stream(values).map(i -> formatParam(null, i)) .collect(joining(StringPool.COMMA, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET));