From dd2f7802490c9315b463cc9807f752dd5c763185 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Fri, 5 Aug 2022 16:12:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=E6=8A=BD=E8=B1=A1?= =?UTF-8?q?=E6=B3=9B=E5=9E=8B=E5=B7=A5=E5=8E=82=E6=A8=A1=E5=BC=8F=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E9=97=AE=E9=A2=98=EF=BC=8C=E5=A2=9E=E5=BC=BA=E7=A8=B3?= =?UTF-8?q?=E5=AE=9A=E6=80=A7=EF=BC=8C=E5=8F=AF=E6=97=A0=E9=99=90=E5=A4=8D?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/flyfish/framework/query/Queries.java | 24 ++++++++++++++----- .../query/spi/QueryChainFactory.java | 2 +- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Queries.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Queries.java index 84462fb..555b397 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Queries.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Queries.java @@ -18,9 +18,21 @@ import java.util.List; */ public final class Queries { + @SuppressWarnings("rawtypes") private static final List FACTORIES = SpringFactoriesLoader.loadFactories(QueryChainFactory.class, null); + /** + * 内部带参工厂函数,调用工厂方法创建实例 + * + * @param type 工厂类型,最终产出类型需匹配 + * @param 产出查询链泛型 + */ + private static > C produce(Class type) { + QueryChainFactory factory = getFactory(type); + return factory.produce(); + } + /** * 创建基于字符串字段名的查询 * @@ -28,7 +40,7 @@ public final class Queries { * @return 结果 */ public static QueryCondition where(String column) { - NamedQueryChain chain = getFactory(NamedQueryChain.class).produce(); + NamedQueryChain chain = produce(NamedQueryChain.class); return chain.and(column); } @@ -39,7 +51,7 @@ public final class Queries { * @return 结果 */ public static QueryCondition> where(DomainFunction getter) { - LambdaQueryChain chain = getFactory(LambdaQueryChain.class).produce(); + LambdaQueryChain chain = produce(LambdaQueryChain.class); return chain.and(getter); } @@ -50,11 +62,10 @@ public final class Queries { * @return 结果 */ public static NamedQueryChain within(NamedQueryChain chain) { - NamedQueryChain created = getFactory(LambdaQueryChain.class).produce(); + NamedQueryChain created = produce(LambdaQueryChain.class); return created.and(chain); } - /** * 以嵌套条件开始 * @@ -62,7 +73,7 @@ public final class Queries { * @return 结果 */ public static LambdaQueryChain within(LambdaQueryChain chain) { - LambdaQueryChain created = getFactory(LambdaQueryChain.class).produce(); + LambdaQueryChain created = produce(LambdaQueryChain.class); return created.and(chain); } @@ -72,7 +83,8 @@ public final class Queries { * @param targetType 目标类型 * @return 匹配的工厂 */ - private static QueryChainFactory getFactory(Class targetType) { + @SuppressWarnings("unchecked") + private static > QueryChainFactory getFactory(Class targetType) { return FACTORIES.stream() .filter(factory -> factory.supports(targetType)) .findFirst() diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/spi/QueryChainFactory.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/spi/QueryChainFactory.java index 5ed27e5..2aef882 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/spi/QueryChainFactory.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/spi/QueryChainFactory.java @@ -3,7 +3,7 @@ package com.flyfish.framework.query.spi; import com.flyfish.framework.query.QueryChain; /** - * 查询链创建抽象工厂 + * 查询链创建抽象泛型工厂 * 基于spi提供实现类,最终返回真正实例化的内容 * 根据引入的jar包自动加载,无需手动处理 *