diff --git a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java index 0c7947f..94e6062 100644 --- a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java +++ b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java @@ -3,13 +3,15 @@ package com.github.yulichang.autoconfigure; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.github.yulichang.autoconfigure.conditional.MPJSqlInjectorCondition; +import com.github.yulichang.autoconfigure.consumer.MybatisPlusJoinIfAbsentConsumer; +import com.github.yulichang.autoconfigure.consumer.MybatisPlusJoinPropertiesConsumer; import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.config.MPJInterceptorConfig; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; import com.github.yulichang.extension.mapping.config.MappingConfig; import com.github.yulichang.injector.MPJSqlInjector; import com.github.yulichang.interceptor.MPJInterceptor; import com.github.yulichang.toolkit.SpringContentUtils; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.slf4j.Logger; @@ -40,6 +42,7 @@ import javax.sql.DataSource; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.BiPredicate; /** * springboot 自动配置类 @@ -60,7 +63,7 @@ public class MybatisPlusJoinAutoConfiguration { public MybatisPlusJoinAutoConfiguration(MybatisPlusJoinProperties properties, ObjectProvider propertiesConsumers, - ObjectProvider ifAbsentConsumers) { + ObjectProvider ifAbsentConsumers) { this.properties = Optional.ofNullable(propertiesConsumers.getIfAvailable()).map(c -> c.config(properties)).orElse(properties); ConfigProperties.banner = this.properties.getBanner(); ConfigProperties.subTableLogic = this.properties.getSubTableLogic(); @@ -69,7 +72,8 @@ public class MybatisPlusJoinAutoConfiguration { ConfigProperties.joinPrefix = this.properties.getJoinPrefix(); ConfigProperties.logicDelType = this.properties.getLogicDelType(); ConfigProperties.mappingMaxCount = this.properties.getMappingMaxCount(); - ConfigProperties.ifAbsent = Optional.ofNullable(ifAbsentConsumers.getIfAvailable()).orElse(this.properties.getIfAbsent()); + ConfigProperties.ifAbsent = Optional.ofNullable(ifAbsentConsumers.getIfAvailable()) + .map(m -> (BiPredicate) m).orElse(this.properties.getIfAbsent()); info("mybatis plus join properties config complete"); } diff --git a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/consumer/MybatisPlusJoinIfAbsentConsumer.java b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/consumer/MybatisPlusJoinIfAbsentConsumer.java new file mode 100644 index 0000000..3e2287c --- /dev/null +++ b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/consumer/MybatisPlusJoinIfAbsentConsumer.java @@ -0,0 +1,14 @@ +package com.github.yulichang.autoconfigure.consumer; + +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; + +import java.util.function.BiPredicate; + +/** + * 自定义IfAbsent策略 + * + * @author yulichang + * @since 1.4.9 + */ +public interface MybatisPlusJoinIfAbsentConsumer extends BiPredicate { +} diff --git a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinPropertiesConsumer.java b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/consumer/MybatisPlusJoinPropertiesConsumer.java similarity index 75% rename from mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinPropertiesConsumer.java rename to mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/consumer/MybatisPlusJoinPropertiesConsumer.java index 3c8a86b..24a4dc8 100644 --- a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinPropertiesConsumer.java +++ b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/consumer/MybatisPlusJoinPropertiesConsumer.java @@ -1,4 +1,6 @@ -package com.github.yulichang.autoconfigure; +package com.github.yulichang.autoconfigure.consumer; + +import com.github.yulichang.autoconfigure.MybatisPlusJoinProperties; /** * 自定义配置 diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/ConfigProperties.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/ConfigProperties.java index a777d84..b5335fa 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/ConfigProperties.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/ConfigProperties.java @@ -4,6 +4,9 @@ import com.github.yulichang.adapter.AdapterHelper; import com.github.yulichang.adapter.base.ITableInfoAdapter; import com.github.yulichang.config.enums.IfAbsentEnum; import com.github.yulichang.config.enums.LogicDelTypeEnum; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; + +import java.util.function.BiPredicate; /** * @author yulichang @@ -56,5 +59,5 @@ public class ConfigProperties { *

* NOT_BLANK 非空白字符串 例: "" -> false, " " -> false, "\r" -> false, "abc" -> true ... */ - public static MybatisPlusJoinIfAbsent ifAbsent = IfAbsentEnum.NOT_EMPTY; + public static BiPredicate ifAbsent = IfAbsentEnum.NOT_EMPTY; } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/MybatisPlusJoinIfAbsent.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/MybatisPlusJoinIfAbsent.java deleted file mode 100644 index e7e8b7a..0000000 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/MybatisPlusJoinIfAbsent.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.github.yulichang.config; - -import java.util.function.Predicate; - -/** - * 自定义IfAbsent策略 - * - * @author yulichang - * @since 1.4.9 - */ -public interface MybatisPlusJoinIfAbsent extends Predicate { -} diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/enums/IfAbsentEnum.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/enums/IfAbsentEnum.java index 91e7fa7..f04f852 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/enums/IfAbsentEnum.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/enums/IfAbsentEnum.java @@ -1,10 +1,10 @@ package com.github.yulichang.config.enums; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; import com.github.yulichang.toolkit.MPJStringUtils; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; import java.util.Objects; -import java.util.function.Predicate; +import java.util.function.BiPredicate; /** * 条件判断策略 @@ -12,29 +12,29 @@ import java.util.function.Predicate; * @author yulichang * @since 1.4.9 */ -public enum IfAbsentEnum implements MybatisPlusJoinIfAbsent { +public enum IfAbsentEnum implements BiPredicate { /** * 非null */ - NOT_NULL(Objects::nonNull), + NOT_NULL((val, key) -> Objects.nonNull(val)), /** * 非空字符串 例: "" -> false, " " -> true ... */ - NOT_EMPTY(val -> NOT_NULL.and(v -> v instanceof CharSequence).and(v -> MPJStringUtils.isNotEmpty((CharSequence) v)).test(val)), + NOT_EMPTY((val, key) -> NOT_NULL.test(val, key) && (!(val instanceof CharSequence) || MPJStringUtils.isNotEmpty((CharSequence) val))), /** * NOT_BLANK 非空白字符串 例: "" -> false, " " -> false, "\r" -> false, "abc" -> true ... */ - NOT_BLANK(val -> NOT_NULL.and(v -> v instanceof CharSequence).and(v -> MPJStringUtils.isNotBlank((CharSequence) v)).test(val)); + NOT_BLANK((val, key) -> NOT_NULL.test(val, key) && (!(val instanceof CharSequence) || MPJStringUtils.isNotBlank((CharSequence) val))); - private final Predicate predicate; + private final BiPredicate predicate; - IfAbsentEnum(Predicate predicate) { + IfAbsentEnum(BiPredicate predicate) { this.predicate = predicate; } @Override - public boolean test(Object obj) { - return this.predicate.test(obj); + public boolean test(Object obj, IfAbsentSqlKeyWordEnum keyword) { + return this.predicate.test(obj, keyword); } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractWrapper.java index c8b05a8..981aec3 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractWrapper.java @@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.toolkit.*; import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils; import com.baomidou.mybatisplus.core.toolkit.sql.StringEscape; import com.github.yulichang.config.ConfigProperties; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; import com.github.yulichang.kt.interfaces.CompareIfAbsent; import com.github.yulichang.kt.interfaces.Func; import com.github.yulichang.kt.interfaces.OnCompare; @@ -21,6 +20,7 @@ import com.github.yulichang.toolkit.MPJSqlInjectionUtils; import com.github.yulichang.toolkit.Ref; import com.github.yulichang.toolkit.TableList; import com.github.yulichang.toolkit.sql.SqlScriptUtils; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; import com.github.yulichang.wrapper.enums.PrefixEnum; import com.github.yulichang.wrapper.interfaces.CompareStrIfAbsent; import com.github.yulichang.wrapper.interfaces.FuncStr; @@ -32,6 +32,7 @@ import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BiPredicate; import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.function.Supplier; import static com.baomidou.mybatisplus.core.enums.SqlKeyword.*; @@ -127,7 +128,7 @@ public abstract class KtAbstractWrapper ifAbsent = ConfigProperties.ifAbsent; @Override public T getEntity() { @@ -180,11 +181,16 @@ public abstract class KtAbstractWrapper ifAbsent) { this.ifAbsent = ifAbsent; return typedThis; } + public Children setIfAbsent(Predicate ifAbsent) { + this.ifAbsent = (o, k) -> ifAbsent.test(o); + return typedThis; + } + @Override public Children allEq(boolean condition, Map, ?> params, boolean null2IsNull) { if (condition && CollectionUtils.isNotEmpty(params)) { diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/CompareIfAbsent.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/CompareIfAbsent.java index 39d552b..f379a63 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/CompareIfAbsent.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/CompareIfAbsent.java @@ -1,8 +1,10 @@ package com.github.yulichang.kt.interfaces; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; import kotlin.reflect.KProperty; +import java.util.function.BiPredicate; + /** * ifAbsent * @@ -12,86 +14,86 @@ import kotlin.reflect.KProperty; @SuppressWarnings("unused") public interface CompareIfAbsent extends Compare { - MybatisPlusJoinIfAbsent getIfAbsent(); + BiPredicate getIfAbsent(); default Children eqIfAbsent(KProperty column, Object val) { - return eq(getIfAbsent().test(val), null, column, val); + return eq(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.EQ), null, column, val); } default Children eqIfAbsent(String alias, KProperty column, Object val) { - return eq(getIfAbsent().test(val), alias, column, val); + return eq(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.EQ), alias, column, val); } default Children neIfAbsent(KProperty column, Object val) { - return ne(getIfAbsent().test(val), null, column, val); + return ne(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NE), null, column, val); } default Children neIfAbsent(String alias, KProperty column, Object val) { - return ne(getIfAbsent().test(val), alias, column, val); + return ne(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NE), alias, column, val); } default Children gtIfAbsent(KProperty column, Object val) { - return gt(getIfAbsent().test(val), null, column, val); + return gt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GT), null, column, val); } default Children gtIfAbsent(String alias, KProperty column, Object val) { - return gt(getIfAbsent().test(val), alias, column, val); + return gt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GT), alias, column, val); } default Children geIfAbsent(KProperty column, Object val) { - return ge(getIfAbsent().test(val), null, column, val); + return ge(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GE), null, column, val); } default Children geIfAbsent(String alias, KProperty column, Object val) { - return ge(getIfAbsent().test(val), alias, column, val); + return ge(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GE), alias, column, val); } default Children ltIfAbsent(KProperty column, Object val) { - return lt(getIfAbsent().test(val), null, column, val); + return lt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LT), null, column, val); } default Children ltIfAbsent(String alias, KProperty column, Object val) { - return lt(getIfAbsent().test(val), alias, column, val); + return lt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LT), alias, column, val); } default Children leIfAbsent(KProperty column, Object val) { - return le(getIfAbsent().test(val), null, column, val); + return le(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LE), null, column, val); } default Children leIfAbsent(String alias, KProperty column, Object val) { - return le(getIfAbsent().test(val), alias, column, val); + return le(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LE), alias, column, val); } default Children likeIfAbsent(KProperty column, Object val) { - return like(getIfAbsent().test(val), null, column, val); + return like(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE), null, column, val); } default Children likeIfAbsent(String alisa, KProperty column, Object val) { - return like(getIfAbsent().test(val), alisa, column, val); + return like(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE), alisa, column, val); } default Children notLikeIfAbsent(KProperty column, Object val) { - return notLike(getIfAbsent().test(val), null, column, val); + return notLike(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NOT_LIKE), null, column, val); } default Children notLikeIfAbsent(String alias, KProperty column, Object val) { - return notLike(getIfAbsent().test(val), alias, column, val); + return notLike(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NOT_LIKE), alias, column, val); } default Children likeLeftIfAbsent(KProperty column, Object val) { - return likeLeft(getIfAbsent().test(val), null, column, val); + return likeLeft(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_LEFT), null, column, val); } default Children likeLeftIfAbsent(String alias, KProperty column, Object val) { - return likeLeft(getIfAbsent().test(val), alias, column, val); + return likeLeft(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_LEFT), alias, column, val); } default Children likeRightIfAbsent(KProperty column, Object val) { - return likeRight(getIfAbsent().test(val), null, column, val); + return likeRight(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_RIGHT), null, column, val); } default Children likeRightIfAbsent(String alias, KProperty column, Object val) { - return likeRight(getIfAbsent().test(val), alias, column, val); + return likeRight(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_RIGHT), alias, column, val); } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java index f2ee99a..ac13e59 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java @@ -9,18 +9,19 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.*; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.github.yulichang.config.ConfigProperties; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; import com.github.yulichang.query.interfaces.CompareIfAbsent; import com.github.yulichang.query.interfaces.StringJoin; import com.github.yulichang.toolkit.Asserts; import com.github.yulichang.toolkit.TableHelper; import com.github.yulichang.toolkit.ThrowOptional; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; import lombok.Getter; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.BiPredicate; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -77,7 +78,7 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper tableNameFunc; @Getter - private MybatisPlusJoinIfAbsent ifAbsent = ConfigProperties.ifAbsent; + private BiPredicate ifAbsent = ConfigProperties.ifAbsent; /** * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity) @@ -93,7 +94,7 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper paramNameValuePairs, MergeSegments mergeSegments, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst, List selectColumns, List ignoreColumns, boolean selectDistinct, - MybatisPlusJoinIfAbsent ifAbsent) { + BiPredicate ifAbsent) { super.setEntity(entity); setEntityClass(entityClass); this.paramNameSeq = paramNameSeq; @@ -336,11 +337,16 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper setIfAbsent(MybatisPlusJoinIfAbsent ifAbsent) { + public MPJLambdaQueryWrapper setIfAbsent(BiPredicate ifAbsent) { this.ifAbsent = ifAbsent; return typedThis; } + public MPJLambdaQueryWrapper setIfAbsent(Predicate ifAbsent) { + this.ifAbsent = (o, k) -> ifAbsent.test(o); + return typedThis; + } + /** * 用于生成嵌套 sql *

故 sqlSelect selectColumn ignoreColumns from不向下传递

diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java index 5e4f5d2..4031175 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java @@ -11,13 +11,13 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.*; import com.github.yulichang.adapter.base.tookit.VersionUtils; import com.github.yulichang.config.ConfigProperties; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; import com.github.yulichang.query.interfaces.CompareIfAbsent; import com.github.yulichang.query.interfaces.StringJoin; import com.github.yulichang.toolkit.Asserts; import com.github.yulichang.toolkit.MPJSqlInjectionUtils; import com.github.yulichang.toolkit.TableHelper; import com.github.yulichang.toolkit.ThrowOptional; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; import com.github.yulichang.wrapper.interfaces.Chain; import lombok.Getter; @@ -28,6 +28,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.BiPredicate; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -90,7 +91,7 @@ public class MPJQueryWrapper extends AbstractWrapper ifAbsent = ConfigProperties.ifAbsent; public MPJQueryWrapper() { @@ -123,7 +124,7 @@ public class MPJQueryWrapper extends AbstractWrapper selectColumns, List ignoreColumns, boolean selectDistinct, - MybatisPlusJoinIfAbsent ifAbsent) { + BiPredicate ifAbsent) { super.setEntity(entity); setEntityClass(entityClass); this.paramNameSeq = paramNameSeq; @@ -148,11 +149,16 @@ public class MPJQueryWrapper extends AbstractWrapper setIfAbsent(MybatisPlusJoinIfAbsent ifAbsent) { + public MPJQueryWrapper setIfAbsent(BiPredicate ifAbsent) { this.ifAbsent = ifAbsent; return this; } + public MPJQueryWrapper setIfAbsent(Predicate ifAbsent) { + this.ifAbsent = (o, k) -> ifAbsent.test(o); + return this; + } + @Override protected String columnToString(String column) { if (checkSqlInjection && MPJSqlInjectionUtils.check(column)) { diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/interfaces/CompareIfAbsent.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/interfaces/CompareIfAbsent.java index 3867e5e..ccf8eb8 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/interfaces/CompareIfAbsent.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/interfaces/CompareIfAbsent.java @@ -1,7 +1,9 @@ package com.github.yulichang.query.interfaces; import com.baomidou.mybatisplus.core.conditions.interfaces.Compare; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; + +import java.util.function.BiPredicate; /** * 查询条件封装 @@ -13,7 +15,7 @@ import com.github.yulichang.config.MybatisPlusJoinIfAbsent; @SuppressWarnings("unused") public interface CompareIfAbsent extends Compare { - MybatisPlusJoinIfAbsent getIfAbsent(); + BiPredicate getIfAbsent(); /** * 等于 = @@ -23,7 +25,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children eqIfAbsent(R column, Object val) { - return eq(getIfAbsent().test(val), column, val); + return eq(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.EQ), column, val); } /** @@ -34,7 +36,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children neIfAbsent(R column, Object val) { - return ne(getIfAbsent().test(val), column, val); + return ne(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NE), column, val); } /** @@ -45,7 +47,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children gtIfAbsent(R column, Object val) { - return gt(getIfAbsent().test(val), column, val); + return gt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GT), column, val); } /** @@ -56,7 +58,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children geIfAbsent(R column, Object val) { - return ge(getIfAbsent().test(val), column, val); + return ge(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GE), column, val); } /** @@ -67,7 +69,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children ltIfAbsent(R column, Object val) { - return lt(getIfAbsent().test(val), column, val); + return lt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LT), column, val); } /** @@ -78,7 +80,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children leIfAbsent(R column, Object val) { - return le(getIfAbsent().test(val), column, val); + return le(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LE), column, val); } /** @@ -89,7 +91,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children likeIfAbsent(R column, Object val) { - return like(getIfAbsent().test(val), column, val); + return like(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE), column, val); } /** @@ -100,7 +102,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children notLikeIfAbsent(R column, Object val) { - return notLike(getIfAbsent().test(val), column, val); + return notLike(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NOT_LIKE), column, val); } /** @@ -111,7 +113,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children notLikeLeftIfAbsent(R column, Object val) { - return notLikeLeft(getIfAbsent().test(val), column, val); + return notLikeLeft(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NOT_LIKE_LEFT), column, val); } /** @@ -122,7 +124,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children notLikeRightIfAbsent(R column, Object val) { - return notLikeRight(getIfAbsent().test(val), column, val); + return notLikeRight(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NOT_LIKE_RIGHT), column, val); } /** @@ -133,7 +135,7 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children likeLeftIfAbsent(R column, Object val) { - return likeLeft(getIfAbsent().test(val), column, val); + return likeLeft(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_LEFT), column, val); } /** @@ -144,6 +146,6 @@ public interface CompareIfAbsent extends Compare { * @return children */ default Children likeRightIfAbsent(R column, Object val) { - return likeRight(getIfAbsent().test(val), column, val); + return likeRight(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_RIGHT), column, val); } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJAbstractWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJAbstractWrapper.java index d8d8b85..cd22de1 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJAbstractWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJAbstractWrapper.java @@ -13,12 +13,12 @@ import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils; import com.baomidou.mybatisplus.core.toolkit.sql.StringEscape; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.github.yulichang.config.ConfigProperties; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; import com.github.yulichang.toolkit.LambdaUtils; import com.github.yulichang.toolkit.MPJSqlInjectionUtils; import com.github.yulichang.toolkit.Ref; import com.github.yulichang.toolkit.TableList; import com.github.yulichang.toolkit.sql.SqlScriptUtils; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; import com.github.yulichang.wrapper.enums.PrefixEnum; import com.github.yulichang.wrapper.interfaces.*; import lombok.Getter; @@ -27,6 +27,7 @@ import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BiPredicate; import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.function.Supplier; import static com.baomidou.mybatisplus.core.enums.SqlKeyword.*; @@ -122,7 +123,7 @@ public abstract class MPJAbstractWrapper ifAbsent = ConfigProperties.ifAbsent; @Override public T getEntity() { @@ -175,6 +176,11 @@ public abstract class MPJAbstractWrapper ifAbsent) { + this.ifAbsent = ifAbsent; + return typedThis; + } + /** * 设置 ifAbsent * .setIfAbsent(val -> val != null && StringUtils.isNotBlank(val)) @@ -182,8 +188,8 @@ public abstract class MPJAbstractWrapper ifAbsent) { + this.ifAbsent = (obj, key) -> ifAbsent.test(obj); return typedThis; } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java index 08ba2c5..dcf5c84 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java @@ -6,10 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; import com.baomidou.mybatisplus.core.toolkit.*; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.github.yulichang.config.ConfigProperties; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; import com.github.yulichang.toolkit.LambdaUtils; import com.github.yulichang.toolkit.*; import com.github.yulichang.toolkit.support.ColumnCache; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; import com.github.yulichang.wrapper.interfaces.Chain; import com.github.yulichang.wrapper.interfaces.Query; import com.github.yulichang.wrapper.interfaces.QueryLabel; @@ -20,6 +20,7 @@ import lombok.Getter; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.BiPredicate; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -125,7 +126,7 @@ public class MPJLambdaWrapper extends MPJAbstractLambdaWrapper paramNameValuePairs, MergeSegments mergeSegments, SharedString paramAlias, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst, TableList tableList, Integer index, String keyWord, Class joinClass, String tableName, - MybatisPlusJoinIfAbsent ifAbsent) { + BiPredicate ifAbsent) { super.setEntity(entity); super.setEntityClass(entityClass); this.paramNameSeq = paramNameSeq; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/enums/IfAbsentSqlKeyWordEnum.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/enums/IfAbsentSqlKeyWordEnum.java new file mode 100644 index 0000000..43ad591 --- /dev/null +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/enums/IfAbsentSqlKeyWordEnum.java @@ -0,0 +1,22 @@ +package com.github.yulichang.wrapper.enums; + +/** + * if absent 枚举 + * + * @author yulichang + * @since 1.4.9 + */ +public enum IfAbsentSqlKeyWordEnum { + EQ, + NE, + GT, + GE, + LT, + LE, + LIKE, + NOT_LIKE, + LIKE_RIGHT, + NOT_LIKE_RIGHT, + LIKE_LEFT, + NOT_LIKE_LEFT +} diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareIfAbsent.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareIfAbsent.java index 4a8943a..2ac6ca4 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareIfAbsent.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareIfAbsent.java @@ -1,7 +1,9 @@ package com.github.yulichang.wrapper.interfaces; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; + +import java.util.function.BiPredicate; /** * {@link com.baomidou.mybatisplus.core.conditions.interfaces.Compare} @@ -12,85 +14,85 @@ import com.github.yulichang.config.MybatisPlusJoinIfAbsent; @SuppressWarnings("unused") public interface CompareIfAbsent extends Compare { - MybatisPlusJoinIfAbsent getIfAbsent(); + BiPredicate getIfAbsent(); default Children eqIfAbsent(SFunction column, Object val) { - return eq(getIfAbsent().test(val), null, column, val); + return eq(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.EQ), null, column, val); } default Children eqIfAbsent(String alias, SFunction column, Object val) { - return eq(getIfAbsent().test(val), alias, column, val); + return eq(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.EQ), alias, column, val); } default Children neIfAbsent(SFunction column, Object val) { - return ne(getIfAbsent().test(val), null, column, val); + return ne(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NE), null, column, val); } default Children neIfAbsent(String alias, SFunction column, Object val) { - return ne(getIfAbsent().test(val), alias, column, val); + return ne(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NE), alias, column, val); } default Children gtIfAbsent(SFunction column, Object val) { - return gt(getIfAbsent().test(val), null, column, val); + return gt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GT), null, column, val); } default Children gtIfAbsent(String alias, SFunction column, Object val) { - return gt(getIfAbsent().test(val), alias, column, val); + return gt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GT), alias, column, val); } default Children geIfAbsent(SFunction column, Object val) { - return ge(getIfAbsent().test(val), null, column, val); + return ge(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GE), null, column, val); } default Children geIfAbsent(String alias, SFunction column, Object val) { - return ge(getIfAbsent().test(val), alias, column, val); + return ge(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GE), alias, column, val); } default Children ltIfAbsent(SFunction column, Object val) { - return lt(getIfAbsent().test(val), null, column, val); + return lt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LT), null, column, val); } default Children ltIfAbsent(String alias, SFunction column, Object val) { - return lt(getIfAbsent().test(val), alias, column, val); + return lt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LT), alias, column, val); } default Children leIfAbsent(SFunction column, Object val) { - return le(getIfAbsent().test(val), null, column, val); + return le(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LE), null, column, val); } default Children leIfAbsent(String alias, SFunction column, Object val) { - return le(getIfAbsent().test(val), alias, column, val); + return le(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LE), alias, column, val); } default Children likeIfAbsent(SFunction column, Object val) { - return like(getIfAbsent().test(val), null, column, val); + return like(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE), null, column, val); } default Children likeIfAbsent(String alias, SFunction column, Object val) { - return like(getIfAbsent().test(val), alias, column, val); + return like(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE), alias, column, val); } default Children notLikeIfAbsent(SFunction column, Object val) { - return notLike(getIfAbsent().test(val), null, column, val); + return notLike(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NOT_LIKE), null, column, val); } default Children notLikeIfAbsent(String alias, SFunction column, Object val) { - return notLike(getIfAbsent().test(val), alias, column, val); + return notLike(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NOT_LIKE), alias, column, val); } default Children likeLeftIfAbsent(SFunction column, Object val) { - return likeLeft(getIfAbsent().test(val), null, column, val); + return likeLeft(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_LEFT), null, column, val); } default Children likeLeftIfAbsent(String alias, SFunction column, Object val) { - return likeLeft(getIfAbsent().test(val), alias, column, val); + return likeLeft(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_LEFT), alias, column, val); } default Children likeRightIfAbsent(SFunction column, Object val) { - return likeRight(getIfAbsent().test(val), null, column, val); + return likeRight(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_RIGHT), null, column, val); } default Children likeRightIfAbsent(String alias, SFunction column, Object val) { - return likeRight(getIfAbsent().test(val), alias, column, val); + return likeRight(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_RIGHT), alias, column, val); } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareStrIfAbsent.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareStrIfAbsent.java index c9f5922..aede362 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareStrIfAbsent.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareStrIfAbsent.java @@ -1,6 +1,8 @@ package com.github.yulichang.wrapper.interfaces; -import com.github.yulichang.config.MybatisPlusJoinIfAbsent; +import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum; + +import java.util.function.BiPredicate; /** * {@link com.baomidou.mybatisplus.core.conditions.interfaces.Compare} @@ -11,45 +13,45 @@ import com.github.yulichang.config.MybatisPlusJoinIfAbsent; @SuppressWarnings("unused") public interface CompareStrIfAbsent extends CompareStr { - MybatisPlusJoinIfAbsent getIfAbsent(); + BiPredicate getIfAbsent(); default Children eqIfAbsent(R column, Object val) { - return eq(getIfAbsent().test(val), column, val); + return eq(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.EQ), column, val); } default Children neIfAbsent(R column, Object val) { - return ne(getIfAbsent().test(val), column, val); + return ne(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NE), column, val); } default Children gtIfAbsent(R column, Object val) { - return gt(getIfAbsent().test(val), column, val); + return gt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GT), column, val); } default Children geIfAbsent(R column, Object val) { - return ge(getIfAbsent().test(val), column, val); + return ge(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.GE), column, val); } default Children ltIfAbsent(R column, Object val) { - return lt(getIfAbsent().test(val), column, val); + return lt(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LT), column, val); } default Children leIfAbsent(R column, Object val) { - return le(getIfAbsent().test(val), column, val); + return le(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LE), column, val); } default Children likeIfAbsent(R column, Object val) { - return like(getIfAbsent().test(val), column, val); + return like(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE), column, val); } default Children notLikeIfAbsent(R column, Object val) { - return notLike(getIfAbsent().test(val), column, val); + return notLike(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.NOT_LIKE), column, val); } default Children likeLeftIfAbsent(R column, Object val) { - return likeLeft(getIfAbsent().test(val), column, val); + return likeLeft(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_LEFT), column, val); } default Children likeRightIfAbsent(R column, Object val) { - return likeRight(getIfAbsent().test(val), column, val); + return likeRight(getIfAbsent().test(val, IfAbsentSqlKeyWordEnum.LIKE_RIGHT), column, val); } } diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/IfAbsentTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/IfAbsentTest.java index fe46ba4..2235568 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/IfAbsentTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/IfAbsentTest.java @@ -22,12 +22,24 @@ public class IfAbsentTest { @Test void ifAbsent() { + assert IfAbsentEnum.NOT_EMPTY.test("\t", null); + assert !IfAbsentEnum.NOT_EMPTY.test("", null); + assert IfAbsentEnum.NOT_EMPTY.test(" ", null); + assert IfAbsentEnum.NOT_EMPTY.test("\r", null); + assert IfAbsentEnum.NOT_EMPTY.test("a", null); + + assert !IfAbsentEnum.NOT_BLANK.test("\t", null); + assert !IfAbsentEnum.NOT_BLANK.test("", null); + assert !IfAbsentEnum.NOT_BLANK.test(" ", null); + assert !IfAbsentEnum.NOT_BLANK.test("\r", null); + assert IfAbsentEnum.NOT_BLANK.test("a", null); + ThreadLocalUtils.set("SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, " + "t.address_id2, t.del, t.create_by, t.update_by FROM `user` t " + "WHERE t.del = false AND (t.id = ? AND t.head_img = ? AND t.`name` = ?)"); MPJLambdaWrapper wrapper = JoinWrappers.lambda(UserDO.class) .selectAll(UserDO.class) - .eq(UserDO::getId, 1) + .eqIfAbsent(UserDO::getId, 1) .eqIfAbsent(UserDO::getPid, null) .eqIfAbsent(UserDO::getAddressId, "") .eqIfAbsent(UserDO::getImg, "\t") @@ -41,7 +53,7 @@ public class IfAbsentTest { MPJLambdaWrapper wrapper1 = JoinWrappers.lambda(UserDO.class) .selectAll(UserDO.class) .setIfAbsent(IfAbsentEnum.NOT_BLANK) - .eq(UserDO::getId, 1) + .eqIfAbsent(UserDO::getId, 1) .eqIfAbsent(UserDO::getPid, null) .eqIfAbsent(UserDO::getAddressId, "") .eqIfAbsent(UserDO::getImg, "\t") @@ -55,7 +67,7 @@ public class IfAbsentTest { MPJLambdaWrapper wrapper2 = JoinWrappers.lambda(UserDO.class) .selectAll(UserDO.class) .setIfAbsent(o -> true) - .eq(UserDO::getId, 1) + .eqIfAbsent(UserDO::getId, 1) .eqIfAbsent(UserDO::getPid, null) .eqIfAbsent(UserDO::getName, "") .eqIfAbsent(UserDO::getImg, "\t")