From 45940fc5e8cb0ee6e7777c070e3fe53af4af7ad5 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Wed, 3 Aug 2022 16:39:25 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20=E4=B8=8B=E4=B8=80=E4=BB=A3?= =?UTF-8?q?=E5=A4=A7=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flyfish-data/README.md | 11 ++ flyfish-data/flyfish-data-common/pom.xml | 54 +++++++++ .../framework/adaptor/CriteriaAdaptor.java | 105 ++++++++++++++++++ .../framework/adaptor/CriteriaAdaptors.java | 34 ++++++ .../com/flyfish/framework/adaptor/README.md | 4 + .../adaptor/spi/CriteriaAdaptorFactory.java | 26 +++++ .../framework/annotations/CodeRule.java | 0 .../framework/annotations/ComputedProps.java | 0 .../framework/annotations/ConditionOn.java | 0 .../framework/annotations/DBRefValue.java | 0 .../framework/annotations/DateRange.java | 0 .../framework/annotations/DictValue.java | 0 .../annotations/EnableEnumEndpoint.java | 0 .../annotations/EnableMongoRepo.java | 0 .../annotations/EnablePropertyEncrypt.java | 0 .../annotations/EnableReactiveMongoRepo.java | 0 .../framework/annotations/EnumValue.java | 0 .../framework/annotations/FormItem.java | 0 .../framework/annotations/Generation.java | 0 .../framework/annotations/MappedTo.java | 0 .../framework/annotations/Operation.java | 0 .../flyfish/framework/annotations/Order.java | 0 .../framework/annotations/Properties.java | 0 .../framework/annotations/Property.java | 0 .../framework/annotations/PropertyGroup.java | 0 .../framework/annotations/PropertyGroups.java | 0 .../framework/auditor/AuthorizeAuditor.java | 0 .../framework/auditor/BeanAuditor.java | 0 .../flyfish/framework/auditor/BeanPoster.java | 0 .../framework/auditor/CommonBeanAuditor.java | 0 .../framework/auditor/OperationAuditor.java | 0 .../auditor/ReactiveAuthorizeAuditor.java | 0 .../auditor/ReactiveBeanAuditor.java | 0 .../framework/auditor/ReactiveBeanPoster.java | 0 .../auditor/ReactiveCommonBeanAuditor.java | 0 .../auditor/ReactiveOperationAuditor.java | 0 .../framework/builder/CriteriaBuilder.java | 0 .../builder/CriteriaBuilderProvider.java | 10 ++ .../framework/config/CodeRuleConfig.java | 0 .../framework/config/DecryptConfig.java | 0 .../flyfish/framework/config/EnumConfig.java | 0 .../AESEncryptablePropertyResolver.java | 0 .../context/ReactiveUserContext.java | 0 .../framework/context/UserContext.java | 0 .../framework/context/ViewModelContext.java | 0 .../interceptor/ViewModelInterceptor.java | 0 .../authorized/AbstractAuthorizedQo.java | 0 .../domain/authorized/AuthorizedDomain.java | 0 .../domain/authorized/AuthorizedQo.java | 0 .../authorized/AuthorizedUserDetails.java | 0 .../domain/authorized/AuthorizedVo.java | 0 .../advanced/OwnedAuthorizedDomain.java | 0 .../advanced/OwnedAuthorizedQo.java | 0 .../framework/domain/base/AuditDomain.java | 0 .../flyfish/framework/domain/base/BaseQo.java | 0 .../flyfish/framework/domain/base/Domain.java | 0 .../framework/domain/base/DomainService.java | 0 .../flyfish/framework/domain/base/Dto.java | 0 .../flyfish/framework/domain/base/IUser.java | 0 .../framework/domain/base/NameLikeQo.java | 0 .../flyfish/framework/domain/base/Named.java | 0 .../com/flyfish/framework/domain/base/Po.java | 0 .../com/flyfish/framework/domain/base/Qo.java | 0 .../com/flyfish/framework/domain/base/Vo.java | 0 .../framework/domain/po/Department.java | 0 .../framework/domain/po/ExcelMapping.java | 0 .../framework/domain/po/Permission.java | 0 .../com/flyfish/framework/domain/po/Role.java | 0 .../com/flyfish/framework/domain/po/User.java | 0 .../framework/domain/tree/RootTreeNode.java | 0 .../framework/domain/tree/TreeDomain.java | 0 .../flyfish/framework/domain/tree/TreeQo.java | 0 .../generation/CodeRuleStrategy.java | 0 .../framework/generation/CodeRules.java | 0 .../strategy/TransactionCodeRuleStrategy.java | 0 .../strategy/UUIDCodeRuleStrategy.java | 0 .../repository/DefaultReactiveRepository.java | 0 .../repository/DefaultRepository.java | 0 .../repository/QueryModelExecutor.java | 0 .../ReactiveQueryModelExecutor.java | 0 .../repository/base/DomainRepository.java | 0 .../DefaultReactiveRepositoryFactory.java | 1 - .../DefaultReactiveRepositoryFactoryBean.java | 0 .../factory/DefaultRepositoryFactory.java | 0 .../factory/DefaultRepositoryFactoryBean.java | 0 .../impl/DefaultReactiveRepositoryImpl.java | 0 .../impl/DefaultRepositoryImpl.java | 0 .../repository/impl/QueryBuildUtils.java | 0 .../impl/ReactivePageableExecutionUtils.java | 0 .../flyfish/framework/utils/CopyUtils.java | 0 .../framework/utils/CriteriaUtils.java | 0 .../flyfish/framework/utils/DataUtils.java | 0 .../framework/utils/DateRangeUtil.java | 0 .../flyfish/framework/utils/DepartUtils.java | 0 .../flyfish/framework/utils/FieldUtils.java | 0 .../com/flyfish/framework/utils/HexUtils.java | 0 .../com/flyfish/framework/utils/Query.java | 0 flyfish-data/flyfish-data-mongodb/pom.xml | 19 ++++ flyfish-data/flyfish-data-r2dbc/pom.xml | 34 ++++++ .../adaptor/R2DbcCriteriaAdaptorFactory.java | 34 ++++++ .../r2dbc/config/R2dbcDataConfig.java | 17 +++ flyfish-data/pom.xml | 38 +------ flyfish-form/pom.xml | 2 +- flyfish-user/pom.xml | 2 +- flyfish-web/pom.xml | 2 +- 105 files changed, 357 insertions(+), 36 deletions(-) create mode 100644 flyfish-data/README.md create mode 100644 flyfish-data/flyfish-data-common/pom.xml create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptor.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptors.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/README.md create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/spi/CriteriaAdaptorFactory.java rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/CodeRule.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/ComputedProps.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/ConditionOn.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/DBRefValue.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/DateRange.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/DictValue.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/EnableEnumEndpoint.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/EnablePropertyEncrypt.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/EnableReactiveMongoRepo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/EnumValue.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/FormItem.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/Generation.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/MappedTo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/Operation.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/Order.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/Properties.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/Property.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/annotations/PropertyGroups.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/AuthorizeAuditor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/BeanAuditor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/BeanPoster.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/CommonBeanAuditor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/OperationAuditor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/ReactiveAuthorizeAuditor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/ReactiveBeanAuditor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/ReactiveBeanPoster.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/ReactiveCommonBeanAuditor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/auditor/ReactiveOperationAuditor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java (100%) create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/builder/CriteriaBuilderProvider.java rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/config/CodeRuleConfig.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/config/DecryptConfig.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/config/EnumConfig.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/config/encrypt/AESEncryptablePropertyResolver.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/context/ReactiveUserContext.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/context/UserContext.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/context/ViewModelContext.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/context/interceptor/ViewModelInterceptor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedDomain.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedUserDetails.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedVo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedDomain.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/AuditDomain.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/BaseQo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/Domain.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/DomainService.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/Dto.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/IUser.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/Named.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/Po.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/Qo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/base/Vo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/po/Department.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/po/ExcelMapping.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/po/Permission.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/po/Role.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/po/User.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/tree/RootTreeNode.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/generation/CodeRuleStrategy.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/generation/CodeRules.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/generation/strategy/TransactionCodeRuleStrategy.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/generation/strategy/UUIDCodeRuleStrategy.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/DefaultRepository.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/QueryModelExecutor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/ReactiveQueryModelExecutor.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/base/DomainRepository.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactory.java (92%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactoryBean.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactory.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactoryBean.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/impl/DefaultReactiveRepositoryImpl.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/impl/DefaultRepositoryImpl.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/repository/impl/ReactivePageableExecutionUtils.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/utils/CopyUtils.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/utils/CriteriaUtils.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/utils/DataUtils.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/utils/DateRangeUtil.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/utils/DepartUtils.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/utils/FieldUtils.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/utils/HexUtils.java (100%) rename flyfish-data/{ => flyfish-data-common}/src/main/java/com/flyfish/framework/utils/Query.java (100%) create mode 100644 flyfish-data/flyfish-data-mongodb/pom.xml create mode 100644 flyfish-data/flyfish-data-r2dbc/pom.xml create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/adaptor/R2DbcCriteriaAdaptorFactory.java create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java diff --git a/flyfish-data/README.md b/flyfish-data/README.md new file mode 100644 index 0000000..30717e0 --- /dev/null +++ b/flyfish-data/README.md @@ -0,0 +1,11 @@ +# 核心数据框架 + +本模块是flyfish framework的最核心能力 +其提供无感知的多种数据源支持,并完整适配了mongodb和rdbms的查询表现, +用户只需要用一套api即可完成数据的查询或修改,无需为了底层实现而大费周章重新开发。 + +## 核心架构 +1. 基于Spring SPI模式,声明式注入查询实现工厂,动态替换查询构建逻辑 +2. 按需引入,不浪费任何依赖,节省空间。使用maven的按需引入模式,让打包后的结果不必因为重量级的框架而变得冗余 +3. 指哪打哪,稳定快速。集成最新版本的spring mongo引擎和spring data r2dbc +4. 核心框架广泛使用,保证"0bug"。 diff --git a/flyfish-data/flyfish-data-common/pom.xml b/flyfish-data/flyfish-data-common/pom.xml new file mode 100644 index 0000000..f846226 --- /dev/null +++ b/flyfish-data/flyfish-data-common/pom.xml @@ -0,0 +1,54 @@ + + + + flyfish-data + com.flyfish.framework + 0.0.1-SNAPSHOT + + 4.0.0 + + flyfish-data-common + + + 8 + 8 + + + + + com.flyfish.framework + flyfish-common + ${project.version} + + + + org.springframework.security + spring-security-core + + + + org.springframework.boot + spring-boot-starter-data-mongodb-reactive + true + + + + org.springframework.boot + spring-boot-starter-data-mongodb + true + + + + org.springframework.boot + spring-boot-starter-data-r2dbc + true + + + + com.github.ulisesbocchio + jasypt-spring-boot-starter + + + diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptor.java new file mode 100644 index 0000000..3c15229 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptor.java @@ -0,0 +1,105 @@ +package com.flyfish.framework.adaptor; + +import org.bson.BsonRegularExpression; +import org.springframework.data.domain.Example; +import org.springframework.data.geo.Circle; +import org.springframework.data.geo.Point; +import org.springframework.data.geo.Shape; +import org.springframework.data.mongodb.core.geo.GeoJson; +import org.springframework.data.mongodb.core.schema.JsonSchemaObject; + +import java.util.Collection; +import java.util.regex.Pattern; + +/** + * 查询适配器 + * + * @author wangyu + * 由工厂进行实例化,并输出 + */ +public interface CriteriaAdaptor { + + CriteriaAdaptor and(String key); + + CriteriaAdaptor is(Object value); + + CriteriaAdaptor isNull(); + + CriteriaAdaptor isNullValue(); + + CriteriaAdaptor ne(Object value); + + CriteriaAdaptor lt(Object value); + + CriteriaAdaptor lte(Object value); + + CriteriaAdaptor gt(Object value); + + CriteriaAdaptor gte(Object value); + + CriteriaAdaptor in(Object... values); + + CriteriaAdaptor in(Collection values); + + CriteriaAdaptor nin(Object... values); + + CriteriaAdaptor nin(Collection values); + + CriteriaAdaptor mod(Number value, Number remainder); + + CriteriaAdaptor all(Object... values); + + CriteriaAdaptor all(Collection values); + + CriteriaAdaptor size(int size); + + CriteriaAdaptor exists(boolean value); + + CriteriaAdaptor sampleRate(double sampleRate); + + CriteriaAdaptor type(int typeNumber); + + CriteriaAdaptor type(JsonSchemaObject.Type... types); + + CriteriaAdaptor type(Collection types); + + CriteriaAdaptor not(); + + CriteriaAdaptor regex(String regex); + + CriteriaAdaptor regex(String regex, String options); + + CriteriaAdaptor regex(Pattern pattern); + + CriteriaAdaptor regex(BsonRegularExpression regex); + + CriteriaAdaptor withinSphere(Circle circle); + + CriteriaAdaptor within(Shape shape); + + CriteriaAdaptor near(Point point); + + CriteriaAdaptor nearSphere(Point point); + + CriteriaAdaptor intersects(GeoJson geoJson); + + CriteriaAdaptor maxDistance(double maxDistance); + + CriteriaAdaptor minDistance(double minDistance); + + CriteriaAdaptor elemMatch(CriteriaAdaptor criteria); + + CriteriaAdaptor alike(Example sample); + + CriteriaAdaptor orOperator(CriteriaAdaptor... criteria); + + CriteriaAdaptor orOperator(Collection criteria); + + CriteriaAdaptor norOperator(CriteriaAdaptor... criteria); + + CriteriaAdaptor norOperator(Collection criteria); + + CriteriaAdaptor andOperator(CriteriaAdaptor... criteria); + + CriteriaAdaptor andOperator(Collection criteria); +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptors.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptors.java new file mode 100644 index 0000000..c3771ca --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptors.java @@ -0,0 +1,34 @@ +package com.flyfish.framework.adaptor; + +import com.flyfish.framework.adaptor.spi.CriteriaAdaptorFactory; +import org.springframework.core.io.support.SpringFactoriesLoader; +import org.springframework.dao.InvalidDataAccessApiUsageException; + +import java.util.List; + +/** + * 可以通过该工具类快速创建适配器 + * + * @author wangyu + */ +public final class CriteriaAdaptors { + + private static final List FACTORIES = + SpringFactoriesLoader.loadFactories(CriteriaAdaptorFactory.class, null); + + public static CriteriaAdaptor getAdaptor() { + return FACTORIES.stream() + .findFirst() + .map(CriteriaAdaptorFactory::produce) + .orElseThrow(() -> new InvalidDataAccessApiUsageException("未实现当前查询的适配工厂!")); + } + + + public static CriteriaAdaptor getAdaptor(Object criteria) { + return FACTORIES.stream() + .filter(factory -> factory.criteriaType().isAssignableFrom(criteria.getClass())) + .findFirst() + .map(CriteriaAdaptorFactory::produce) + .orElseThrow(() -> new InvalidDataAccessApiUsageException("未实现当前查询的适配工厂!")); + } +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/README.md b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/README.md new file mode 100644 index 0000000..3aacfde --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/README.md @@ -0,0 +1,4 @@ +# 查询构建Fluent Api适配器 +同时适配关系型数据库mysql和非关系型数据库mongodb + +未来将会支持更多,采用覆盖的方式进行对象组合 diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/spi/CriteriaAdaptorFactory.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/spi/CriteriaAdaptorFactory.java new file mode 100644 index 0000000..192fe7a --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/spi/CriteriaAdaptorFactory.java @@ -0,0 +1,26 @@ +package com.flyfish.framework.adaptor.spi; + +import com.flyfish.framework.adaptor.CriteriaAdaptor; + +/** + * 查询适配器 + * 基于spi提供实现类,最终返回对应的 + * + * @author wangyu + */ +public interface CriteriaAdaptorFactory { + + /** + * 生产适配器 + * + * @return 结果 + */ + CriteriaAdaptor produce(); + + /** + * 查询类型 + * + * @return 结果 + */ + Class criteriaType(); +} diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/CodeRule.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/CodeRule.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/CodeRule.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/CodeRule.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/ComputedProps.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/ComputedProps.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/ComputedProps.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/ComputedProps.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/ConditionOn.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/ConditionOn.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/ConditionOn.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/ConditionOn.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/DBRefValue.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/DBRefValue.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/DBRefValue.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/DBRefValue.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/DateRange.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/DateRange.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/DateRange.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/DateRange.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/DictValue.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/DictValue.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/DictValue.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/DictValue.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableEnumEndpoint.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnableEnumEndpoint.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableEnumEndpoint.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnableEnumEndpoint.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/EnablePropertyEncrypt.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnablePropertyEncrypt.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/EnablePropertyEncrypt.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnablePropertyEncrypt.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableReactiveMongoRepo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnableReactiveMongoRepo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableReactiveMongoRepo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnableReactiveMongoRepo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/EnumValue.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnumValue.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/EnumValue.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/EnumValue.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/FormItem.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/FormItem.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/FormItem.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/FormItem.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/Generation.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Generation.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/Generation.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Generation.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/MappedTo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/MappedTo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/MappedTo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/MappedTo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/Operation.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Operation.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/Operation.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Operation.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/Order.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Order.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/Order.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Order.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/Properties.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Properties.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/Properties.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Properties.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/Property.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Property.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/Property.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/Property.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/PropertyGroups.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/PropertyGroups.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/annotations/PropertyGroups.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/PropertyGroups.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/AuthorizeAuditor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/AuthorizeAuditor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/AuthorizeAuditor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/AuthorizeAuditor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/BeanAuditor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/BeanAuditor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/BeanAuditor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/BeanAuditor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/BeanPoster.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/BeanPoster.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/BeanPoster.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/BeanPoster.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/CommonBeanAuditor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/CommonBeanAuditor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/CommonBeanAuditor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/CommonBeanAuditor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/OperationAuditor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/OperationAuditor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/OperationAuditor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/OperationAuditor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveAuthorizeAuditor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveAuthorizeAuditor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveAuthorizeAuditor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveAuthorizeAuditor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveBeanAuditor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveBeanAuditor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveBeanAuditor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveBeanAuditor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveBeanPoster.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveBeanPoster.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveBeanPoster.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveBeanPoster.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveCommonBeanAuditor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveCommonBeanAuditor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveCommonBeanAuditor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveCommonBeanAuditor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveOperationAuditor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveOperationAuditor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/auditor/ReactiveOperationAuditor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/auditor/ReactiveOperationAuditor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/builder/CriteriaBuilderProvider.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/builder/CriteriaBuilderProvider.java new file mode 100644 index 0000000..bc2cba8 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/builder/CriteriaBuilderProvider.java @@ -0,0 +1,10 @@ +package com.flyfish.framework.builder; + +/** + * 查询构建器提供者 + * @author wangyu- + */ +public interface CriteriaBuilderProvider { + + +} diff --git a/flyfish-data/src/main/java/com/flyfish/framework/config/CodeRuleConfig.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/config/CodeRuleConfig.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/config/CodeRuleConfig.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/config/CodeRuleConfig.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/config/DecryptConfig.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/config/DecryptConfig.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/config/DecryptConfig.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/config/DecryptConfig.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/config/EnumConfig.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/config/EnumConfig.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/config/EnumConfig.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/config/EnumConfig.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/config/encrypt/AESEncryptablePropertyResolver.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/config/encrypt/AESEncryptablePropertyResolver.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/config/encrypt/AESEncryptablePropertyResolver.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/config/encrypt/AESEncryptablePropertyResolver.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/context/ReactiveUserContext.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/context/ReactiveUserContext.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/context/ReactiveUserContext.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/context/ReactiveUserContext.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/context/UserContext.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/context/UserContext.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/context/UserContext.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/context/UserContext.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/context/ViewModelContext.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/context/ViewModelContext.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/context/ViewModelContext.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/context/ViewModelContext.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/context/interceptor/ViewModelInterceptor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/context/interceptor/ViewModelInterceptor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/context/interceptor/ViewModelInterceptor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/context/interceptor/ViewModelInterceptor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedDomain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedDomain.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedDomain.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedDomain.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedUserDetails.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedUserDetails.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedUserDetails.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedUserDetails.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedVo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedVo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedVo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedVo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedDomain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedDomain.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedDomain.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedDomain.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/AuditDomain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/AuditDomain.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/AuditDomain.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/AuditDomain.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/BaseQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/BaseQo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Domain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Domain.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/Domain.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Domain.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/DomainService.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/DomainService.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/DomainService.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/DomainService.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Dto.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Dto.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/Dto.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Dto.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/IUser.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/IUser.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/IUser.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/IUser.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Named.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Named.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/Named.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Named.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Po.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Po.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/Po.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Po.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Qo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Qo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/Qo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Qo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Vo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Vo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/base/Vo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Vo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/po/Department.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/Department.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/po/Department.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/Department.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/po/ExcelMapping.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/ExcelMapping.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/po/ExcelMapping.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/ExcelMapping.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/po/Permission.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/Permission.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/po/Permission.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/Permission.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/po/Role.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/Role.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/po/Role.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/Role.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/po/User.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/User.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/po/User.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/po/User.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/tree/RootTreeNode.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/RootTreeNode.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/tree/RootTreeNode.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/RootTreeNode.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/generation/CodeRuleStrategy.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/generation/CodeRuleStrategy.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/generation/CodeRuleStrategy.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/generation/CodeRuleStrategy.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/generation/CodeRules.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/generation/CodeRules.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/generation/CodeRules.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/generation/CodeRules.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/generation/strategy/TransactionCodeRuleStrategy.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/generation/strategy/TransactionCodeRuleStrategy.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/generation/strategy/TransactionCodeRuleStrategy.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/generation/strategy/TransactionCodeRuleStrategy.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/generation/strategy/UUIDCodeRuleStrategy.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/generation/strategy/UUIDCodeRuleStrategy.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/generation/strategy/UUIDCodeRuleStrategy.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/generation/strategy/UUIDCodeRuleStrategy.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/DefaultReactiveRepository.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/DefaultRepository.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/DefaultRepository.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/DefaultRepository.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/DefaultRepository.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/QueryModelExecutor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/QueryModelExecutor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/QueryModelExecutor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/QueryModelExecutor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/ReactiveQueryModelExecutor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/ReactiveQueryModelExecutor.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/ReactiveQueryModelExecutor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/ReactiveQueryModelExecutor.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/base/DomainRepository.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/base/DomainRepository.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/base/DomainRepository.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/base/DomainRepository.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactory.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactory.java similarity index 92% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactory.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactory.java index a58f320..04b61d1 100644 --- a/flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactory.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactory.java @@ -1,6 +1,5 @@ package com.flyfish.framework.repository.factory; -import com.flyfish.framework.repository.impl.DefaultReactiveRepositoryImpl; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactory; import org.springframework.data.repository.core.RepositoryMetadata; diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactoryBean.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactoryBean.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactoryBean.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultReactiveRepositoryFactoryBean.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactory.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactory.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactory.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactory.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactoryBean.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactoryBean.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactoryBean.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/factory/DefaultRepositoryFactoryBean.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/impl/DefaultReactiveRepositoryImpl.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/DefaultReactiveRepositoryImpl.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/impl/DefaultReactiveRepositoryImpl.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/DefaultReactiveRepositoryImpl.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/impl/DefaultRepositoryImpl.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/DefaultRepositoryImpl.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/impl/DefaultRepositoryImpl.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/DefaultRepositoryImpl.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/impl/ReactivePageableExecutionUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/ReactivePageableExecutionUtils.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/repository/impl/ReactivePageableExecutionUtils.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/ReactivePageableExecutionUtils.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/utils/CopyUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/CopyUtils.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/utils/CopyUtils.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/CopyUtils.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/utils/CriteriaUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/CriteriaUtils.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/utils/CriteriaUtils.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/CriteriaUtils.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/utils/DataUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/DataUtils.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/utils/DataUtils.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/DataUtils.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/utils/DateRangeUtil.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/DateRangeUtil.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/utils/DateRangeUtil.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/DateRangeUtil.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/utils/DepartUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/DepartUtils.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/utils/DepartUtils.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/DepartUtils.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/utils/FieldUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/FieldUtils.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/utils/FieldUtils.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/FieldUtils.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/utils/HexUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/HexUtils.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/utils/HexUtils.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/HexUtils.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/utils/Query.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/Query.java similarity index 100% rename from flyfish-data/src/main/java/com/flyfish/framework/utils/Query.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/Query.java diff --git a/flyfish-data/flyfish-data-mongodb/pom.xml b/flyfish-data/flyfish-data-mongodb/pom.xml new file mode 100644 index 0000000..cf8289b --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/pom.xml @@ -0,0 +1,19 @@ + + + + flyfish-data + com.flyfish.framework + 0.0.1-SNAPSHOT + + 4.0.0 + + flyfish-data-mongodb + + + 8 + 8 + + + diff --git a/flyfish-data/flyfish-data-r2dbc/pom.xml b/flyfish-data/flyfish-data-r2dbc/pom.xml new file mode 100644 index 0000000..31a976b --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/pom.xml @@ -0,0 +1,34 @@ + + + + flyfish-data + com.flyfish.framework + 0.0.1-SNAPSHOT + + 4.0.0 + + flyfish-data-r2dbc + + + 8 + 8 + + + + + org.springframework.boot + spring-boot-starter-data-r2dbc + + + dev.miku + r2dbc-mysql + + + com.flyfish.framework + flyfish-data-common + ${project.version} + + + diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/adaptor/R2DbcCriteriaAdaptorFactory.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/adaptor/R2DbcCriteriaAdaptorFactory.java new file mode 100644 index 0000000..5b59604 --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/adaptor/R2DbcCriteriaAdaptorFactory.java @@ -0,0 +1,34 @@ +package com.flyfish.framework.r2dbc.adaptor; + +import com.flyfish.framework.adaptor.CriteriaAdaptor; +import com.flyfish.framework.adaptor.spi.CriteriaAdaptorFactory; +import org.springframework.data.relational.core.query.Criteria; + + +/** + * 实现适配层和底层的转化 + * + * @author wangyu + */ +public class R2DbcCriteriaAdaptorFactory implements CriteriaAdaptorFactory { + + /** + * 生产适配器 + * + * @return 结果 + */ + @Override + public CriteriaAdaptor produce() { + return null; + } + + /** + * 查询类型 + * + * @return 结果 + */ + @Override + public Class criteriaType() { + return Criteria.class; + } +} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java new file mode 100644 index 0000000..2cdffde --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java @@ -0,0 +1,17 @@ +package com.flyfish.framework.r2dbc.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.data.r2dbc.query.Criteria; + +/** + * r2dbc数据配置 + * + * @author wangyu + */ +@Configuration +public class R2dbcDataConfig { + + public void test() { + + } +} diff --git a/flyfish-data/pom.xml b/flyfish-data/pom.xml index 139bb91..9c6c6b2 100644 --- a/flyfish-data/pom.xml +++ b/flyfish-data/pom.xml @@ -10,37 +10,11 @@ 4.0.0 flyfish-data + pom + + flyfish-data-r2dbc + flyfish-data-mongodb + flyfish-data-common + - - - com.flyfish.framework - flyfish-common - ${project.version} - - - - org.springframework.data - spring-data-mongodb - - - - org.springframework.security - spring-security-core - - - - org.springframework.boot - spring-boot-starter-data-mongodb-reactive - - - - org.springframework.boot - spring-boot-starter-data-mongodb - - - - com.github.ulisesbocchio - jasypt-spring-boot-starter - - diff --git a/flyfish-form/pom.xml b/flyfish-form/pom.xml index f6fe2f6..fe62764 100644 --- a/flyfish-form/pom.xml +++ b/flyfish-form/pom.xml @@ -19,7 +19,7 @@ com.flyfish.framework - flyfish-data + flyfish-data-common ${project.version} diff --git a/flyfish-user/pom.xml b/flyfish-user/pom.xml index dcb582f..738451b 100644 --- a/flyfish-user/pom.xml +++ b/flyfish-user/pom.xml @@ -20,7 +20,7 @@ com.flyfish.framework - flyfish-data + flyfish-data-common ${project.version} diff --git a/flyfish-web/pom.xml b/flyfish-web/pom.xml index 5702ef0..10059f1 100644 --- a/flyfish-web/pom.xml +++ b/flyfish-web/pom.xml @@ -14,7 +14,7 @@ com.flyfish.framework - flyfish-data + flyfish-data-common ${project.version} From ff6929ed6db05af888bfabb09f9e56c561235861 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Wed, 3 Aug 2022 17:35:15 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20=E5=8D=87=E7=BA=A7=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flyfish-approval/pom.xml | 2 +- flyfish-backup/pom.xml | 2 +- flyfish-common/pom.xml | 4 +- flyfish-data/flyfish-data-common/pom.xml | 2 +- .../annotations/query/QueryField.java | 100 ++++++++++++++++++ .../flyfish/framework/domain/base/BaseQo.java | 2 +- .../framework/domain/base/NameLikeQo.java | 13 ++- .../com/flyfish/framework/query/Queries.java | 16 +++ flyfish-data/flyfish-data-mongodb/pom.xml | 2 +- flyfish-data/flyfish-data-r2dbc/pom.xml | 2 +- flyfish-data/pom.xml | 2 +- flyfish-dict/pom.xml | 2 +- flyfish-file/pom.xml | 4 +- flyfish-form/pom.xml | 2 +- flyfish-logging/pom.xml | 2 +- flyfish-user/pom.xml | 2 +- flyfish-web/pom.xml | 2 +- pom.xml | 2 +- 18 files changed, 145 insertions(+), 18 deletions(-) create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/query/QueryField.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Queries.java diff --git a/flyfish-approval/pom.xml b/flyfish-approval/pom.xml index a44af21..3263d16 100644 --- a/flyfish-approval/pom.xml +++ b/flyfish-approval/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-backup/pom.xml b/flyfish-backup/pom.xml index 9e5febd..34d4ef9 100644 --- a/flyfish-backup/pom.xml +++ b/flyfish-backup/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-common/pom.xml b/flyfish-common/pom.xml index 934eb11..e4cd846 100644 --- a/flyfish-common/pom.xml +++ b/flyfish-common/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/flyfish-data/flyfish-data-common/pom.xml b/flyfish-data/flyfish-data-common/pom.xml index f846226..60559e1 100644 --- a/flyfish-data/flyfish-data-common/pom.xml +++ b/flyfish-data/flyfish-data-common/pom.xml @@ -5,7 +5,7 @@ flyfish-data com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/query/QueryField.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/query/QueryField.java new file mode 100644 index 0000000..bf1c978 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/annotations/query/QueryField.java @@ -0,0 +1,100 @@ +package com.flyfish.framework.annotations.query; + +import com.flyfish.framework.enums.NamedEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.core.annotation.AliasFor; + +import java.lang.annotation.*; + +/** + * 查询字段注解,声明映射,查询逻辑 + * + * @author wangyu + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface QueryField { + + /** + * @return 绑定的持久层字段 + */ + @AliasFor("name") + String value() default ""; + + /** + * @return 绑定的持久层字段 + */ + String name() default ""; + + /** + * @return 表达式类型 + */ + Type type() default Type.EQ; + + /** + * 拼接在某个字段前 + * + * @return + */ + String before() default ""; + + /** + * @return 和前面条件表达式的连接方式 + */ + Logistic[] start() default Logistic.AND; + + /** + * @return 和后面条件表达式的连接方式 + */ + Logistic[] end() default Logistic.NULL; + + /** + * @return 当前类内排序值 + */ + int order() default 0; + + /** + * 查询类型 + */ + @AllArgsConstructor + @Getter + enum Type implements NamedEnum { + + EQ("等于字段值"), + NE("不等于字段值"), + GT("大于字段值"), + GTE("大于等于字段值"), + LT("小于字段值"), + LTE("小于等于字段值"), + LIKE("模糊匹配字段值"), + LIKE_LEFT("匹配左半部分字段值"), + LIKE_RIGHT("匹配有半部分字段值"), + IN("在字段值列表内"), + NIN("不再字段值列表内"), + NOT_NULL("不为空"), + IS_NULL("为空"), + BETWEEN("介于列表下标0和1的值之间"), + DATE_GTE("日期大于字段值"), + DATE_LTE("日期小于字段值"); + + private final String name; + } + + /** + * 查询逻辑 + */ + @AllArgsConstructor + @Getter + enum Logistic implements NamedEnum { + + NULL("无"), + AND("与"), + OR("或"), + BRACKET_START("左括号"), + BRACKET_END("右括号"); + + private final String name; + } +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java index 7d91b0a..9852acc 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java @@ -124,7 +124,7 @@ public class BaseQo implements Qo { * @return 结果 */ public CriteriaBuilder criteriaBuilder() { - return null; + return CriteriaBuilder.accept(this); } /** diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java index 732ab7a..6d6b219 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java @@ -1,6 +1,8 @@ package com.flyfish.framework.domain.base; +import com.flyfish.framework.annotations.query.QueryField; import com.flyfish.framework.builder.CriteriaBuilder; +import com.flyfish.framework.query.Queries; import lombok.Getter; import lombok.Setter; import org.springframework.data.domain.Sort; @@ -17,22 +19,31 @@ import java.util.List; @Setter public class NameLikeQo extends BaseQo { + @QueryField(type = QueryField.Type.LIKE) protected String name; + @QueryField protected String code; + @QueryField(name = "createTime", type = QueryField.Type.BETWEEN) protected List createTimeRange; + @QueryField(name = "modifyTime", type = QueryField.Type.BETWEEN) protected List modifyTimeRange; + @QueryField protected String creatorId; + @QueryField protected String modifierId; + @QueryField protected Boolean enable; + @QueryField(type = QueryField.Type.IN) protected Collection ids; + @QueryField(name = "id", type = QueryField.Type.NE) protected String excludeId; /** @@ -47,7 +58,7 @@ public class NameLikeQo extends BaseQo { @Override public CriteriaBuilder criteriaBuilder() { - return CriteriaBuilder.accept(this) + return super.criteriaBuilder() .with("name", CriteriaBuilder.Builders.LIKE) .with("enable", "code", "creatorId", "modifierId") .with("ids", "id", CriteriaBuilder.Builders.IN) 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 new file mode 100644 index 0000000..6fffe14 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Queries.java @@ -0,0 +1,16 @@ +package com.flyfish.framework.query; + +import com.flyfish.framework.domain.base.Qo; + +/** + * 查询工具类 + * 基于Fluent API风格实现 + * 底层基于适配器兼容各种数据库,包括关系型数据库和 + * @author wangyu + */ +public final class Queries { + + public static Queries of(Qo qo) { + + } +} diff --git a/flyfish-data/flyfish-data-mongodb/pom.xml b/flyfish-data/flyfish-data-mongodb/pom.xml index cf8289b..f79189c 100644 --- a/flyfish-data/flyfish-data-mongodb/pom.xml +++ b/flyfish-data/flyfish-data-mongodb/pom.xml @@ -5,7 +5,7 @@ flyfish-data com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-data/flyfish-data-r2dbc/pom.xml b/flyfish-data/flyfish-data-r2dbc/pom.xml index 31a976b..18ffc68 100644 --- a/flyfish-data/flyfish-data-r2dbc/pom.xml +++ b/flyfish-data/flyfish-data-r2dbc/pom.xml @@ -5,7 +5,7 @@ flyfish-data com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-data/pom.xml b/flyfish-data/pom.xml index 9c6c6b2..a2b2d80 100644 --- a/flyfish-data/pom.xml +++ b/flyfish-data/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-dict/pom.xml b/flyfish-dict/pom.xml index f00684a..5f1ae0d 100644 --- a/flyfish-dict/pom.xml +++ b/flyfish-dict/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-file/pom.xml b/flyfish-file/pom.xml index 3e9a350..65b5ae5 100644 --- a/flyfish-file/pom.xml +++ b/flyfish-file/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 @@ -24,4 +24,4 @@ true - \ No newline at end of file + diff --git a/flyfish-form/pom.xml b/flyfish-form/pom.xml index fe62764..aec8c9c 100644 --- a/flyfish-form/pom.xml +++ b/flyfish-form/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-logging/pom.xml b/flyfish-logging/pom.xml index e74473e..9b6b7d9 100644 --- a/flyfish-logging/pom.xml +++ b/flyfish-logging/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-user/pom.xml b/flyfish-user/pom.xml index 738451b..1a539e0 100644 --- a/flyfish-user/pom.xml +++ b/flyfish-user/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/flyfish-web/pom.xml b/flyfish-web/pom.xml index 10059f1..a1669a2 100644 --- a/flyfish-web/pom.xml +++ b/flyfish-web/pom.xml @@ -5,7 +5,7 @@ flyfish-framework com.flyfish.framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index bc9cea4..fe848e5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.flyfish.framework flyfish-framework - 0.0.1-SNAPSHOT + 0.1.0-SNAPSHOT pom From 208ca062c6ebd25ebe4599299c1e4463f956c0f7 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Thu, 4 Aug 2022 17:35:02 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20=E6=9A=82=E5=AD=98=E4=B8=80?= =?UTF-8?q?=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../approval/domain/ApprovalDomainQo.java | 6 +- .../domain/record/ApproveRecordQo.java | 11 +- .../backup/scheduler/BackupScheduler.java | 5 +- .../authorized/AbstractAuthorizedQo.java | 17 +- .../domain/authorized/AuthorizedQo.java | 31 ++- .../advanced/OwnedAuthorizedQo.java | 42 ++-- .../flyfish/framework/domain/base/BaseQo.java | 15 +- .../framework/domain/base/NameLikeQo.java | 37 ++-- .../com/flyfish/framework/domain/base/Qo.java | 2 +- .../flyfish/framework/domain/tree/TreeQo.java | 18 +- .../framework/query/LambdaQueryChain.java | 101 ++++++++++ .../framework/query/NamedQueryChain.java | 99 ++++++++++ .../com/flyfish/framework/query/Queries.java | 73 ++++++- .../com/flyfish/framework/query/Query.java | 56 ++++++ .../flyfish/framework/query/QueryChain.java | 106 ++++++++++ .../framework/query/QueryCondition.java | 102 ++++++++++ .../framework/query/QueryDefinition.java | 31 +++ .../framework/query/QueryMutation.java | 81 ++++++++ .../query/support/DomainFunction.java | 12 ++ .../framework/query/support/SFunction.java | 14 ++ .../repository/ReactiveEntityOperations.java | 23 +++ .../repository/impl/QueryBuildUtils.java | 26 +-- .../com/flyfish/framework/utils/Query.java | 46 ----- flyfish-data/flyfish-data-mongodb/pom.xml | 17 ++ .../DefaultReactiveRepositoryImpl.java | 184 ++++++++++++++++++ .../repository/DefaultRepositoryImpl.java | 173 ++++++++++++++++ .../mongodb/repository/QueryBuildUtils.java | 60 ++++++ .../ReactivePageableExecutionUtils.java | 68 +++++++ .../framework/dict/domain/DictionaryQo.java | 6 +- .../framework/logging/domain/LogQo.java | 16 +- .../framework/domain/PermissionQo.java | 10 +- .../com/flyfish/framework/domain/RoleQo.java | 9 +- .../com/flyfish/framework/domain/UserQo.java | 15 +- .../framework/service/RoleService.java | 14 +- .../beans/enums/ValidationCandidate.java | 2 +- 35 files changed, 1336 insertions(+), 192 deletions(-) create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/LambdaQueryChain.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/NamedQueryChain.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Query.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryChain.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryCondition.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryDefinition.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryMutation.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/support/DomainFunction.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/support/SFunction.java create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/ReactiveEntityOperations.java delete mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/Query.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/DefaultReactiveRepositoryImpl.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/DefaultRepositoryImpl.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/QueryBuildUtils.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/ReactivePageableExecutionUtils.java diff --git a/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainQo.java b/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainQo.java index 6695087..9f8b121 100644 --- a/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainQo.java +++ b/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainQo.java @@ -4,8 +4,8 @@ import com.flyfish.framework.annotations.EnumValue; import com.flyfish.framework.annotations.Order; import com.flyfish.framework.annotations.Property; import com.flyfish.framework.approval.enums.ApproveStatus; -import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.domain.authorized.AuthorizedQo; +import com.flyfish.framework.query.QueryDefinition; import lombok.Getter; import lombok.Setter; @@ -24,7 +24,7 @@ public class ApprovalDomainQo extends AuthorizedQo private String status; @Override - public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder().with("status", "approveStatus"); + public QueryDefinition queryBuilder() { + return super.queryBuilder().mutate().and(T::getApproveStatus).eq(status); } } diff --git a/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/record/ApproveRecordQo.java b/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/record/ApproveRecordQo.java index c253845..aeb4204 100644 --- a/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/record/ApproveRecordQo.java +++ b/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/record/ApproveRecordQo.java @@ -1,7 +1,7 @@ package com.flyfish.framework.approval.domain.record; -import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.domain.base.NameLikeQo; +import com.flyfish.framework.query.QueryDefinition; import lombok.Getter; import lombok.Setter; @@ -27,7 +27,12 @@ public class ApproveRecordQo extends NameLikeQo { private String approver; @Override - public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder().with("module", "dataId", "approved", "approver"); + public QueryDefinition queryBuilder() { + return super.queryBuilder() + .mutate() + .and(ApproveRecord::getModule).eq(module) + .and(ApproveRecord::getDataId).eq(dataId) + .and(ApproveRecord::getApproved).eq(approved) + .and(ApproveRecord::getApprover).eq(approver); } } diff --git a/flyfish-backup/src/main/java/com/flyfish/framework/backup/scheduler/BackupScheduler.java b/flyfish-backup/src/main/java/com/flyfish/framework/backup/scheduler/BackupScheduler.java index 26f2690..43c5cd9 100644 --- a/flyfish-backup/src/main/java/com/flyfish/framework/backup/scheduler/BackupScheduler.java +++ b/flyfish-backup/src/main/java/com/flyfish/framework/backup/scheduler/BackupScheduler.java @@ -13,7 +13,7 @@ import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.data.mongodb.core.ReactiveMongoOperations; -import org.springframework.data.mongodb.repository.query.MongoEntityInformation; +import org.springframework.data.repository.core.support.PersistentEntityInformation; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.unit.DataSize; @@ -22,7 +22,6 @@ import reactor.core.publisher.Mono; import java.io.IOException; import java.nio.channels.AsynchronousFileChannel; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -45,7 +44,7 @@ public class BackupScheduler { // data buffer 工厂 private final DataBufferFactory factory = new DefaultDataBufferFactory(); // 用于注入所有集合名称 - private List> collections; + private List> collections; // 异步的mongo操作,可以快速备份 private ReactiveMongoOperations operations; // 备份路径 diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java index e6d785c..06e93a4 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AbstractAuthorizedQo.java @@ -1,11 +1,11 @@ package com.flyfish.framework.domain.authorized; -import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.domain.base.NameLikeQo; import com.flyfish.framework.domain.po.Department; +import com.flyfish.framework.query.LambdaQueryChain; +import com.flyfish.framework.query.Queries; import lombok.Setter; import org.apache.commons.lang3.BooleanUtils; -import org.springframework.data.mongodb.core.query.Criteria; import java.util.Collections; import java.util.Set; @@ -38,20 +38,17 @@ public abstract class AbstractAuthorizedQo extends N * * @return 结果 */ - protected Criteria withPublished() { + protected LambdaQueryChain withPublished() { if (null != published) { if (BooleanUtils.isTrue(published)) { - return Criteria.where("published").is(true); + return Queries.where(T::getPublished).eq(true); } - return Criteria.where("$or").is( - CriteriaBuilder.createCriteriaList( - Criteria.where("published").isNull(), - Criteria.where("published").is(false) - ) + return Queries.within( + Queries.where(T::getPublished).isNull().or(T::getPublished).eq(false) ); } else { // 未指定发布状态,查询已发布内容 - return Criteria.where("published").is(true); + return Queries.where(T::getPublished).eq(true); } } diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java index 58e923d..6bd0eeb 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/AuthorizedQo.java @@ -1,11 +1,11 @@ package com.flyfish.framework.domain.authorized; -import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.enums.UserType; +import com.flyfish.framework.query.QueryDefinition; +import com.flyfish.framework.query.Queries; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.BooleanUtils; -import org.springframework.data.mongodb.core.query.Criteria; /** * 带鉴权的查询实体,主要以部门隔绝 @@ -17,27 +17,26 @@ import org.springframework.data.mongodb.core.query.Criteria; public class AuthorizedQo extends AbstractAuthorizedQo { @Override - public CriteriaBuilder criteriaBuilder() { + public QueryDefinition queryBuilder() { // 超级管理员拥有查看所有草稿的权限 if (user.getType() == UserType.SUPER_ADMIN) { - return super.criteriaBuilder().with(this::withPublished); + return super.queryBuilder().mutate().and(this.withPublished()); } // 查询草稿,只查询自己的 if (BooleanUtils.isFalse(published)) { - return super.criteriaBuilder() - .with(this::withPublished) - .with(() -> Criteria.where("creatorId").is(user.getId())); + return super.queryBuilder() + .mutate() + .and(this.withPublished()) + .and(Queries.where(T::getCreatorId).eq(user.getId())); } // 普通查询,根据权限配置查询 - return super.criteriaBuilder() - .with(this::withPublished) - .with(() -> Criteria.where("$or").is( - CriteriaBuilder.createCriteriaList( - Criteria.where("authorizeId").in(authorizeIds()), - Criteria.where("creatorId").is(user.getId()) - .and("authorizeId").in(((AuthorizedUserDetails) user).getVisibleDeparts()) - ) - )); + return super.queryBuilder() + .mutate() + .and(this.withPublished()) + .and(Queries.where(T::getAuthorizeId).in(authorizeIds()) + .or(Queries.where(T::getCreatorId).eq(user.getId()) + .and(T::getAuthorizeId).in(((AuthorizedUserDetails) user).getVisibleDeparts())) + ); } } diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java index e2c6cfc..6896ed3 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/authorized/advanced/OwnedAuthorizedQo.java @@ -1,14 +1,13 @@ package com.flyfish.framework.domain.authorized.advanced; -import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.domain.authorized.AbstractAuthorizedQo; import com.flyfish.framework.domain.authorized.AuthorizedUserDetails; import com.flyfish.framework.enums.UserType; +import com.flyfish.framework.query.QueryDefinition; +import com.flyfish.framework.query.Queries; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.BooleanUtils; -import org.bson.types.ObjectId; -import org.springframework.data.mongodb.core.query.Criteria; /** * 拥有归属权的授权查询 @@ -22,32 +21,29 @@ import org.springframework.data.mongodb.core.query.Criteria; public class OwnedAuthorizedQo extends AbstractAuthorizedQo { @Override - public CriteriaBuilder criteriaBuilder() { + public QueryDefinition queryBuilder() { // 超级管理员拥有查看所有草稿的权限 if (user.getType() == UserType.SUPER_ADMIN) { - return super.criteriaBuilder().with(this::withPublished); + return super.queryBuilder().mutate().and(this.withPublished()); } // 查询草稿,只查询自己的 if (BooleanUtils.isFalse(published)) { - return super.criteriaBuilder() - .with(this::withPublished) - .with(() -> Criteria.where("$or").is( - CriteriaBuilder.createCriteriaList( - Criteria.where("creatorId").is(user.getId()), - Criteria.where("owners.$id").is(new ObjectId(user.getId())) - ) - )); + return super.queryBuilder() + .mutate() + .and(this.withPublished()) + // 此处原意为使用用户id匹配owners列中的id,修改后框架会自动判定并解包,存在耦合性 + .and(Queries + .where(T::getCreatorId).eq(user.getId()) + .or(T::getOwners).hasId(user.getId())); } // 普通查询,根据权限配置查询 - return super.criteriaBuilder() - .with(this::withPublished) - .with(() -> Criteria.where("$or").is( - CriteriaBuilder.createCriteriaList( - Criteria.where("authorizeId").in(authorizeIds()), - Criteria.where("creatorId").is(user.getId()) - .and("authorizeId").in(((AuthorizedUserDetails) user).getVisibleDeparts()), - Criteria.where("owners.$id").is(new ObjectId(user.getId())) - ) - )); + return super.queryBuilder() + .mutate() + .and(this.withPublished()) + .and(() -> Queries.where(T::getAuthorizeId).in(authorizeIds()) + .or(Queries.where(T::getCreatorId).eq(user.getId()) + .and(T::getAuthorizeId).in(((AuthorizedUserDetails) user).getVisibleDeparts())) + .or(Queries.where(T::getOwners).hasId(user.getId())) + ); } } diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java index 9852acc..c5b1abc 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/BaseQo.java @@ -1,11 +1,10 @@ package com.flyfish.framework.domain.base; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.flyfish.framework.builder.CriteriaBuilder; +import com.flyfish.framework.query.QueryDefinition; import org.springframework.data.domain.Example; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Criteria; import java.lang.reflect.ParameterizedType; import java.util.List; @@ -100,10 +99,10 @@ public class BaseQo implements Qo { * @return 结果 */ @Override - public Criteria getCriteria() { - CriteriaBuilder criteriaBuilder = criteriaBuilder(); - if (null != criteriaBuilder) { - return criteriaBuilder.build(); + public C getCriteria() { + QueryDefinition queryDefinition = queryBuilder(); + if (null != queryDefinition) { + return queryDefinition.build(); } return null; } @@ -123,8 +122,8 @@ public class BaseQo implements Qo { * * @return 结果 */ - public CriteriaBuilder criteriaBuilder() { - return CriteriaBuilder.accept(this); + public QueryDefinition queryBuilder() { + return null; } /** diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java index 6d6b219..916da23 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/NameLikeQo.java @@ -1,12 +1,10 @@ package com.flyfish.framework.domain.base; -import com.flyfish.framework.annotations.query.QueryField; -import com.flyfish.framework.builder.CriteriaBuilder; +import com.flyfish.framework.query.QueryDefinition; import com.flyfish.framework.query.Queries; import lombok.Getter; import lombok.Setter; import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.util.StringUtils; import java.util.Collection; @@ -19,31 +17,22 @@ import java.util.List; @Setter public class NameLikeQo extends BaseQo { - @QueryField(type = QueryField.Type.LIKE) protected String name; - @QueryField protected String code; - @QueryField(name = "createTime", type = QueryField.Type.BETWEEN) protected List createTimeRange; - @QueryField(name = "modifyTime", type = QueryField.Type.BETWEEN) protected List modifyTimeRange; - @QueryField protected String creatorId; - @QueryField protected String modifierId; - @QueryField protected Boolean enable; - @QueryField(type = QueryField.Type.IN) protected Collection ids; - @QueryField(name = "id", type = QueryField.Type.NE) protected String excludeId; /** @@ -57,22 +46,24 @@ public class NameLikeQo extends BaseQo { private String distinct; @Override - public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder() - .with("name", CriteriaBuilder.Builders.LIKE) - .with("enable", "code", "creatorId", "modifierId") - .with("ids", "id", CriteriaBuilder.Builders.IN) - .with("excludeId", "id", Criteria::ne) - .with("createTimeRange", "createTime", CriteriaBuilder.Builders.DATE_RANGE) - .with("modifyTimeRange", "modifyTime", CriteriaBuilder.Builders.DATE_RANGE); + public QueryDefinition queryBuilder() { + return Queries.where("name").like(name) + .and("enable").eq(enable) + .and("code").eq(code) + .and("creatorId").eq(creatorId) + .and("modifierId").eq(modifierId) + .and("id").in(ids) + .and("id").ne(excludeId) + .and("createTime").between(createTimeRange) + .and("modifyTime").between(modifyTimeRange); } @Override public Sort sorts() { - if (StringUtils.isEmpty(sort)) { - return super.sorts(); + if (StringUtils.hasText(sort)) { + return Sort.by(Sort.Order.desc(sort)); } - return Sort.by(Sort.Order.desc(sort)); + return super.sorts(); } } diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Qo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Qo.java index 50e3ace..3ebbd1d 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Qo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/base/Qo.java @@ -71,7 +71,7 @@ public interface Qo { * @return 结果 */ @JsonIgnore - Criteria getCriteria(); + C getCriteria(); /** * 获取查询的字段 diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java index 35a87c8..dcf907d 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/domain/tree/TreeQo.java @@ -1,12 +1,11 @@ package com.flyfish.framework.domain.tree; -import com.flyfish.framework.builder.CriteriaBuilder; -import com.flyfish.framework.domain.base.Domain; import com.flyfish.framework.domain.base.NameLikeQo; +import com.flyfish.framework.query.QueryDefinition; +import com.flyfish.framework.query.LambdaQueryChain; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.BooleanUtils; -import org.springframework.data.mongodb.core.query.Criteria; import java.util.List; @@ -15,7 +14,7 @@ import java.util.List; */ @Getter @Setter -public class TreeQo extends NameLikeQo { +public class TreeQo> extends NameLikeQo { private Integer depth; @@ -26,14 +25,13 @@ public class TreeQo extends NameLikeQo { private Boolean recursive; @Override - public CriteriaBuilder criteriaBuilder() { - CriteriaBuilder builder = super.criteriaBuilder().with("depth"); + public QueryDefinition queryBuilder() { + LambdaQueryChain chain = super.queryBuilder().mutate().and(T::getDepth).eq(depth); if (BooleanUtils.isTrue(recursive)) { - builder.with("parentId", "parentIds", Criteria::is) - .with("parentIds", "parentIds", CriteriaBuilder.Builders.IN); + chain.and(T::getParentIds).has(parentId).and(T::getParentIds).in(parentId); } else { - builder.with("parentId").with("parentIds", "parentId", CriteriaBuilder.Builders.IN); + chain.and(T::getParentId).eq(parentId).and(T::getParentId).in(parentIds); } - return builder; + return chain; } } diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/LambdaQueryChain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/LambdaQueryChain.java new file mode 100644 index 0000000..2941a02 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/LambdaQueryChain.java @@ -0,0 +1,101 @@ +package com.flyfish.framework.query; + +import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.query.Queries.Combinator; +import com.flyfish.framework.query.support.DomainFunction; + +import java.util.List; +import java.util.function.Supplier; + +/** + * lambda查询条件 + * + * @author wangyu + */ +public interface LambdaQueryChain extends QueryChain, DomainFunction> { + + /** + * 以且连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + QueryCondition> and(DomainFunction column); + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + > LambdaQueryChain and(Supplier> supplier); + + /** + * 条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + LambdaQueryChain and(LambdaQueryChain chain); + + /** + * 多个嵌套子条件列表 + * + * @param chains 多条链 + * @return 结果 + */ + @Override + default LambdaQueryChain and(List> chains) { + return QueryChain.super.and(chains); + } + + /** + * 多个嵌套子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + LambdaQueryChain and(List> chains, Combinator combinator); + + /** + * 以或连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + QueryCondition> or(DomainFunction column); + + /** + * 以或连接条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + LambdaQueryChain or(LambdaQueryChain chain); + + /** + * 以或连接嵌套多个子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + LambdaQueryChain or(List> chains, Combinator combinator); + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + > LambdaQueryChain or(Supplier> supplier); +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/NamedQueryChain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/NamedQueryChain.java new file mode 100644 index 0000000..632d97c --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/NamedQueryChain.java @@ -0,0 +1,99 @@ +package com.flyfish.framework.query; + +import com.flyfish.framework.query.Queries.Combinator; + +import java.util.List; +import java.util.function.Supplier; + +/** + * 查询链条 + * + * @author wangyu + */ +public interface NamedQueryChain extends QueryChain { + + /** + * 以且连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + QueryCondition and(String column); + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + > NamedQueryChain and(Supplier> supplier); + + /** + * 条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + NamedQueryChain and(NamedQueryChain chain); + + /** + * 多个嵌套子条件列表 + * + * @param chains 多条链 + * @return 结果 + */ + @Override + default NamedQueryChain and(List chains) { + return QueryChain.super.and(chains); + } + + /** + * 多个嵌套子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + NamedQueryChain and(List chains, Combinator combinator); + + /** + * 以或连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + QueryCondition or(String column); + + /** + * 以或连接条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + NamedQueryChain or(NamedQueryChain chain); + + /** + * 以或连接嵌套多个子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + NamedQueryChain or(List chains, Combinator combinator); + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + > NamedQueryChain or(Supplier> supplier); +} 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 6fffe14..4980664 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 @@ -1,16 +1,85 @@ package com.flyfish.framework.query; +import com.flyfish.framework.domain.base.Domain; import com.flyfish.framework.domain.base.Qo; +import java.util.function.Function; + /** * 查询工具类 * 基于Fluent API风格实现 * 底层基于适配器兼容各种数据库,包括关系型数据库和 + * 自动判定空值,空值默认情况不会进行查询 + * * @author wangyu */ public final class Queries { - public static Queries of(Qo qo) { - + /** + * 通过qo快速创建一个绑定上下文 + * + * @param qo 查询实体 + * @return 结果 + */ + public static NamedQueryChain of(Qo qo) { + return (NamedQueryChain) new Object(); } + + /** + * 创建基于字符串字段名的查询 + * + * @param column 列名 + * @return 结果 + */ + public static QueryCondition where(String column) { + return (QueryCondition) new Object(); + } + + /** + * 创建基于lambda字段引用的查询 + * + * @param getter 列引用 + * @return 结果 + */ + public static QueryCondition> where(Function getter) { + return (QueryCondition>) new Object(); + } + + /** + * 以嵌套条件开始 + * + * @param chain 要嵌套的条件 + * @return 结果 + */ + public static NamedQueryChain within(NamedQueryChain chain) { + return (NamedQueryChain) new Object(); + } + + + /** + * 以嵌套条件开始 + * + * @param chain 要嵌套的条件 + * @return 结果 + */ + public static LambdaQueryChain within(LambdaQueryChain chain) { + return (LambdaQueryChain) new Object(); + } + + /** + * 传入多个查询列表时的连接方式 + */ + public enum Combinator { + + AND, OR + } + + /** + * 方向,用于描述查询和部分语法 + */ + public enum Direction { + + LEFT, RIGHT, ALL + } + } diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Query.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Query.java new file mode 100644 index 0000000..5ddc486 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/Query.java @@ -0,0 +1,56 @@ +package com.flyfish.framework.query; + +import com.flyfish.framework.domain.base.Domain; +import lombok.Data; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; + +import java.util.function.Function; + +/** + * 抽象查询实体 + * + * @author wangyu + */ +@Data +public class Query { + + // 查询定义 + private QueryDefinition definition; + // 排序 + private Sort sort; + // 分页 + private Pageable pageable; + + /** + * 初始化一个查询 + * + * @param definition 查询定义 + * @return 结果 + */ + public static Query query(QueryDefinition definition) { + Query query = new Query(); + query.setDefinition(definition); + return query; + } + + /** + * 指定选择的字段 + * + * @param columns 字段们 + * @return 当前自身 + */ + public Query select(String... columns) { + return this; + } + + /** + * 指定选择的字段 + * + * @param getters 字段们 + * @return 当前自身 + */ + public Query select(Function... getters) { + return this; + } +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryChain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryChain.java new file mode 100644 index 0000000..ccc8899 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryChain.java @@ -0,0 +1,106 @@ +package com.flyfish.framework.query; + +import com.flyfish.framework.query.Queries.Combinator; + +import java.util.List; +import java.util.function.Supplier; + +/** + * 查询链 + * 此处为高度抽象,便于上层调用 + * 下层重写方法实现 + * + * @param 本类型泛型 + * @param

参数泛型 + * @author wangyu + */ +public interface QueryChain, P> extends QueryDefinition { + + /** + * 以且连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + QueryCondition and(P column); + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @param 泛型,支持其他类型的链 + * @return 结果 + */ + > C and(Supplier> supplier); + + /** + * 条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + C and(C chain); + + /** + * 多个嵌套子条件列表 + * + * @param chains 多条链 + * @return 结果 + */ + default C and(List chains) { + return and(chains, Combinator.AND); + } + + /** + * 多个嵌套子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + C and(List chains, Combinator combinator); + + /** + * 以或连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + QueryCondition or(P column); + + /** + * 以或连接条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + C or(C chain); + + /** + * 以或连接嵌套多个子条件列表 + * + * @param chains 多条链 + * @return 结果 + */ + default C or(List chains) { + return and(chains, Combinator.AND); + } + + /** + * 以或连接嵌套多个子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + C or(List chains, Combinator combinator); + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @param 泛型,支持其他类型的链 + * @return 结果 + */ + > C or(Supplier> supplier); +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryCondition.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryCondition.java new file mode 100644 index 0000000..cd1b916 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryCondition.java @@ -0,0 +1,102 @@ +package com.flyfish.framework.query; + +import java.util.Collection; +import java.util.List; + +/** + * 查询条件 + * + * @param 条件本类型 + * @author wangyu + */ +public interface QueryCondition> { + + /** + * 相等判定 + * + * @param value 值 + * @return 结果 + */ + C eq(Object value); + + /** + * 判定某列的值中存在指定值,特指json array数据类型且子类型中带有id的场景 + * 用于兼容mongodb查询,mysql查询使用JSON_CONTAINS进行判定。 + * 当且仅当mongodb会拼接.$id,mysql一律匹配id字段 + *

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

+ * 等价于 .eq(value) + * + * @param value 基本数据类型的值 + * @return 结果 + */ + C has(Object value); + + /** + * 不等判定 + * + * @param value 值 + * @return 结果 + */ + C ne(Object value); + + /** + * 值介于两者之间 + * + * @param items 双值列表 + * @return 结果 + */ + C between(List items); + + /** + * 模糊匹配,这里是全模糊 + * + * @param keyword 查询关键字 + * @return 结果 + */ + C like(String keyword); + + /** + * 根据指定的方向进行模糊查询 + * + * @param keyword 关键字 + * @param direction 方向,可以匹配开头和结尾 + * @return 结果 + */ + C like(String keyword, Queries.Direction direction); + + /** + * 判定为空 + * + * @return 结果 + */ + C isNull(); + + /** + * 包含在内 + * + * @param list 集合 + * @return 结果 + */ + C in(Collection list); + + /** + * 包含在内 + * 注意,需要根据字段类型推断。 + * 如果是json数组,需要进行双向匹配 + * + * @param values 值们 + * @return 结果 + */ + C in(Object... values); + +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryDefinition.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryDefinition.java new file mode 100644 index 0000000..46b1bfd --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryDefinition.java @@ -0,0 +1,31 @@ +package com.flyfish.framework.query; + +/** + * 可构建的 + * + * @author wangyu + */ +public interface QueryDefinition { + + /** + * 构建 + * + * @param 泛型 + * @return 构建结果 + */ + T build(); + + /** + * 修改,此修改会直接接着查询条件进行拼接 + * + * @return 修改句柄 + */ + QueryMutation mutate(); + + /** + * 会直接添加嵌套查询到当前查询末尾 + * + * @return 修改句柄 + */ + QueryMutation within(); +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryMutation.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryMutation.java new file mode 100644 index 0000000..9d1217d --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryMutation.java @@ -0,0 +1,81 @@ +package com.flyfish.framework.query; + +import com.flyfish.framework.domain.base.Domain; + +import java.util.function.Function; + +/** + * 查询修改逻辑 + * + * @author wangyu + */ +public interface QueryMutation { + + /** + * 以lambda的形式修改 + * 注意,如果之前用过lambda的形式,此处应该校验类型 + * + * @param getter 方法引用 + * @param 实体泛型 + * @return 结果 + */ + QueryCondition> and(Function getter); + + /** + * 以column的形式修改 + * + * @param column 列名 + * @return 结果 + */ + QueryCondition and(String column); + + /** + * 直接以and拼接其他的所有条件 + * + * @param chain 传入的查询 + * @return 结果 + */ + LambdaQueryChain and(LambdaQueryChain chain); + + /** + * 直接以and拼接其他的所有条件 + * + * @param chain 传入的查询 + * @return 结果 + */ + NamedQueryChain and(NamedQueryChain chain); + + /** + * 以lambda的形式修改 + * 注意,如果之前用过lambda的形式,此处应该校验类型 + * + * @param getter 方法引用 + * @param 实体泛型 + * @return 结果 + */ + QueryCondition> or(Function getter); + + /** + * 以column的形式修改 + * + * @param column 列名 + * @return 结果 + */ + QueryCondition or(String column); + + /** + * 直接以or拼接其他的所有条件 + * + * @param chain 传入的查询 + * @return 结果 + */ + LambdaQueryChain or(LambdaQueryChain chain); + + /** + * 直接以or拼接其他的所有条件 + * + * @param chain 传入的查询 + * @return 结果 + */ + NamedQueryChain or(NamedQueryChain chain); +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/support/DomainFunction.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/support/DomainFunction.java new file mode 100644 index 0000000..6af2533 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/support/DomainFunction.java @@ -0,0 +1,12 @@ +package com.flyfish.framework.query.support; + +import com.flyfish.framework.domain.base.Domain; + +/** + * 支持序列化的实体方法 + * + * @param 泛型,父类为实体 + */ +@FunctionalInterface +public interface DomainFunction extends SFunction { +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/support/SFunction.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/support/SFunction.java new file mode 100644 index 0000000..ccffeb9 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/support/SFunction.java @@ -0,0 +1,14 @@ +package com.flyfish.framework.query.support; + +import java.io.Serializable; +import java.util.function.Function; + +/** + * 支持序列化的function + * + * @param 泛型入参 + * @param 泛型返回值 + */ +@FunctionalInterface +public interface SFunction extends Function, Serializable { +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/ReactiveEntityOperations.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/ReactiveEntityOperations.java new file mode 100644 index 0000000..8582fba --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/ReactiveEntityOperations.java @@ -0,0 +1,23 @@ +package com.flyfish.framework.repository; + +import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.query.Query; +import reactor.core.publisher.Flux; + +/** + * 高层封装的模型操作 + * + * @author wangyu + */ +public interface ReactiveEntityOperations { + + /** + * 查询,通过查询条件和类进行精确查询 + * + * @param query 查询 + * @param entityClass 查询实体类 + * @param 实体类的实例化结果 + * @return 查询结果 + */ + Flux find(Query query, Class entityClass); +} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java index 2dedee1..b5b6c38 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java @@ -34,19 +34,19 @@ abstract class QueryBuildUtils { * @return 结果 */ static Optional buildQuery(Qo qo) { - Criteria criteria = null; - if (null != qo.getCriteria()) { - criteria = qo.getCriteria(); - } else if (null != qo.getExample()) { - criteria = new Criteria().alike(qo.getExample()); - } else { - Class type = qo.pojoType(); - if (null != type && !Object.class.equals(type)) { - try { - T pojo = CopyUtils.copyQueryProps(qo, qo.pojoType().newInstance()); - criteria = new Criteria().alike(Example.of(pojo)); - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); + Criteria criteria = qo.getCriteria(); + if (null == criteria) { + if (null != qo.getExample()) { + criteria = new Criteria().alike(qo.getExample()); + } else { + Class type = qo.pojoType(); + if (null != type && !Object.class.equals(type)) { + try { + T pojo = CopyUtils.copyQueryProps(qo, qo.pojoType().newInstance()); + criteria = new Criteria().alike(Example.of(pojo)); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } } } } diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/Query.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/Query.java deleted file mode 100644 index afb659a..0000000 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/utils/Query.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.flyfish.framework.utils; - - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * 查询参数 - */ -public class Query extends LinkedHashMap { - private static final long serialVersionUID = 1L; - //当前页码 - private int page = 1; - //每页条数 - private int limit = 10; - - public Query(Map params) { - this.putAll(params); - //分页参数 - if (params.get("page") != null) { - this.page = Integer.parseInt(params.get("page").toString()); - } - if (params.get("limit") != null) { - this.limit = Integer.parseInt(params.get("limit").toString()); - } - this.remove("page"); - this.remove("limit"); - } - - - public int getPage() { - return page; - } - - public void setPage(int page) { - this.page = page; - } - - public int getLimit() { - return limit; - } - - public void setLimit(int limit) { - this.limit = limit; - } -} diff --git a/flyfish-data/flyfish-data-mongodb/pom.xml b/flyfish-data/flyfish-data-mongodb/pom.xml index f79189c..2a55c88 100644 --- a/flyfish-data/flyfish-data-mongodb/pom.xml +++ b/flyfish-data/flyfish-data-mongodb/pom.xml @@ -16,4 +16,21 @@ 8 + + + org.springframework.boot + spring-boot-starter-data-mongodb-reactive + + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + + com.flyfish.framework + flyfish-data-common + ${project.version} + + diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/DefaultReactiveRepositoryImpl.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/DefaultReactiveRepositoryImpl.java new file mode 100644 index 0000000..8e333fc --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/DefaultReactiveRepositoryImpl.java @@ -0,0 +1,184 @@ +package com.flyfish.framework.mongodb.repository; + +import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.domain.base.Qo; +import com.flyfish.framework.repository.DefaultReactiveRepository; +import lombok.Getter; +import lombok.NonNull; +import org.apache.commons.lang3.StringUtils; +import org.springframework.dao.IncorrectResultSizeDataAccessException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.ReactiveMongoOperations; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.repository.query.MongoEntityInformation; +import org.springframework.data.mongodb.repository.support.SimpleReactiveMongoRepository; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.util.List; +import java.util.Optional; + +/** + * 默认的异步仓库实现 + * + * @param 泛型 + */ +public class DefaultReactiveRepositoryImpl extends SimpleReactiveMongoRepository + implements DefaultReactiveRepository { + + @Getter + private final MongoEntityInformation entityInformation; + + private final ReactiveMongoOperations mongoOperations; + + public DefaultReactiveRepositoryImpl(@NonNull MongoEntityInformation entityInformation, + @NonNull ReactiveMongoOperations mongoOperations) { + super(entityInformation, mongoOperations); + this.mongoOperations = mongoOperations; + this.entityInformation = entityInformation; + } + + /** + * 通过名称查找一个 + * + * @param name 名称 + * @return 结果 + */ + @Override + public Mono findByName(String name) { + if (StringUtils.isNotBlank(name)) { + return mongoOperations.findOne(Query.query(Criteria.where("name").is(name)), + entityInformation.getJavaType(), entityInformation.getCollectionName()); + } + return Mono.empty(); + } + + /** + * Returns a single entity matching the given {@link Qo} or {@link Optional#empty()} if none was found. + * + * @param query must not be {@literal null}. + * @return a single entity matching the given {@link Qo} or {@link Optional#empty()} if none was found. + * @throws IncorrectResultSizeDataAccessException if the Qo yields more than one + * result. + */ + @Override + public Mono findOne(Qo query) { + return Mono.justOrEmpty(QueryBuildUtils.getQuery(query)) + .flatMap(querying -> mongoOperations.findOne(querying, entityInformation.getJavaType(), + entityInformation.getCollectionName())); + } + + /** + * Returns all entities matching the given {@link Qo}. In case no match could be found an empty + * {@link Iterable} is returned. + * + * @param query must not be {@literal null}. + * @return all entities matching the given {@link Qo}. + */ + @Override + public Flux findAll(Qo query) { + return Mono.justOrEmpty(QueryBuildUtils.getQuery(query)) + .flatMapMany(querying -> mongoOperations.find(querying, + entityInformation.getJavaType(), + entityInformation.getCollectionName())) + .doOnNext(t -> t.setCurrentUser(query.getUser())); + } + + /** + * Returns all entities matching the given {@link Qo} applying the given {@link Sort}. In case no match could + * be found an empty {@link Iterable} is returned. + * + * @param query must not be {@literal null}. + * @param sort the {@link Sort} specification to sort the results by, may be {@link Sort#empty()}, must not be + * {@literal null}. + * @return all entities matching the given {@link Qo}. + * @since 1.10 + */ + @Override + public Flux findAll(Qo query, Sort sort) { + return Mono.justOrEmpty(QueryBuildUtils.getQuery(query)) + .flatMapMany(querying -> mongoOperations.find(querying.with(sort), + entityInformation.getJavaType(), + entityInformation.getCollectionName())); + } + + /** + * Returns a {@link Page} of entities matching the given {@link Qo}. In case no match could be found, an empty + * {@link Page} is returned. + * + * @param query must not be {@literal null}. + * @param pageable may be {@link Pageable#unpaged()}, must not be {@literal null}. + * @return a {@link Page} of entities matching the given {@link Qo}. + */ + @Override + public Mono> findAll(Qo query, Pageable pageable) { + return Mono.justOrEmpty(QueryBuildUtils.getQuery(query)) + .flatMap(querying -> mongoOperations.find(querying.with(pageable), + entityInformation.getJavaType(), entityInformation.getCollectionName()) + .doOnNext(t -> t.setCurrentUser(query.getUser())) + .collectList() + .flatMap(list -> ReactivePageableExecutionUtils.getPage(list, pageable, this.count(query)))) + .defaultIfEmpty(Page.empty()); + } + + /** + * Returns the number of instances matching the given {@link Qo}. + * + * @param query the {@link Qo} to count instances for, must not be {@literal null}. + * @return the number of instances matching the {@link Qo}. + */ + @Override + public Mono count(Qo query) { + return Mono.justOrEmpty(QueryBuildUtils.getQuery(query)) + .flatMap(querying -> this.mongoOperations.count(querying, entityInformation.getJavaType(), + entityInformation.getCollectionName())) + .defaultIfEmpty(0L); + } + + /** + * 通过特定键的集合查询 + * + * @param key 键 + * @param values 集合 + * @return 结果 + */ + @Override + public Flux findAllByValues(String key, List values) { + Criteria criteria = Criteria.where(key).in(values); + Query query = new Query(criteria); + return mongoOperations.find(query, + entityInformation.getJavaType(), + entityInformation.getCollectionName()); + } + + /** + * Checks whether the data store contains elements that match the given {@link Qo}. + * + * @param query the {@link Qo} to use for the existence check, must not be {@literal null}. + * @return {@literal true} if the data store contains elements that match the given {@link Qo}. + */ + @Override + public Mono exists(Qo query) { + return Mono.justOrEmpty(QueryBuildUtils.getQuery(query)) + .flatMap(querying -> mongoOperations.exists(querying, + entityInformation.getJavaType(), entityInformation.getCollectionName())) + .defaultIfEmpty(false); + } + + /** + * 删除全部 + * + * @param qo 查询实体 + * @return 结果 + */ + @Override + public Mono deleteAll(Qo qo) { + return Mono.justOrEmpty(QueryBuildUtils.getQuery(qo)) + .flatMap(querying -> mongoOperations.remove(querying, entityInformation.getJavaType(), + entityInformation.getCollectionName())) + .then(Mono.empty()); + } +} diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/DefaultRepositoryImpl.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/DefaultRepositoryImpl.java new file mode 100644 index 0000000..10f7b23 --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/DefaultRepositoryImpl.java @@ -0,0 +1,173 @@ +package com.flyfish.framework.mongodb.repository; + +import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.domain.base.Qo; +import com.flyfish.framework.repository.DefaultRepository; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; +import org.springframework.dao.IncorrectResultSizeDataAccessException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.repository.query.MongoEntityInformation; +import org.springframework.data.mongodb.repository.support.SimpleMongoRepository; +import org.springframework.data.support.PageableExecutionUtils; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +/** + * 查询模型支持 + * + * @author wangyu + * 基于repo的公共扩展 + */ +public class DefaultRepositoryImpl extends SimpleMongoRepository + implements DefaultRepository { + + private MongoOperations mongoOperations; + @Getter + private MongoEntityInformation entityInformation; + + /** + * Creates a new {@link SimpleMongoRepository} for the given {@link MongoEntityInformation} and {@link MongoTemplate}. + * + * @param metadata must not be {@literal null}. + * @param mongoOperations must not be {@literal null}. + */ + public DefaultRepositoryImpl(MongoEntityInformation metadata, MongoOperations mongoOperations) { + super(metadata, mongoOperations); + this.mongoOperations = mongoOperations; + this.entityInformation = metadata; + } + + /** + * 通过名称查找一个 + * + * @param name 名称 + * @return 结果 + */ + @Override + public Optional findByName(String name) { + if (StringUtils.isNotBlank(name)) { + return Optional.ofNullable(mongoOperations.findOne(Query.query(Criteria.where("name").is(name)), + entityInformation.getJavaType(), entityInformation.getCollectionName())); + } + return Optional.empty(); + } + + /** + * Returns a single entity matching the given {@link Qo} or {@link Optional#empty()} if none was found. + * + * @param query must not be {@literal null}. + * @return a single entity matching the given {@link Qo} or {@link Optional#empty()} if none was found. + * @throws IncorrectResultSizeDataAccessException if the Qo yields more than one + * result. + */ + @Override + public Optional findOne(Qo query) { + return QueryBuildUtils.getQuery(query) + .map(querying -> mongoOperations.findOne(querying, + entityInformation.getJavaType(), + entityInformation.getCollectionName())); + } + + /** + * Returns all entities matching the given {@link Qo}. In case no match could be found an empty + * {@link Iterable} is returned. + * + * @param query must not be {@literal null}. + * @return all entities matching the given {@link Qo}. + */ + @Override + public Iterable findAll(Qo query) { + return QueryBuildUtils.getQuery(query) + .map(querying -> mongoOperations.find(querying, + entityInformation.getJavaType(), + entityInformation.getCollectionName())) + .orElse(Collections.emptyList()); + } + + /** + * Returns all entities matching the given {@link Qo} applying the given {@link Sort}. In case no match could + * be found an empty {@link Iterable} is returned. + * + * @param query must not be {@literal null}. + * @param sort the {@link Sort} specification to sort the results by, may be {@link Sort#empty()}, must not be + * {@literal null}. + * @return all entities matching the given {@link Qo}. + * @since 1.10 + */ + @Override + public Iterable findAll(Qo query, Sort sort) { + return QueryBuildUtils.getQuery(query) + .map(querying -> mongoOperations.find(querying.with(sort), + entityInformation.getJavaType(), + entityInformation.getCollectionName())) + .orElse(Collections.emptyList()); + } + + /** + * Returns a {@link Page} of entities matching the given {@link Qo}. In case no match could be found, an empty + * {@link Page} is returned. + * + * @param query must not be {@literal null}. + * @param pageable may be {@link Pageable#unpaged()}, must not be {@literal null}. + * @return a {@link Page} of entities matching the given {@link Qo}. + */ + @Override + public Page findAll(Qo query, Pageable pageable) { + return QueryBuildUtils.getQuery(query).map(querying -> { + List queryResult = mongoOperations.find(querying.with(pageable), + entityInformation.getJavaType(), entityInformation.getCollectionName()); + return PageableExecutionUtils.getPage(queryResult, pageable, () -> count(query)); + }).orElse(Page.empty()); + } + + /** + * Returns the number of instances matching the given {@link Qo}. + * + * @param query the {@link Qo} to count instances for, must not be {@literal null}. + * @return the number of instances matching the {@link Qo}. + */ + @Override + public long count(Qo query) { + return QueryBuildUtils.getQuery(query) + .map(q -> this.mongoOperations.count(q, entityInformation.getJavaType(), entityInformation.getCollectionName())) + .orElse(0L); + } + + /** + * 通过特定键的集合查询 + * + * @param key 键 + * @param values 集合 + * @return 结果 + */ + @Override + public List findAllByValues(String key, List values) { + Criteria criteria = Criteria.where(key).in(values); + Query query = new Query(criteria); + return mongoOperations.find(query, + entityInformation.getJavaType(), + entityInformation.getCollectionName()); + } + + /** + * Checks whether the data store contains elements that match the given {@link Qo}. + * + * @param query the {@link Qo} to use for the existence check, must not be {@literal null}. + * @return {@literal true} if the data store contains elements that match the given {@link Qo}. + */ + @Override + public boolean exists(Qo query) { + return QueryBuildUtils.getQuery(query).map(querying -> mongoOperations.exists(querying, + entityInformation.getJavaType(), entityInformation.getCollectionName())) + .orElse(false); + } +} diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/QueryBuildUtils.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/QueryBuildUtils.java new file mode 100644 index 0000000..e0b42c8 --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/QueryBuildUtils.java @@ -0,0 +1,60 @@ +package com.flyfish.framework.mongodb.repository; + +import com.flyfish.framework.domain.base.Qo; +import com.flyfish.framework.utils.CopyUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.data.domain.Example; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +import java.util.Optional; + +abstract class QueryBuildUtils { + + /** + * 从查询实体抽取内部查询信息 + * + * @param qo 查询实体 + * @return 结果 + */ + static Optional getQuery(Qo qo) { + return buildQuery(qo).map(query -> { + if (CollectionUtils.isNotEmpty(qo.getFields())) { + query.fields().include(qo.getFields().toArray(new String[]{})); + } + return query; + }); + } + + /** + * 构建查询 + * + * @param qo 查询实体 + * @param 泛型 + * @return 结果 + */ + static Optional buildQuery(Qo qo) { + Criteria criteria = qo.getCriteria(); + if (null == criteria) { + if (null != qo.getExample()) { + criteria = new Criteria().alike(qo.getExample()); + } else { + Class type = qo.pojoType(); + if (null != type && !Object.class.equals(type)) { + try { + T pojo = CopyUtils.copyQueryProps(qo, qo.pojoType().newInstance()); + criteria = new Criteria().alike(Example.of(pojo)); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + if (criteria != null) { + // 针对删除状态全局筛选 + return Optional.of(new Query(Criteria.where("delete").ne(true).andOperator(criteria)) + .with(qo.sorts())); + } + return Optional.empty(); + } +} diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/ReactivePageableExecutionUtils.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/ReactivePageableExecutionUtils.java new file mode 100644 index 0000000..656414f --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/repository/ReactivePageableExecutionUtils.java @@ -0,0 +1,68 @@ +/* + * Copyright 2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.flyfish.framework.mongodb.repository; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.Assert; +import reactor.core.publisher.Mono; + +import java.util.List; + +/** + * Support for query execution using {@link Pageable}. Using {@link ReactivePageableExecutionUtils} assumes that data + * queries are cheaper than {@code COUNT} queries and so some cases can take advantage of optimizations. + * + * @author Mark Paluch + * @since 3.3 + */ +abstract class ReactivePageableExecutionUtils { + + private ReactivePageableExecutionUtils() {} + + /** + * Constructs a {@link Page} based on the given {@code content}, {@link Pageable} and {@link Mono} applying + * optimizations. The construction of {@link Page} omits a count query if the total can be determined based on the + * result size and {@link Pageable}. + * + * @param content must not be {@literal null}. + * @param pageable must not be {@literal null}. + * @param totalSupplier must not be {@literal null}. + * @return the {@link Page}. + */ + public static Mono> getPage(List content, Pageable pageable, Mono totalSupplier) { + + Assert.notNull(content, "Content must not be null!"); + Assert.notNull(pageable, "Pageable must not be null!"); + Assert.notNull(totalSupplier, "TotalSupplier must not be null!"); + + if (pageable.isUnpaged() || pageable.getOffset() == 0) { + + if (pageable.isUnpaged() || pageable.getPageSize() > content.size()) { + return Mono.just(new PageImpl<>(content, pageable, content.size())); + } + + return totalSupplier.map(total -> new PageImpl<>(content, pageable, total)); + } + + if (!content.isEmpty() && pageable.getPageSize() > content.size()) { + return Mono.just(new PageImpl<>(content, pageable, pageable.getOffset() + content.size())); + } + + return totalSupplier.map(total -> new PageImpl<>(content, pageable, total)); + } +} diff --git a/flyfish-dict/src/main/java/com/flyfish/framework/dict/domain/DictionaryQo.java b/flyfish-dict/src/main/java/com/flyfish/framework/dict/domain/DictionaryQo.java index 0fc7c81..0b1c6ad 100644 --- a/flyfish-dict/src/main/java/com/flyfish/framework/dict/domain/DictionaryQo.java +++ b/flyfish-dict/src/main/java/com/flyfish/framework/dict/domain/DictionaryQo.java @@ -1,7 +1,7 @@ package com.flyfish.framework.dict.domain; -import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.domain.base.NameLikeQo; +import com.flyfish.framework.query.QueryDefinition; import lombok.Getter; import lombok.Setter; import org.apache.commons.collections4.CollectionUtils; @@ -22,8 +22,8 @@ public class DictionaryQo extends NameLikeQo { private List codes; @Override - public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder().with("codes", "code", CriteriaBuilder.Builders.IN); + public QueryDefinition queryBuilder() { + return super.queryBuilder().mutate().and(Dictionary::getCode).in(codes); } @Override diff --git a/flyfish-logging/src/main/java/com/flyfish/framework/logging/domain/LogQo.java b/flyfish-logging/src/main/java/com/flyfish/framework/logging/domain/LogQo.java index 49b578b..c42d9fb 100644 --- a/flyfish-logging/src/main/java/com/flyfish/framework/logging/domain/LogQo.java +++ b/flyfish-logging/src/main/java/com/flyfish/framework/logging/domain/LogQo.java @@ -1,8 +1,7 @@ package com.flyfish.framework.logging.domain; -import com.flyfish.framework.builder.CriteriaBuilder; -import com.flyfish.framework.domain.base.BaseQo; import com.flyfish.framework.domain.base.NameLikeQo; +import com.flyfish.framework.query.QueryDefinition; import lombok.Getter; import lombok.Setter; import org.springframework.data.domain.Sort; @@ -29,11 +28,14 @@ public class LogQo extends NameLikeQo { private String type; @Override - public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder() - .with("operator", CriteriaBuilder.Builders.LIKE) - .with("type", "module", "success") - .with("range", "startTime", CriteriaBuilder.Builders.DATE_RANGE); + public QueryDefinition queryBuilder() { + return super.queryBuilder() + .mutate() + .and(Log::getOperator).like(operator) + .and(Log::getType).eq(type) + .and(Log::getModule).eq(module) + .and(Log::getSuccess).eq(success) + .and(Log::getStartTime).between(range); } @Override diff --git a/flyfish-user/src/main/java/com/flyfish/framework/domain/PermissionQo.java b/flyfish-user/src/main/java/com/flyfish/framework/domain/PermissionQo.java index 98e5832..fb78326 100644 --- a/flyfish-user/src/main/java/com/flyfish/framework/domain/PermissionQo.java +++ b/flyfish-user/src/main/java/com/flyfish/framework/domain/PermissionQo.java @@ -1,9 +1,9 @@ package com.flyfish.framework.domain; -import com.flyfish.framework.builder.CriteriaBuilder; -import com.flyfish.framework.domain.tree.TreeQo; import com.flyfish.framework.domain.po.Permission; +import com.flyfish.framework.domain.tree.TreeQo; +import com.flyfish.framework.query.QueryDefinition; import lombok.Getter; import lombok.Setter; import org.springframework.data.domain.Sort; @@ -27,7 +27,9 @@ public class PermissionQo extends TreeQo { } @Override - public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder().with("admin", "type"); + public QueryDefinition queryBuilder() { + return super.queryBuilder().mutate() + .and(Permission::isAdmin).eq(admin) + .and(Permission::getType).eq(type); } } diff --git a/flyfish-user/src/main/java/com/flyfish/framework/domain/RoleQo.java b/flyfish-user/src/main/java/com/flyfish/framework/domain/RoleQo.java index bc842dd..ff48ddc 100644 --- a/flyfish-user/src/main/java/com/flyfish/framework/domain/RoleQo.java +++ b/flyfish-user/src/main/java/com/flyfish/framework/domain/RoleQo.java @@ -1,8 +1,8 @@ package com.flyfish.framework.domain; -import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.domain.base.NameLikeQo; import com.flyfish.framework.domain.po.Role; +import com.flyfish.framework.query.QueryDefinition; import lombok.Getter; import lombok.Setter; @@ -33,8 +33,11 @@ public class RoleQo extends NameLikeQo { private List additions; @Override - public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder().with("admin", "system"); + public QueryDefinition queryBuilder() { + return super.queryBuilder() + .mutate() + .and(Role::getAdmin).eq(admin) + .and(Role::isSystem).eq(system); } /** diff --git a/flyfish-user/src/main/java/com/flyfish/framework/domain/UserQo.java b/flyfish-user/src/main/java/com/flyfish/framework/domain/UserQo.java index 5dc29d9..fd667cb 100644 --- a/flyfish-user/src/main/java/com/flyfish/framework/domain/UserQo.java +++ b/flyfish-user/src/main/java/com/flyfish/framework/domain/UserQo.java @@ -1,10 +1,9 @@ package com.flyfish.framework.domain; -import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.domain.base.NameLikeQo; import com.flyfish.framework.domain.po.User; +import com.flyfish.framework.query.QueryDefinition; import lombok.*; -import org.springframework.data.mongodb.core.query.Criteria; import java.util.List; @@ -28,8 +27,14 @@ public class UserQo extends NameLikeQo { private List departments; @Override - public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder().with("type", "username", "password", "phone", "status") - .with("departments", "departments", CriteriaBuilder.Builders.IN); + public QueryDefinition queryBuilder() { + return super.queryBuilder() + .mutate() + .and(User::getType).eq(type) + .and(User::getUsername).eq(username) + .and(User::getPassword).eq(password) + .and(User::getPhone).eq(phone) + .and(User::getStatus).eq(status) + .and(User::getDepartments).in(departments); } } diff --git a/flyfish-user/src/main/java/com/flyfish/framework/service/RoleService.java b/flyfish-user/src/main/java/com/flyfish/framework/service/RoleService.java index e45f330..44e1d86 100644 --- a/flyfish-user/src/main/java/com/flyfish/framework/service/RoleService.java +++ b/flyfish-user/src/main/java/com/flyfish/framework/service/RoleService.java @@ -10,14 +10,13 @@ import com.flyfish.framework.domain.po.Permission; import com.flyfish.framework.domain.po.Role; import com.flyfish.framework.enums.RoleType; import com.flyfish.framework.enums.UserType; +import com.flyfish.framework.query.Queries; +import com.flyfish.framework.query.Query; +import com.flyfish.framework.repository.ReactiveEntityOperations; import com.flyfish.framework.service.impl.BaseReactiveServiceImpl; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.data.mongodb.core.ReactiveMongoOperations; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -32,7 +31,7 @@ public class RoleService extends BaseReactiveServiceImpl { private final PermissionService permissionService; - private final ReactiveMongoOperations reactiveMongoOperations; + private final ReactiveEntityOperations reactiveEntityOperations; /** * 如果是管理员,设置拥有所有权限 @@ -69,9 +68,8 @@ public class RoleService extends BaseReactiveServiceImpl { * @return 结果 */ private Mono> getOwnedIds(IUser user) { - Query query = Query.query(Criteria.where("creatorId").is(user.getId())); - query.fields().include("_id"); - return reactiveMongoOperations.find(query, Role.class).map(Domain::getId).collect(Collectors.toSet()); + Query query = Query.query(Queries.where(Role::getCreatorId).eq(user.getId())).select(Role::getId); + return reactiveEntityOperations.find(query, Role.class).map(Domain::getId).collect(Collectors.toSet()); } /** diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/enums/ValidationCandidate.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/enums/ValidationCandidate.java index 0fe49a1..1f18fe6 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/enums/ValidationCandidate.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/enums/ValidationCandidate.java @@ -78,7 +78,7 @@ public enum ValidationCandidate { ID_CARD((annotation, validation) -> validation.setValidator("idCard"), IdCard.class), // 唯一字段 UNIQUE_FIELD((annotation, validation) -> validation.setValidator("uniqueField") - .prop("field", annotation.getString("value")), UniqueField.class); + .prop("column", annotation.getString("value")), UniqueField.class); private final BiConsumer, BeanValidation> mapper; From 4742c1d50c48921e72ce6cc04ca8f4e9744e2000 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Fri, 5 Aug 2022 15:56:40 +0800 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20=E4=BF=9D=E8=AF=81=E6=95=B4?= =?UTF-8?q?=E4=BD=93=E7=BB=93=E6=9E=84=E7=A8=B3=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/adaptor/CriteriaAdaptors.java | 34 ------ .../adaptor/spi/CriteriaAdaptorFactory.java | 26 ----- .../com/flyfish/framework/query/Queries.java | 46 +++++--- .../flyfish/framework/query/QueryChain.java | 2 +- .../framework/{adaptor => query}/README.md | 0 .../{ => query}/adaptor/CriteriaAdaptor.java | 2 +- .../query/spi/QueryChainFactory.java | 29 +++++ .../factory/MongoLambdaQueryFactory.java | 38 ++++++ .../query/factory/MongoNamedQueryFactory.java | 35 ++++++ .../query/impl/MongoLambdaQueryChain.java | 106 +++++++++++++++++ .../query/impl/MongoNamedQueryChain.java | 107 +++++++++++++++++ .../query/impl/MongoQueryDefinition.java | 42 +++++++ .../main/resources/META-INF/spring.factories | 3 + .../adaptor/R2DbcCriteriaAdaptorFactory.java | 34 ------ .../factory/R2dbcLambdaQueryFactory.java | 36 ++++++ .../query/factory/R2dbcNamedQueryFactory.java | 35 ++++++ .../query/impl/R2dbcLambdaQueryChain.java | 109 ++++++++++++++++++ .../query/impl/R2dbcNamedQueryChain.java | 107 +++++++++++++++++ .../query/impl/R2dbcQueryDefinition.java | 42 +++++++ .../main/resources/META-INF/spring.factories | 3 + 20 files changed, 723 insertions(+), 113 deletions(-) delete mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptors.java delete mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/spi/CriteriaAdaptorFactory.java rename flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/{adaptor => query}/README.md (100%) rename flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/{ => query}/adaptor/CriteriaAdaptor.java (98%) create mode 100644 flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/spi/QueryChainFactory.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/factory/MongoLambdaQueryFactory.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/factory/MongoNamedQueryFactory.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoLambdaQueryChain.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoQueryDefinition.java create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/resources/META-INF/spring.factories delete mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/adaptor/R2DbcCriteriaAdaptorFactory.java create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/factory/R2dbcLambdaQueryFactory.java create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/factory/R2dbcNamedQueryFactory.java create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcLambdaQueryChain.java create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcNamedQueryChain.java create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcQueryDefinition.java create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/resources/META-INF/spring.factories diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptors.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptors.java deleted file mode 100644 index c3771ca..0000000 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptors.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.flyfish.framework.adaptor; - -import com.flyfish.framework.adaptor.spi.CriteriaAdaptorFactory; -import org.springframework.core.io.support.SpringFactoriesLoader; -import org.springframework.dao.InvalidDataAccessApiUsageException; - -import java.util.List; - -/** - * 可以通过该工具类快速创建适配器 - * - * @author wangyu - */ -public final class CriteriaAdaptors { - - private static final List FACTORIES = - SpringFactoriesLoader.loadFactories(CriteriaAdaptorFactory.class, null); - - public static CriteriaAdaptor getAdaptor() { - return FACTORIES.stream() - .findFirst() - .map(CriteriaAdaptorFactory::produce) - .orElseThrow(() -> new InvalidDataAccessApiUsageException("未实现当前查询的适配工厂!")); - } - - - public static CriteriaAdaptor getAdaptor(Object criteria) { - return FACTORIES.stream() - .filter(factory -> factory.criteriaType().isAssignableFrom(criteria.getClass())) - .findFirst() - .map(CriteriaAdaptorFactory::produce) - .orElseThrow(() -> new InvalidDataAccessApiUsageException("未实现当前查询的适配工厂!")); - } -} diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/spi/CriteriaAdaptorFactory.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/spi/CriteriaAdaptorFactory.java deleted file mode 100644 index 192fe7a..0000000 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/spi/CriteriaAdaptorFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.flyfish.framework.adaptor.spi; - -import com.flyfish.framework.adaptor.CriteriaAdaptor; - -/** - * 查询适配器 - * 基于spi提供实现类,最终返回对应的 - * - * @author wangyu - */ -public interface CriteriaAdaptorFactory { - - /** - * 生产适配器 - * - * @return 结果 - */ - CriteriaAdaptor produce(); - - /** - * 查询类型 - * - * @return 结果 - */ - Class criteriaType(); -} 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 4980664..84462fb 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 @@ -1,9 +1,12 @@ package com.flyfish.framework.query; import com.flyfish.framework.domain.base.Domain; -import com.flyfish.framework.domain.base.Qo; +import com.flyfish.framework.query.spi.QueryChainFactory; +import com.flyfish.framework.query.support.DomainFunction; +import org.springframework.core.io.support.SpringFactoriesLoader; +import org.springframework.dao.InvalidDataAccessApiUsageException; -import java.util.function.Function; +import java.util.List; /** * 查询工具类 @@ -15,15 +18,8 @@ import java.util.function.Function; */ public final class Queries { - /** - * 通过qo快速创建一个绑定上下文 - * - * @param qo 查询实体 - * @return 结果 - */ - public static NamedQueryChain of(Qo qo) { - return (NamedQueryChain) new Object(); - } + private static final List FACTORIES = + SpringFactoriesLoader.loadFactories(QueryChainFactory.class, null); /** * 创建基于字符串字段名的查询 @@ -32,7 +28,8 @@ public final class Queries { * @return 结果 */ public static QueryCondition where(String column) { - return (QueryCondition) new Object(); + NamedQueryChain chain = getFactory(NamedQueryChain.class).produce(); + return chain.and(column); } /** @@ -41,8 +38,9 @@ public final class Queries { * @param getter 列引用 * @return 结果 */ - public static QueryCondition> where(Function getter) { - return (QueryCondition>) new Object(); + public static QueryCondition> where(DomainFunction getter) { + LambdaQueryChain chain = getFactory(LambdaQueryChain.class).produce(); + return chain.and(getter); } /** @@ -52,7 +50,8 @@ public final class Queries { * @return 结果 */ public static NamedQueryChain within(NamedQueryChain chain) { - return (NamedQueryChain) new Object(); + NamedQueryChain created = getFactory(LambdaQueryChain.class).produce(); + return created.and(chain); } @@ -63,7 +62,21 @@ public final class Queries { * @return 结果 */ public static LambdaQueryChain within(LambdaQueryChain chain) { - return (LambdaQueryChain) new Object(); + LambdaQueryChain created = getFactory(LambdaQueryChain.class).produce(); + return created.and(chain); + } + + /** + * 通过特定产出类获取工厂 + * + * @param targetType 目标类型 + * @return 匹配的工厂 + */ + private static QueryChainFactory getFactory(Class targetType) { + return FACTORIES.stream() + .filter(factory -> factory.supports(targetType)) + .findFirst() + .orElseThrow(() -> new InvalidDataAccessApiUsageException("未实现当前查询的适配工厂!")); } /** @@ -81,5 +94,4 @@ public final class Queries { LEFT, RIGHT, ALL } - } diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryChain.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryChain.java index ccc8899..e0ed7ed 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryChain.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/QueryChain.java @@ -28,7 +28,7 @@ public interface QueryChain, P> extends QueryDefiniti * 直接拼接提供者,此处懒加载,最终build才会执行 * * @param supplier 提供者 - * @param 泛型,支持其他类型的链 + * @param 泛型,支持其他类型的链 * @return 结果 */ > C and(Supplier> supplier); diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/README.md b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/README.md similarity index 100% rename from flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/README.md rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/README.md diff --git a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptor.java b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/adaptor/CriteriaAdaptor.java similarity index 98% rename from flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptor.java rename to flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/adaptor/CriteriaAdaptor.java index 3c15229..4628a40 100644 --- a/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/adaptor/CriteriaAdaptor.java +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/adaptor/CriteriaAdaptor.java @@ -1,4 +1,4 @@ -package com.flyfish.framework.adaptor; +package com.flyfish.framework.query.adaptor; import org.bson.BsonRegularExpression; import org.springframework.data.domain.Example; 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 new file mode 100644 index 0000000..5ed27e5 --- /dev/null +++ b/flyfish-data/flyfish-data-common/src/main/java/com/flyfish/framework/query/spi/QueryChainFactory.java @@ -0,0 +1,29 @@ +package com.flyfish.framework.query.spi; + +import com.flyfish.framework.query.QueryChain; + +/** + * 查询链创建抽象工厂 + * 基于spi提供实现类,最终返回真正实例化的内容 + * 根据引入的jar包自动加载,无需手动处理 + * + * @author wangyu + */ +public interface QueryChainFactory> { + + /** + * 生产适配器 + * 此接口为高度抽象接口,目的是兼容更多的查询链类型,便于后续扩展 + * + * @return 生产结果 + */ + C produce(); + + /** + * 判定是否支持特定的实例类型 + * + * @param targetType 工厂目标类型 + * @return 是否匹配 + */ + boolean supports(Class targetType); +} diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/factory/MongoLambdaQueryFactory.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/factory/MongoLambdaQueryFactory.java new file mode 100644 index 0000000..9e6b9a3 --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/factory/MongoLambdaQueryFactory.java @@ -0,0 +1,38 @@ +package com.flyfish.framework.mongodb.query.factory; + +import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.mongodb.query.impl.MongoLambdaQueryChain; +import com.flyfish.framework.mongodb.query.impl.MongoNamedQueryChain; +import com.flyfish.framework.query.LambdaQueryChain; +import com.flyfish.framework.query.QueryChain; +import com.flyfish.framework.query.spi.QueryChainFactory; + +/** + * mongo lambda 查询工厂 + * + * @author wangyu + */ +public class MongoLambdaQueryFactory implements QueryChainFactory> { + + /** + * 生产适配器 + * 此接口为高度抽象接口,目的是兼容更多的查询链类型,便于后续扩展 + * + * @return 生产结果 + */ + @Override + public LambdaQueryChain produce() { + return new MongoLambdaQueryChain<>(); + } + + /** + * 判定是否支持特定的实例类型 + * + * @param targetType 工厂目标类型 + * @return 是否匹配 + */ + @Override + public boolean supports(Class targetType) { + return targetType.isAssignableFrom(MongoLambdaQueryChain.class); + } +} diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/factory/MongoNamedQueryFactory.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/factory/MongoNamedQueryFactory.java new file mode 100644 index 0000000..92444e7 --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/factory/MongoNamedQueryFactory.java @@ -0,0 +1,35 @@ +package com.flyfish.framework.mongodb.query.factory; + +import com.flyfish.framework.mongodb.query.impl.MongoNamedQueryChain; +import com.flyfish.framework.query.NamedQueryChain; +import com.flyfish.framework.query.spi.QueryChainFactory; + +/** + * mongo名称查询工厂 + * + * @author wangyu + */ +public class MongoNamedQueryFactory implements QueryChainFactory { + + /** + * 生产适配器 + * 此接口为高度抽象接口,目的是兼容更多的查询链类型,便于后续扩展 + * + * @return 生产结果 + */ + @Override + public NamedQueryChain produce() { + return new MongoNamedQueryChain(); + } + + /** + * 判定是否支持特定的实例类型 + * + * @param targetType 工厂目标类型 + * @return 是否匹配 + */ + @Override + public boolean supports(Class targetType) { + return targetType.isAssignableFrom(MongoNamedQueryChain.class); + } +} diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoLambdaQueryChain.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoLambdaQueryChain.java new file mode 100644 index 0000000..1d64bcf --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoLambdaQueryChain.java @@ -0,0 +1,106 @@ +package com.flyfish.framework.mongodb.query.impl; + +import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.query.*; +import com.flyfish.framework.query.support.DomainFunction; + +import java.util.List; +import java.util.function.Supplier; + +/** + * mongodb实现的基于lambda的查询链 + * + * @author wangyu + */ +public class MongoLambdaQueryChain extends MongoQueryDefinition implements LambdaQueryChain { + + /** + * 以且连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + public QueryCondition> and(DomainFunction column) { + return null; + } + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + public > LambdaQueryChain and(Supplier> supplier) { + return null; + } + + /** + * 条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + public LambdaQueryChain and(LambdaQueryChain chain) { + return null; + } + + /** + * 多个嵌套子条件列表 + * + * @param lambdaQueryChains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + public LambdaQueryChain and(List> lambdaQueryChains, Queries.Combinator combinator) { + return null; + } + + /** + * 以或连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + public QueryCondition> or(DomainFunction column) { + return null; + } + + /** + * 以或连接条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + public LambdaQueryChain or(LambdaQueryChain chain) { + return null; + } + + /** + * 以或连接嵌套多个子条件列表 + * + * @param lambdaQueryChains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + public LambdaQueryChain or(List> lambdaQueryChains, Queries.Combinator combinator) { + return null; + } + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + public > LambdaQueryChain or(Supplier> supplier) { + return null; + } +} 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 new file mode 100644 index 0000000..1083617 --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java @@ -0,0 +1,107 @@ +package com.flyfish.framework.mongodb.query.impl; + +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 java.util.List; +import java.util.function.Supplier; + +/** + * mongodb实现的基于名称的查询链 + * + * @author wangyu + */ +public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQueryChain { + + /** + * 以且连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + public QueryCondition and(String column) { + return null; + } + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + public > NamedQueryChain and(Supplier> supplier) { + return null; + } + + /** + * 条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + public NamedQueryChain and(NamedQueryChain chain) { + return null; + } + + /** + * 多个嵌套子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + public NamedQueryChain and(List chains, Queries.Combinator combinator) { + return null; + } + + /** + * 以或连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + public QueryCondition or(String column) { + return null; + } + + /** + * 以或连接条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + public NamedQueryChain or(NamedQueryChain chain) { + return null; + } + + /** + * 以或连接嵌套多个子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + public NamedQueryChain or(List chains, Queries.Combinator combinator) { + return null; + } + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + public > NamedQueryChain or(Supplier> supplier) { + 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 new file mode 100644 index 0000000..6459470 --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoQueryDefinition.java @@ -0,0 +1,42 @@ +package com.flyfish.framework.mongodb.query.impl; + +import com.flyfish.framework.query.QueryDefinition; +import com.flyfish.framework.query.QueryMutation; + +/** + * mongo的查询定义 + * + * @author wangyu + */ +public class MongoQueryDefinition implements QueryDefinition { + + /** + * 构建 + * + * @return 构建结果 + */ + @Override + public T build() { + return null; + } + + /** + * 修改,此修改会直接接着查询条件进行拼接 + * + * @return 修改句柄 + */ + @Override + public QueryMutation mutate() { + return null; + } + + /** + * 会直接添加嵌套查询到当前查询末尾 + * + * @return 修改句柄 + */ + @Override + public QueryMutation within() { + return null; + } +} diff --git a/flyfish-data/flyfish-data-mongodb/src/main/resources/META-INF/spring.factories b/flyfish-data/flyfish-data-mongodb/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..a69106b --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +com.flyfish.framework.query.spi.QueryChainFactory=\ + com.flyfish.framework.mongodb.query.factory.MongoNamedQueryFactory,\ + com.flyfish.framework.mongodb.query.factory.MongoLambdaQueryFactory diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/adaptor/R2DbcCriteriaAdaptorFactory.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/adaptor/R2DbcCriteriaAdaptorFactory.java deleted file mode 100644 index 5b59604..0000000 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/adaptor/R2DbcCriteriaAdaptorFactory.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.flyfish.framework.r2dbc.adaptor; - -import com.flyfish.framework.adaptor.CriteriaAdaptor; -import com.flyfish.framework.adaptor.spi.CriteriaAdaptorFactory; -import org.springframework.data.relational.core.query.Criteria; - - -/** - * 实现适配层和底层的转化 - * - * @author wangyu - */ -public class R2DbcCriteriaAdaptorFactory implements CriteriaAdaptorFactory { - - /** - * 生产适配器 - * - * @return 结果 - */ - @Override - public CriteriaAdaptor produce() { - return null; - } - - /** - * 查询类型 - * - * @return 结果 - */ - @Override - public Class criteriaType() { - return Criteria.class; - } -} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/factory/R2dbcLambdaQueryFactory.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/factory/R2dbcLambdaQueryFactory.java new file mode 100644 index 0000000..0f84d03 --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/factory/R2dbcLambdaQueryFactory.java @@ -0,0 +1,36 @@ +package com.flyfish.framework.r2dbc.query.factory; + +import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.query.LambdaQueryChain; +import com.flyfish.framework.query.spi.QueryChainFactory; +import com.flyfish.framework.r2dbc.query.impl.R2dbcLambdaQueryChain; + +/** + * mongo lambda 查询工厂 + * + * @author wangyu + */ +public class R2dbcLambdaQueryFactory implements QueryChainFactory> { + + /** + * 生产适配器 + * 此接口为高度抽象接口,目的是兼容更多的查询链类型,便于后续扩展 + * + * @return 生产结果 + */ + @Override + public LambdaQueryChain produce() { + return new R2dbcLambdaQueryChain<>(); + } + + /** + * 判定是否支持特定的实例类型 + * + * @param targetType 工厂目标类型 + * @return 是否匹配 + */ + @Override + public boolean supports(Class targetType) { + return targetType.isAssignableFrom(R2dbcLambdaQueryChain.class); + } +} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/factory/R2dbcNamedQueryFactory.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/factory/R2dbcNamedQueryFactory.java new file mode 100644 index 0000000..68d1dd1 --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/factory/R2dbcNamedQueryFactory.java @@ -0,0 +1,35 @@ +package com.flyfish.framework.r2dbc.query.factory; + +import com.flyfish.framework.query.NamedQueryChain; +import com.flyfish.framework.query.spi.QueryChainFactory; +import com.flyfish.framework.r2dbc.query.impl.R2dbcNamedQueryChain; + +/** + * mongo名称查询工厂 + * + * @author wangyu + */ +public class R2dbcNamedQueryFactory implements QueryChainFactory { + + /** + * 生产适配器 + * 此接口为高度抽象接口,目的是兼容更多的查询链类型,便于后续扩展 + * + * @return 生产结果 + */ + @Override + public NamedQueryChain produce() { + return new R2dbcNamedQueryChain(); + } + + /** + * 判定是否支持特定的实例类型 + * + * @param targetType 工厂目标类型 + * @return 是否匹配 + */ + @Override + public boolean supports(Class targetType) { + return targetType.isAssignableFrom(R2dbcNamedQueryChain.class); + } +} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcLambdaQueryChain.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcLambdaQueryChain.java new file mode 100644 index 0000000..4927f59 --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcLambdaQueryChain.java @@ -0,0 +1,109 @@ +package com.flyfish.framework.r2dbc.query.impl; + +import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.query.LambdaQueryChain; +import com.flyfish.framework.query.Queries; +import com.flyfish.framework.query.QueryChain; +import com.flyfish.framework.query.QueryCondition; +import com.flyfish.framework.query.support.DomainFunction; + +import java.util.List; +import java.util.function.Supplier; + +/** + * mongodb实现的基于lambda的查询链 + * + * @author wangyu + */ +public class R2dbcLambdaQueryChain extends R2dbcQueryDefinition implements LambdaQueryChain { + + /** + * 以且连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + public QueryCondition> and(DomainFunction column) { + return null; + } + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + public > LambdaQueryChain and(Supplier> supplier) { + return null; + } + + /** + * 条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + public LambdaQueryChain and(LambdaQueryChain chain) { + return null; + } + + /** + * 多个嵌套子条件列表 + * + * @param lambdaQueryChains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + public LambdaQueryChain and(List> lambdaQueryChains, Queries.Combinator combinator) { + return null; + } + + /** + * 以或连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + public QueryCondition> or(DomainFunction column) { + return null; + } + + /** + * 以或连接条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + public LambdaQueryChain or(LambdaQueryChain chain) { + return null; + } + + /** + * 以或连接嵌套多个子条件列表 + * + * @param lambdaQueryChains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + public LambdaQueryChain or(List> lambdaQueryChains, Queries.Combinator combinator) { + return null; + } + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + public > LambdaQueryChain or(Supplier> supplier) { + return null; + } +} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcNamedQueryChain.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcNamedQueryChain.java new file mode 100644 index 0000000..f8485bd --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcNamedQueryChain.java @@ -0,0 +1,107 @@ +package com.flyfish.framework.r2dbc.query.impl; + +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 java.util.List; +import java.util.function.Supplier; + +/** + * mongodb实现的基于名称的查询链 + * + * @author wangyu + */ +public class R2dbcNamedQueryChain extends R2dbcQueryDefinition implements NamedQueryChain { + + /** + * 以且连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + public QueryCondition and(String column) { + return null; + } + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + public > NamedQueryChain and(Supplier> supplier) { + return null; + } + + /** + * 条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + public NamedQueryChain and(NamedQueryChain chain) { + return null; + } + + /** + * 多个嵌套子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + public NamedQueryChain and(List chains, Queries.Combinator combinator) { + return null; + } + + /** + * 以或连接下一个字段 + * + * @param column 列 + * @return 查询条件 + */ + @Override + public QueryCondition or(String column) { + return null; + } + + /** + * 以或连接条件列表 + * + * @param chain 多个条件们 + * @return 结果 + */ + @Override + public NamedQueryChain or(NamedQueryChain chain) { + return null; + } + + /** + * 以或连接嵌套多个子条件列表 + * + * @param chains 多条链 + * @param combinator 各个链条之间的连接方式 + * @return 结果 + */ + @Override + public NamedQueryChain or(List chains, Queries.Combinator combinator) { + return null; + } + + /** + * 直接拼接提供者,此处懒加载,最终build才会执行 + * + * @param supplier 提供者 + * @return 结果 + */ + @Override + public > NamedQueryChain or(Supplier> supplier) { + return null; + } +} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcQueryDefinition.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcQueryDefinition.java new file mode 100644 index 0000000..f41bee8 --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/query/impl/R2dbcQueryDefinition.java @@ -0,0 +1,42 @@ +package com.flyfish.framework.r2dbc.query.impl; + +import com.flyfish.framework.query.QueryDefinition; +import com.flyfish.framework.query.QueryMutation; + +/** + * mongo的查询定义 + * + * @author wangyu + */ +public class R2dbcQueryDefinition implements QueryDefinition { + + /** + * 构建 + * + * @return 构建结果 + */ + @Override + public T build() { + return null; + } + + /** + * 修改,此修改会直接接着查询条件进行拼接 + * + * @return 修改句柄 + */ + @Override + public QueryMutation mutate() { + return null; + } + + /** + * 会直接添加嵌套查询到当前查询末尾 + * + * @return 修改句柄 + */ + @Override + public QueryMutation within() { + return null; + } +} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/resources/META-INF/spring.factories b/flyfish-data/flyfish-data-r2dbc/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..ae2f258 --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +com.flyfish.framework.query.spi.QueryChainFactory=\ + com.flyfish.framework.r2dbc.query.factory.R2dbcLambdaQueryFactory,\ + com.flyfish.framework.r2dbc.query.factory.R2dbcNamedQueryFactory 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 5/7] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=E6=8A=BD?= =?UTF-8?q?=E8=B1=A1=E6=B3=9B=E5=9E=8B=E5=B7=A5=E5=8E=82=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=97=AE=E9=A2=98=EF=BC=8C=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E6=80=A7=EF=BC=8C=E5=8F=AF=E6=97=A0=E9=99=90?= =?UTF-8?q?=E5=A4=8D=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包自动加载,无需手动处理 * 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 6/7] =?UTF-8?q?feat:=20=E5=B0=86=E7=81=B5=E6=84=9F?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=AE=9E=E7=8E=B0=EF=BC=8C=E5=90=8E=E7=BB=AD?= =?UTF-8?q?=E5=BE=85=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); } /** From 89ac2c3fcf435710e902825080c5f50f143f0ac9 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Fri, 5 Aug 2022 17:31:37 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../query/impl/MongoNamedQueryChain.java | 11 ++++++-- .../query/impl/QueryChainListener.java | 28 +++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/QueryChainListener.java 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 a8a0b26..a34e8e6 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 @@ -5,20 +5,23 @@ 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; /** * mongodb实现的基于名称的查询链 + * 这里需要一个机制,能够将父类上下文带入,并且能够知晓实际查询对象的连接方式 + * 这就需要用到观察者模式,以便延迟执行。将动作作为事件发布到对象里,在具体的执行时机再进行fire。 + * 于是乎,我们便可以优雅而且低耦合的实现链式了。 * * @author wangyu */ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQueryChain { + private final QueryChainListener listener = null; + /** * 以且连接下一个字段 * @@ -27,6 +30,7 @@ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQ */ @Override public QueryCondition and(String column) { + listener.waitFor(criteria -> criteria.andOperator(criteria)); return new NamedQueryCondition(column); } @@ -127,7 +131,8 @@ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQ */ @Override public NamedQueryChain eq(Object value) { - MongoNamedQueryChain.this.criteria.is(value); + criteria.is(value); + listener.fire(); return MongoNamedQueryChain.this; } diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/QueryChainListener.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/QueryChainListener.java new file mode 100644 index 0000000..ac29119 --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/QueryChainListener.java @@ -0,0 +1,28 @@ +package com.flyfish.framework.mongodb.query.impl; + +import org.springframework.data.mongodb.core.query.Criteria; + +import java.util.function.Consumer; +import java.util.function.Function; + +/** + * 监听器,观察者 + * + * @author wangyu + */ +public interface QueryChainListener { + + /** + * 等待下一步消费 + * + * @return 本身 + */ + QueryChainListener waitFor(Consumer consumer); + + /** + * 触发动作 + * + * @return 本身 + */ + QueryChainListener fire(); +}