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包自动加载,无需手动处理 *