From 36ba7dbe40c337be3f2e48bd6288ff1a93470064 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Fri, 5 Aug 2022 17:22:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B0=86=E7=81=B5=E6=84=9F=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=AE=9E=E7=8E=B0=EF=BC=8C=E5=90=8E=E7=BB=AD=E5=BE=85?= =?UTF-8?q?=E8=80=83=E8=99=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/DefaultReactiveRepository.java | 1 + .../query/impl/MongoNamedQueryChain.java | 136 +++++++++++++++++- .../query/impl/MongoQueryDefinition.java | 6 +- 3 files changed, 141 insertions(+), 2 deletions(-) diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java index 3d48183..a8e4133 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java @@ -14,4 +14,5 @@ import org.springframework.data.repository.NoRepositoryBean; public interface DefaultReactiveRepository extends ReactiveMongoRepository, ReactiveQueryModelExecutor, DomainRepository { + } diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java index 1083617..a8a0b26 100644 --- a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java @@ -4,8 +4,12 @@ import com.flyfish.framework.query.NamedQueryChain; import com.flyfish.framework.query.Queries; import com.flyfish.framework.query.QueryChain; import com.flyfish.framework.query.QueryCondition; +import lombok.RequiredArgsConstructor; +import org.springframework.data.mongodb.core.query.Criteria; +import java.util.Collection; import java.util.List; +import java.util.function.Consumer; import java.util.function.Supplier; /** @@ -23,7 +27,7 @@ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQ */ @Override public QueryCondition and(String column) { - return null; + return new NamedQueryCondition(column); } /** @@ -104,4 +108,134 @@ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQ public > NamedQueryChain or(Supplier> supplier) { return null; } + + /** + * 条件操作实现 + * + * @author wangyu + */ + @RequiredArgsConstructor + class NamedQueryCondition implements QueryCondition { + + private final String column; + + /** + * 相等判定 + * + * @param value 值 + * @return 结果 + */ + @Override + public NamedQueryChain eq(Object value) { + MongoNamedQueryChain.this.criteria.is(value); + return MongoNamedQueryChain.this; + } + + /** + * 判定某列的值中存在指定值,特指json array数据类型且子类型中带有id的场景 + * 用于兼容mongodb查询,mysql查询使用JSON_CONTAINS进行判定。 + * 当且仅当mongodb会拼接.$id,mysql一律匹配id字段 + *

+ * 等价于 .eq(value) + * + * @param value 值 + * @return 结果 + */ + @Override + public NamedQueryChain hasId(Object value) { + return null; + } + + /** + * 对于mongodb,自动处理。对于关系型数据库,代表json array中是否包含对应值,值仅支持基本数据类型 + *

+ * 等价于 .eq(value) + * + * @param value 基本数据类型的值 + * @return 结果 + */ + @Override + public NamedQueryChain has(Object value) { + return null; + } + + /** + * 不等判定 + * + * @param value 值 + * @return 结果 + */ + @Override + public NamedQueryChain ne(Object value) { + return null; + } + + /** + * 值介于两者之间 + * + * @param items 双值列表 + * @return 结果 + */ + @Override + public NamedQueryChain between(List items) { + return null; + } + + /** + * 模糊匹配,这里是全模糊 + * + * @param keyword 查询关键字 + * @return 结果 + */ + @Override + public NamedQueryChain like(String keyword) { + return null; + } + + /** + * 根据指定的方向进行模糊查询 + * + * @param keyword 关键字 + * @param direction 方向,可以匹配开头和结尾 + * @return 结果 + */ + @Override + public NamedQueryChain like(String keyword, Queries.Direction direction) { + return null; + } + + /** + * 判定为空 + * + * @return 结果 + */ + @Override + public NamedQueryChain isNull() { + return null; + } + + /** + * 包含在内 + * + * @param list 集合 + * @return 结果 + */ + @Override + public NamedQueryChain in(Collection list) { + return null; + } + + /** + * 包含在内 + * 注意,需要根据字段类型推断。 + * 如果是json数组,需要进行双向匹配 + * + * @param values 值们 + * @return 结果 + */ + @Override + public NamedQueryChain in(Object... values) { + return null; + } + } } diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoQueryDefinition.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoQueryDefinition.java index 6459470..58d5000 100644 --- a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoQueryDefinition.java +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoQueryDefinition.java @@ -2,6 +2,8 @@ package com.flyfish.framework.mongodb.query.impl; import com.flyfish.framework.query.QueryDefinition; import com.flyfish.framework.query.QueryMutation; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.util.CastUtils; /** * mongo的查询定义 @@ -10,6 +12,8 @@ import com.flyfish.framework.query.QueryMutation; */ public class MongoQueryDefinition implements QueryDefinition { + protected final Criteria criteria = new Criteria(); + /** * 构建 * @@ -17,7 +21,7 @@ public class MongoQueryDefinition implements QueryDefinition { */ @Override public T build() { - return null; + return CastUtils.cast(criteria); } /**