From c1f08e26dbc7e584bc20c7f0b70a2200de140c44 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 12 May 2023 14:04:36 +0800 Subject: [PATCH 01/43] =?UTF-8?q?=E6=96=B0=E5=A2=9E3.3.9=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dorive-api/pom.xml | 2 +- dorive-coating/pom.xml | 2 +- dorive-core/pom.xml | 2 +- dorive-event/pom.xml | 2 +- dorive-injection/pom.xml | 2 +- dorive-proxy/pom.xml | 2 +- dorive-ref/pom.xml | 2 +- dorive-spring-boot-starter/pom.xml | 2 +- pom.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dorive-api/pom.xml b/dorive-api/pom.xml index 82bd81e3..1e1d6087 100644 --- a/dorive-api/pom.xml +++ b/dorive-api/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 dorive-api diff --git a/dorive-coating/pom.xml b/dorive-coating/pom.xml index c7305c8e..93fa6cde 100644 --- a/dorive-coating/pom.xml +++ b/dorive-coating/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 dorive-coating diff --git a/dorive-core/pom.xml b/dorive-core/pom.xml index 5281a044..19353ff2 100644 --- a/dorive-core/pom.xml +++ b/dorive-core/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 dorive-core diff --git a/dorive-event/pom.xml b/dorive-event/pom.xml index a3458f2f..eb7dde78 100644 --- a/dorive-event/pom.xml +++ b/dorive-event/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 dorive-event diff --git a/dorive-injection/pom.xml b/dorive-injection/pom.xml index 9040115b..20aaf2a8 100644 --- a/dorive-injection/pom.xml +++ b/dorive-injection/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 dorive-injection diff --git a/dorive-proxy/pom.xml b/dorive-proxy/pom.xml index e9210c97..01c8a320 100644 --- a/dorive-proxy/pom.xml +++ b/dorive-proxy/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 dorive-proxy diff --git a/dorive-ref/pom.xml b/dorive-ref/pom.xml index 50c71731..8de9b58a 100644 --- a/dorive-ref/pom.xml +++ b/dorive-ref/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 dorive-ref diff --git a/dorive-spring-boot-starter/pom.xml b/dorive-spring-boot-starter/pom.xml index 9f2350ac..75832e37 100644 --- a/dorive-spring-boot-starter/pom.xml +++ b/dorive-spring-boot-starter/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 dorive-spring-boot-starter diff --git a/pom.xml b/pom.xml index c87f77db..8ed72e3f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.gitee.digital-engine dorive - 3.3.8 + 3.3.9 pom -- Gitee From 14aa1c4599b559415b836947f5fe8eec7242d5ea Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Tue, 23 May 2023 10:49:48 +0800 Subject: [PATCH 02/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{Property.java => Criterion.java} | 2 +- .../annotation/{Coating.java => Example.java} | 2 +- .../dorive/coating/entity/CoatingField.java | 8 ++++---- .../dorive/coating/entity/CoatingType.java | 14 ++++++------- .../{PropertyDef.java => CriterionDef.java} | 20 +++++++++---------- .../def/{CoatingDef.java => ExampleDef.java} | 10 +++++----- .../impl/resolver/CoatingTypeResolver.java | 20 +++++++++---------- 7 files changed, 38 insertions(+), 38 deletions(-) rename dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/{Property.java => Criterion.java} (97%) rename dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/{Coating.java => Example.java} (97%) rename dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/{PropertyDef.java => CriterionDef.java} (70%) rename dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/{CoatingDef.java => ExampleDef.java} (79%) diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Property.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Criterion.java similarity index 97% rename from dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Property.java rename to dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Criterion.java index 13bdaec6..7563ff99 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Property.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Criterion.java @@ -30,7 +30,7 @@ import java.lang.annotation.Target; @Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) -public @interface Property { +public @interface Criterion { @AliasFor("belongTo") String value() default "/"; diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Coating.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Example.java similarity index 97% rename from dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Coating.java rename to dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Example.java index 21b799da..4bbe1677 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Coating.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/annotation/Example.java @@ -28,5 +28,5 @@ import java.lang.annotation.Target; @Documented @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) -public @interface Coating { +public @interface Example { } diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingField.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingField.java index 86f11709..423f32d1 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingField.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingField.java @@ -18,7 +18,7 @@ package com.gitee.dorive.coating.entity; import cn.hutool.core.util.ReflectUtil; -import com.gitee.dorive.coating.entity.def.PropertyDef; +import com.gitee.dorive.coating.entity.def.CriterionDef; import lombok.AllArgsConstructor; import lombok.Data; @@ -36,7 +36,7 @@ public class CoatingField { private boolean collection; private Class genericType; private String name; - private PropertyDef propertyDef; + private CriterionDef criterionDef; public CoatingField(Field field) { this.field = field; @@ -50,11 +50,11 @@ public class CoatingField { Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0]; this.genericType = (Class) actualTypeArgument; } - propertyDef = PropertyDef.fromElement(field); + criterionDef = CriterionDef.fromElement(field); } public boolean isIgnore() { - return propertyDef.isIgnore(); + return criterionDef.isIgnore(); } public Object getFieldValue(Object object) { diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingType.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingType.java index 331542a6..1b06e528 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingType.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingType.java @@ -17,8 +17,8 @@ package com.gitee.dorive.coating.entity; -import com.gitee.dorive.coating.entity.def.CoatingDef; -import com.gitee.dorive.coating.entity.def.PropertyDef; +import com.gitee.dorive.coating.entity.def.ExampleDef; +import com.gitee.dorive.coating.entity.def.CriterionDef; import com.gitee.dorive.core.entity.executor.Criterion; import com.gitee.dorive.core.entity.executor.OrderBy; import com.gitee.dorive.core.entity.executor.Page; @@ -34,7 +34,7 @@ import java.util.Map; @AllArgsConstructor public class CoatingType { - private CoatingDef coatingDef; + private ExampleDef exampleDef; private List fields; private SpecificFields specificFields; private List mergedRepositories; @@ -52,10 +52,10 @@ public class CoatingType { for (CoatingField field : fields) { Object fieldValue = field.getFieldValue(coating); if (fieldValue != null) { - PropertyDef propertyDef = field.getPropertyDef(); - String belongTo = propertyDef.getBelongTo(); - String fieldName = propertyDef.getField(); - String operator = propertyDef.getOperator(); + CriterionDef criterionDef = field.getCriterionDef(); + String belongTo = criterionDef.getBelongTo(); + String fieldName = criterionDef.getField(); + String operator = criterionDef.getOperator(); List criteria = criteriaMap.computeIfAbsent(belongTo, key -> new ArrayList<>(4)); criteria.add(new Criterion(fieldName, operator, fieldValue)); } diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/PropertyDef.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CriterionDef.java similarity index 70% rename from dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/PropertyDef.java rename to dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CriterionDef.java index c539613e..0d872ffd 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/PropertyDef.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CriterionDef.java @@ -18,7 +18,7 @@ package com.gitee.dorive.coating.entity.def; import cn.hutool.core.bean.BeanUtil; -import com.gitee.dorive.coating.annotation.Property; +import com.gitee.dorive.coating.annotation.Criterion; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -31,23 +31,23 @@ import java.util.Map; @Data @NoArgsConstructor @AllArgsConstructor -public class PropertyDef { +public class CriterionDef { private String belongTo; private String field; private String operator; private boolean ignore; - public static PropertyDef fromElement(Field field) { - if (field.isAnnotationPresent(Property.class)) { - Map attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(field, Property.class); - PropertyDef propertyDef = BeanUtil.copyProperties(attributes, PropertyDef.class); - if (StringUtils.isBlank(propertyDef.getField())) { - propertyDef.setField(field.getName()); + public static CriterionDef fromElement(Field field) { + if (field.isAnnotationPresent(Criterion.class)) { + Map attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(field, Criterion.class); + CriterionDef criterionDef = BeanUtil.copyProperties(attributes, CriterionDef.class); + if (StringUtils.isBlank(criterionDef.getField())) { + criterionDef.setField(field.getName()); } - return propertyDef; + return criterionDef; } - return new PropertyDef("/", field.getName(), "=", false); + return new CriterionDef("/", field.getName(), "=", false); } } diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CoatingDef.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/ExampleDef.java similarity index 79% rename from dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CoatingDef.java rename to dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/ExampleDef.java index d710955c..04ab58a3 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CoatingDef.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/ExampleDef.java @@ -18,17 +18,17 @@ package com.gitee.dorive.coating.entity.def; import cn.hutool.core.bean.BeanUtil; -import com.gitee.dorive.coating.annotation.Coating; +import com.gitee.dorive.coating.annotation.Example; import org.springframework.core.annotation.AnnotatedElementUtils; import java.lang.reflect.AnnotatedElement; import java.util.Map; -public class CoatingDef { +public class ExampleDef { - public static CoatingDef fromElement(AnnotatedElement annotatedElement) { - Map annotationAttributes = AnnotatedElementUtils.getMergedAnnotationAttributes(annotatedElement, Coating.class); - return BeanUtil.copyProperties(annotationAttributes, CoatingDef.class); + public static ExampleDef fromElement(AnnotatedElement annotatedElement) { + Map annotationAttributes = AnnotatedElementUtils.getMergedAnnotationAttributes(annotatedElement, Example.class); + return BeanUtil.copyProperties(annotationAttributes, ExampleDef.class); } } diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java index 69289754..6f1d6d9e 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java @@ -19,13 +19,13 @@ package com.gitee.dorive.coating.impl.resolver; import cn.hutool.core.lang.Assert; import com.gitee.dorive.api.entity.element.EntityEle; -import com.gitee.dorive.coating.annotation.Coating; +import com.gitee.dorive.coating.annotation.Example; import com.gitee.dorive.coating.entity.CoatingField; import com.gitee.dorive.coating.entity.CoatingType; import com.gitee.dorive.coating.entity.MergedRepository; import com.gitee.dorive.coating.entity.SpecificFields; -import com.gitee.dorive.coating.entity.def.CoatingDef; -import com.gitee.dorive.coating.entity.def.PropertyDef; +import com.gitee.dorive.coating.entity.def.ExampleDef; +import com.gitee.dorive.coating.entity.def.CriterionDef; import com.gitee.dorive.coating.repository.AbstractCoatingRepository; import com.gitee.dorive.coating.util.ResourceUtils; import com.gitee.dorive.core.repository.CommonRepository; @@ -70,8 +70,8 @@ public class CoatingTypeResolver { } for (Class coatingClass : classes) { - Coating coatingAnnotation = AnnotationUtils.getAnnotation(coatingClass, Coating.class); - if (coatingAnnotation == null) { + Example exampleAnnotation = AnnotationUtils.getAnnotation(coatingClass, Example.class); + if (exampleAnnotation == null) { continue; } String simpleName = coatingClass.getSimpleName(); @@ -79,7 +79,7 @@ public class CoatingTypeResolver { continue; } - CoatingDef coatingDef = CoatingDef.fromElement(coatingClass); + ExampleDef exampleDef = ExampleDef.fromElement(coatingClass); List fields = new ArrayList<>(); SpecificFields specificFields = new SpecificFields(); @@ -98,7 +98,7 @@ public class CoatingTypeResolver { List reversedMergedRepositories = new ArrayList<>(mergedRepositories); Collections.reverse(reversedMergedRepositories); - CoatingType coatingType = new CoatingType(coatingDef, fields, specificFields, mergedRepositories, reversedMergedRepositories); + CoatingType coatingType = new CoatingType(exampleDef, fields, specificFields, mergedRepositories, reversedMergedRepositories); classCoatingTypeMap.put(coatingClass, coatingType); nameCoatingTypeMap.put(coatingClass.getName(), coatingType); } @@ -113,8 +113,8 @@ public class CoatingTypeResolver { Set mergedRepositorySet = new LinkedHashSet<>(); for (CoatingField field : fields) { - PropertyDef propertyDef = field.getPropertyDef(); - String belongTo = propertyDef.getBelongTo(); + CriterionDef criterionDef = field.getCriterionDef(); + String belongTo = criterionDef.getBelongTo(); if (!belongTo.startsWith("/")) { MergedRepository mergedRepository = nameMergedRepositoryMap.get(belongTo); @@ -125,7 +125,7 @@ public class CoatingTypeResolver { MergedRepository mergedRepository = mergedRepositoryMap.get(belongTo); Assert.notNull(mergedRepository, "No merged repository found! belongTo: {}", belongTo); - String fieldName = propertyDef.getField(); + String fieldName = criterionDef.getField(); CommonRepository repository = mergedRepository.getExecutedRepository(); EntityEle entityEle = repository.getEntityEle(); Map aliasMap = entityEle.getAliasMap(); -- Gitee From 88498916bddedf7e19f144c25675b08b933c37a4 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Tue, 23 May 2023 18:42:18 +0800 Subject: [PATCH 03/43] =?UTF-8?q?=E7=AE=80=E5=8C=96API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/core/api/repository/Repository.java | 2 +- .../dorive/core/repository/AbstractGenericRepository.java | 4 ++-- .../com/gitee/dorive/core/repository/AbstractRepository.java | 2 +- .../com/gitee/dorive/core/repository/ProxyRepository.java | 4 ++-- .../gitee/dorive/ref/repository/AbstractRefRepository.java | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/repository/Repository.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/repository/Repository.java index 5d553011..711fa84d 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/repository/Repository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/repository/Repository.java @@ -65,7 +65,7 @@ public interface Repository { * @param example 条件 * @return 计数 */ - long selectCountByExample(Context context, Example example); + long selectCount(Context context, Example example); /** * 插入一个实体 diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractGenericRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractGenericRepository.java index 6607a0f2..12f011e5 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractGenericRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractGenericRepository.java @@ -34,10 +34,10 @@ import java.util.List; public abstract class AbstractGenericRepository extends AbstractContextRepository implements ListableRepository { @Override - public long selectCountByExample(Context context, Example example) { + public long selectCount(Context context, Example example) { Assert.notNull(example, "The example cannot be null!"); CommonRepository repository = getRootRepository(); - return repository.selectCountByExample(context, example); + return repository.selectCount(context, example); } @Override diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java index d8e3976d..dcdfce1c 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java @@ -79,7 +79,7 @@ public abstract class AbstractRepository implements Repository, Ex } @Override - public long selectCountByExample(Context context, Example example) { + public long selectCount(Context context, Example example) { Assert.notNull(example, "The example cannot be null!"); Query query = operationFactory.buildQuery(example); return executeCountQuery(context, query); diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/ProxyRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/ProxyRepository.java index 45e2e0bd..fe690e84 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/ProxyRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/ProxyRepository.java @@ -68,8 +68,8 @@ public class ProxyRepository extends AbstractRepository { } @Override - public long selectCountByExample(Context context, Example example) { - return proxyRepository.selectCountByExample(context, example); + public long selectCount(Context context, Example example) { + return proxyRepository.selectCount(context, example); } @Override diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java index dcdf53a1..c6bb09a5 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java @@ -65,11 +65,11 @@ public abstract class AbstractRefRepository extends AbstractCoatingReposi } @Override - public long selectCountByExample(Context context, Example example) { + public long selectCount(Context context, Example example) { if (context instanceof Selector) { context = new InnerContext((Selector) context); } - return super.selectCountByExample(context, example); + return super.selectCount(context, example); } @Override -- Gitee From 9b67f1ef28bc32480d220f5d254e71eb41c10bb1 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Thu, 25 May 2023 00:09:48 +0800 Subject: [PATCH 04/43] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=99=A8=EF=BC=8C=E5=B9=B6=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E6=9F=A5=E8=AF=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/api/annotation/Repository.java | 2 - .../impl/resolver/CoatingTypeResolver.java | 1 + .../repository/AbstractCoatingRepository.java | 6 +- .../dorive/core/api/context/Selector.java | 2 +- .../core/impl/selector/AbstractSelector.java | 13 -- .../java/com/gitee/dorive/ref/api/Ref.java | 4 +- .../java/com/gitee/dorive/ref/api/RefObj.java | 7 + .../dorive/ref/api/SimpleRepository.java | 98 ++++++++++++ .../com/gitee/dorive/ref/impl/RefImpl.java | 22 +-- .../com/gitee/dorive/ref/impl/RefObjImpl.java | 24 +-- .../ref/repository/AbstractRefRepository.java | 145 +----------------- .../starter/annotation/RootRepository.java | 3 - .../dorive/spring/boot/starter/api/Keys.java | 1 + .../repository/MybatisPlusRepository.java | 19 ++- 14 files changed, 154 insertions(+), 193 deletions(-) create mode 100644 dorive-ref/src/main/java/com/gitee/dorive/ref/api/SimpleRepository.java diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Repository.java b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Repository.java index 693423f1..0e1b9cff 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Repository.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Repository.java @@ -32,6 +32,4 @@ public @interface Repository { @AliasFor(annotation = Component.class) String value() default ""; - String querier() default ""; - } diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java index 6f1d6d9e..3aafefd6 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java @@ -120,6 +120,7 @@ public class CoatingTypeResolver { MergedRepository mergedRepository = nameMergedRepositoryMap.get(belongTo); Assert.notNull(mergedRepository, "No merged repository found! belongTo: {}", belongTo); belongTo = mergedRepository.getAbsoluteAccessPath(); + criterionDef.setBelongTo(belongTo); } MergedRepository mergedRepository = mergedRepositoryMap.get(belongTo); diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/repository/AbstractCoatingRepository.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/repository/AbstractCoatingRepository.java index e99685e1..2b2f42d4 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/repository/AbstractCoatingRepository.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/repository/AbstractCoatingRepository.java @@ -42,7 +42,6 @@ import java.util.Map; @EqualsAndHashCode(callSuper = false) public abstract class AbstractCoatingRepository extends AbstractEventRepository implements ExampleBuilder, CoatingRepository { - private String querier; private String[] scanPackages; private String regex; private MergedRepositoryResolver mergedRepositoryResolver; @@ -55,14 +54,11 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo Repository repository = AnnotatedElementUtils.getMergedAnnotation(this.getClass(), Repository.class); CoatingScan coatingScan = AnnotatedElementUtils.getMergedAnnotation(this.getClass(), CoatingScan.class); if (repository != null && coatingScan != null) { - this.querier = repository.querier(); this.scanPackages = coatingScan.value(); this.regex = StringUtils.isBlank(coatingScan.regex()) ? "^" + getEntityClass().getSimpleName() + ".*" : coatingScan.regex(); this.mergedRepositoryResolver = new MergedRepositoryResolver(this); this.coatingTypeResolver = new CoatingTypeResolver(this); - if ("default".equals(querier)) { - this.exampleBuilder = new DefaultExampleBuilder(this); - } + this.exampleBuilder = new DefaultExampleBuilder(this); } } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java index 0442bbc4..0f51a05e 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java @@ -21,7 +21,7 @@ import com.gitee.dorive.core.repository.CommonRepository; import java.util.List; -public interface Selector extends Context { +public interface Selector { boolean matches(Context context, CommonRepository repository); diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/AbstractSelector.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/AbstractSelector.java index 48c628fc..c08e8159 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/AbstractSelector.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/AbstractSelector.java @@ -19,18 +19,5 @@ package com.gitee.dorive.core.impl.selector; import com.gitee.dorive.core.api.context.Selector; -import java.util.Map; - public abstract class AbstractSelector implements Selector { - - @Override - public Selector getSelector() { - throw new RuntimeException("The method is not supported!"); - } - - @Override - public Map getAttachments() { - throw new RuntimeException("The method is not supported!"); - } - } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java index 8f7173b0..48849671 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java @@ -17,11 +17,9 @@ package com.gitee.dorive.ref.api; -import com.gitee.dorive.coating.api.CoatingRepository; -import com.gitee.dorive.core.api.repository.ListableRepository; import com.gitee.dorive.ref.repository.AbstractRefRepository; -public interface Ref extends ListableRepository, CoatingRepository { +public interface Ref extends SimpleRepository { > R get(); diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java index cc10c72c..3c8ee7f4 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java @@ -18,6 +18,7 @@ package com.gitee.dorive.ref.api; import com.gitee.dorive.core.api.context.Context; +import com.gitee.dorive.core.api.context.Selector; public interface RefObj { @@ -27,4 +28,10 @@ public interface RefObj { int delete(Context context); + int select(Selector selector); + + int insertOrUpdate(Selector selector); + + int delete(Selector selector); + } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/SimpleRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/SimpleRepository.java new file mode 100644 index 00000000..e5cdb9b8 --- /dev/null +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/SimpleRepository.java @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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.gitee.dorive.ref.api; + +import com.gitee.dorive.coating.api.CoatingRepository; +import com.gitee.dorive.core.api.context.Selector; +import com.gitee.dorive.core.entity.context.InnerContext; +import com.gitee.dorive.core.entity.executor.Example; +import com.gitee.dorive.core.entity.executor.Page; + +import java.util.List; + +public interface SimpleRepository extends CoatingRepository { + + default E selectByPrimaryKey(Selector selector, PK primaryKey) { + return selectByPrimaryKey(new InnerContext(selector), primaryKey); + } + + default List selectByExample(Selector selector, Example example) { + return selectByExample(new InnerContext(selector), example); + } + + default Page selectPageByExample(Selector selector, Example example) { + return selectPageByExample(new InnerContext(selector), example); + } + + default long selectCount(Selector selector, Example example) { + return selectCount(new InnerContext(selector), example); + } + + default int insert(Selector selector, E entity) { + return insert(new InnerContext(selector), entity); + } + + default int update(Selector selector, E entity) { + return update(new InnerContext(selector), entity); + } + + default int updateByExample(Selector selector, Object entity, Example example) { + return updateByExample(new InnerContext(selector), entity, example); + } + + default int insertOrUpdate(Selector selector, E entity) { + return insertOrUpdate(new InnerContext(selector), entity); + } + + default int delete(Selector selector, E entity) { + return delete(new InnerContext(selector), entity); + } + + default int deleteByPrimaryKey(Selector selector, PK primaryKey) { + return deleteByPrimaryKey(new InnerContext(selector), primaryKey); + } + + default int deleteByExample(Selector selector, Example example) { + return deleteByExample(new InnerContext(selector), example); + } + + default int insertList(Selector selector, List entities) { + return insertList(new InnerContext(selector), entities); + } + + default int updateList(Selector selector, List entities) { + return updateList(new InnerContext(selector), entities); + } + + default int insertOrUpdateList(Selector selector, List entities) { + return insertOrUpdateList(new InnerContext(selector), entities); + } + + default int deleteList(Selector selector, List entities) { + return deleteList(new InnerContext(selector), entities); + } + + default List selectByCoating(Selector selector, Object coating) { + return selectByCoating(new InnerContext(selector), coating); + } + + default Page selectPageByCoating(Selector selector, Object coating) { + return selectPageByCoating(new InnerContext(selector), coating); + } + +} diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java index 8903d4c4..584731f3 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java @@ -42,17 +42,6 @@ public class RefImpl extends ProxyRepository implements Ref { this.entityHandler = entityHandler; } - @Override - @SuppressWarnings("unchecked") - public > R get() { - return (R) repository; - } - - @Override - public RefObj forObj(Object object) { - return new RefObjImpl(this, object); - } - @Override public int insertList(Context context, List entities) { return repository.insertList(context, entities); @@ -83,4 +72,15 @@ public class RefImpl extends ProxyRepository implements Ref { return repository.selectPageByCoating(context, coating); } + @Override + @SuppressWarnings("unchecked") + public > R get() { + return (R) repository; + } + + @Override + public RefObj forObj(Object object) { + return new RefObjImpl(this, object); + } + } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java index 4f94e734..15871efe 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java @@ -37,29 +37,35 @@ public class RefObjImpl implements RefObj { @Override public int select(Context context) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } EntityHandler entityHandler = ref.getEntityHandler(); return entityHandler.handle(context, Collections.singletonList(object)); } @Override public int insertOrUpdate(Context context) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } AbstractRepository repository = ref.getProxyRepository(); return repository.insertOrUpdate(context, object); } @Override public int delete(Context context) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } AbstractRepository repository = ref.getProxyRepository(); return repository.delete(context, object); } + @Override + public int select(Selector selector) { + return select(new InnerContext(selector)); + } + + @Override + public int insertOrUpdate(Selector selector) { + return insertOrUpdate(new InnerContext(selector)); + } + + @Override + public int delete(Selector selector) { + return delete(new InnerContext(selector)); + } + } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java index c6bb09a5..bcfae72f 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java @@ -18,18 +18,13 @@ package com.gitee.dorive.ref.repository; import com.gitee.dorive.coating.repository.AbstractCoatingRepository; -import com.gitee.dorive.core.api.context.Context; -import com.gitee.dorive.core.api.context.Selector; import com.gitee.dorive.core.api.executor.EntityHandler; -import com.gitee.dorive.core.entity.context.InnerContext; -import com.gitee.dorive.core.entity.executor.Example; -import com.gitee.dorive.core.entity.executor.Page; +import com.gitee.dorive.ref.api.SimpleRepository; import com.gitee.dorive.ref.impl.RefInjector; import java.lang.reflect.Field; -import java.util.List; -public abstract class AbstractRefRepository extends AbstractCoatingRepository { +public abstract class AbstractRefRepository extends AbstractCoatingRepository implements SimpleRepository { @Override protected void processEntityClass(EntityHandler entityHandler) { @@ -40,140 +35,4 @@ public abstract class AbstractRefRepository extends AbstractCoatingReposi } } - @Override - public E selectByPrimaryKey(Context context, PK primaryKey) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.selectByPrimaryKey(context, primaryKey); - } - - @Override - public List selectByExample(Context context, Example example) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.selectByExample(context, example); - } - - @Override - public Page selectPageByExample(Context context, Example example) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.selectPageByExample(context, example); - } - - @Override - public long selectCount(Context context, Example example) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.selectCount(context, example); - } - - @Override - public int insert(Context context, E entity) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.insert(context, entity); - } - - @Override - public int update(Context context, E entity) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.update(context, entity); - } - - @Override - public int updateByExample(Context context, Object entity, Example example) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.updateByExample(context, entity, example); - } - - @Override - public int insertOrUpdate(Context context, E entity) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.insertOrUpdate(context, entity); - } - - @Override - public int delete(Context context, E entity) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.delete(context, entity); - } - - @Override - public int deleteByPrimaryKey(Context context, PK primaryKey) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.deleteByPrimaryKey(context, primaryKey); - } - - @Override - public int deleteByExample(Context context, Example example) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.deleteByExample(context, example); - } - - @Override - public int insertList(Context context, List entities) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.insertList(context, entities); - } - - @Override - public int updateList(Context context, List entities) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.updateList(context, entities); - } - - @Override - public int insertOrUpdateList(Context context, List entities) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.insertOrUpdateList(context, entities); - } - - @Override - public int deleteList(Context context, List entities) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.deleteList(context, entities); - } - - @Override - public List selectByCoating(Context context, Object coating) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.selectByCoating(context, coating); - } - - @Override - public Page selectPageByCoating(Context context, Object coating) { - if (context instanceof Selector) { - context = new InnerContext((Selector) context); - } - return super.selectPageByCoating(context, coating); - } - } diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/annotation/RootRepository.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/annotation/RootRepository.java index dbc287a9..5978338f 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/annotation/RootRepository.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/annotation/RootRepository.java @@ -39,7 +39,4 @@ public @interface RootRepository { @AliasFor(annotation = Repository.class) String value() default ""; - @AliasFor(annotation = Repository.class) - String querier() default "SQL"; - } diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/api/Keys.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/api/Keys.java index 2c7b0e3b..c7b892f2 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/api/Keys.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/api/Keys.java @@ -18,6 +18,7 @@ package com.gitee.dorive.spring.boot.starter.api; public interface Keys { + String QUERIER = "QUERIER"; String TABLE_INFO = "TABLE_INFO"; String ALIAS_EXECUTOR = "ALIAS_EXECUTOR"; } diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java index 9e5b11f8..56df63d3 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java @@ -24,8 +24,11 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.gitee.dorive.api.entity.def.EntityDef; import com.gitee.dorive.api.entity.element.EntityEle; +import com.gitee.dorive.coating.api.ExampleBuilder; import com.gitee.dorive.core.api.common.EntityFactory; +import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.Executor; +import com.gitee.dorive.core.entity.executor.Example; import com.gitee.dorive.core.impl.factory.DefaultEntityFactory; import com.gitee.dorive.ref.repository.AbstractRefRepository; import com.gitee.dorive.spring.boot.starter.api.Keys; @@ -48,14 +51,13 @@ import java.util.Map; @EqualsAndHashCode(callSuper = false) public class MybatisPlusRepository extends AbstractRefRepository { + private ExampleBuilder sqlExampleBuilder; private CountQuerier countQuerier; @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); - if ("SQL".equals(getQuerier())) { - setExampleBuilder(new SQLExampleBuilder(this)); - } + this.sqlExampleBuilder = new SQLExampleBuilder(this); this.countQuerier = new CountQuerier(this); } @@ -126,4 +128,15 @@ public class MybatisPlusRepository extends AbstractRefRepository { return executor; } + @Override + public Example buildExample(Context context, Object coating) { + Map attachments = context.getAttachments(); + String querier = (String) attachments.get(Keys.QUERIER); + if (querier == null || "SQL".equals(querier)) { + return sqlExampleBuilder.buildExample(context, coating); + } else { + return getExampleBuilder().buildExample(context, coating); + } + } + } -- Gitee From 6a09f2ed419eac4386bf3d21d46ac5ff8adeae83 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 28 May 2023 21:37:42 +0800 Subject: [PATCH 05/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=B9=B6=E7=AE=80=E5=8C=96=E4=B8=80?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/executor/EntityHandler.java | 2 +- .../core/impl/executor/ChainExecutor.java | 2 +- .../impl/handler/AdaptiveEntityHandler.java | 49 +++++++++---------- .../core/impl/handler/BatchEntityHandler.java | 4 +- .../core/impl/handler/MultiEntityHandler.java | 6 +-- .../core/impl/handler/UnionEntityHandler.java | 6 +-- .../java/com/gitee/dorive/ref/api/RefObj.java | 12 ++--- .../com/gitee/dorive/ref/impl/RefObjImpl.java | 14 +++--- 8 files changed, 46 insertions(+), 49 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/EntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/EntityHandler.java index b9527aff..b2f87bed 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/EntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/EntityHandler.java @@ -23,6 +23,6 @@ import java.util.List; public interface EntityHandler { - int handle(Context context, List entities); + long handle(Context context, List entities); } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java index 15ec0aee..7fe33302 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java @@ -73,7 +73,7 @@ public class ChainExecutor extends AbstractExecutor implements EntityHandler { } @Override - public int handle(Context context, List entities) { + public long handle(Context context, List entities) { return entityHandler.handle(context, entities); } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java index 78cc2f93..781b1b7b 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java @@ -17,9 +17,9 @@ package com.gitee.dorive.core.impl.handler; +import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.core.api.executor.Executor; -import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.impl.resolver.DelegateResolver; import com.gitee.dorive.core.repository.AbstractContextRepository; import lombok.Data; @@ -28,7 +28,6 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; @Data public class AdaptiveEntityHandler implements EntityHandler { @@ -42,42 +41,40 @@ public class AdaptiveEntityHandler implements EntityHandler { } @Override - public int handle(Context context, List rootEntities) { - List newRootEntities = new ArrayList<>(rootEntities.size()); - - int delegateCount = repository.getDelegateResolver().getDelegateCount(); - Map, List> repositoryEntitiesMap = new LinkedHashMap<>(delegateCount * 4 / 3 + 1); - - filterRootEntities(rootEntities, newRootEntities, repositoryEntitiesMap); - - AtomicInteger totalCount = new AtomicInteger(); + public long handle(Context context, List entities) { + List newEntities = new ArrayList<>(entities.size()); + Map, List> repositoryEntitiesMap = distribute(entities, newEntities); - if (!newRootEntities.isEmpty()) { - totalCount.addAndGet(entityHandler.handle(context, newRootEntities)); + long totalCount = 0L; + if (!newEntities.isEmpty()) { + totalCount += (entityHandler.handle(context, newEntities)); } - - repositoryEntitiesMap.forEach((repository, entities) -> { + for (Map.Entry, List> entry : repositoryEntitiesMap.entrySet()) { + AbstractContextRepository repository = entry.getKey(); + List subclassEntities = entry.getValue(); Executor executor = repository.getExecutor(); if (executor instanceof EntityHandler) { - totalCount.addAndGet(((EntityHandler) executor).handle(context, entities)); + totalCount += (((EntityHandler) executor).handle(context, subclassEntities)); } - }); - - return totalCount.get(); + } + return totalCount; } - private void filterRootEntities(List rootEntities, List newRootEntities, - Map, List> repositoryEntitiesMap) { + private Map, List> distribute(List entities, List newEntities) { DelegateResolver delegateResolver = repository.getDelegateResolver(); - for (Object rootEntity : rootEntities) { - AbstractContextRepository repository = delegateResolver.delegateRepository(rootEntity); + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(delegateResolver.getDelegateCount() * 4 / 3 + 1); + + for (Object entity : entities) { + AbstractContextRepository repository = delegateResolver.delegateRepository(entity); if (repository == null) { - newRootEntities.add(rootEntity); + newEntities.add(entity); } else { - List existRootEntities = repositoryEntitiesMap.computeIfAbsent(repository, key -> new ArrayList<>(rootEntities.size())); - existRootEntities.add(rootEntity); + List existEntities = repositoryEntitiesMap.computeIfAbsent(repository, key -> new ArrayList<>(entities.size())); + existEntities.add(entity); } } + + return repositoryEntitiesMap; } } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java index 2bb821aa..eaa9b672 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java @@ -37,9 +37,9 @@ public class BatchEntityHandler implements EntityHandler { private final AbstractContextRepository repository; @Override - public int handle(Context context, List entities) { + public long handle(Context context, List entities) { Selector selector = context.getSelector(); - int totalCount = 0; + long totalCount = 0L; for (CommonRepository repository : this.repository.getSubRepositories()) { if (selector.matches(context, repository)) { if (isMultiQuery(repository)) { diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java index 79dcfaf2..36abbe78 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java @@ -49,7 +49,7 @@ public class MultiEntityHandler implements EntityHandler { private final CommonRepository repository; @Override - public int handle(Context context, List entities) { + public long handle(Context context, List entities) { Map entityIndex = new LinkedHashMap<>(entities.size() * 4 / 3 + 1); Example example = newExample(context, entities, entityIndex); if (example.isDirtyQuery()) { @@ -60,9 +60,9 @@ public class MultiEntityHandler implements EntityHandler { if (result instanceof MultiResult) { setValueForRootEntities(context, entities, entityIndex, (MultiResult) result); } - return (int) result.getCount(); + return result.getCount(); } - return 0; + return 0L; } private Example newExample(Context context, List entities, Map entityIndex) { diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/UnionEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/UnionEntityHandler.java index dd805969..bd4e9fa1 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/UnionEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/UnionEntityHandler.java @@ -47,7 +47,7 @@ public class UnionEntityHandler implements EntityHandler { private final CommonRepository repository; @Override - public int handle(Context context, List entities) { + public long handle(Context context, List entities) { Example example = newExample(context, entities); if (example.isDirtyQuery()) { OperationFactory operationFactory = repository.getOperationFactory(); @@ -57,9 +57,9 @@ public class UnionEntityHandler implements EntityHandler { if (result instanceof MultiResult) { setValueForRootEntities(entities, (MultiResult) result); } - return (int) result.getCount(); + return result.getCount(); } - return 0; + return 0L; } private Example newExample(Context context, List entities) { diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java index 3c8ee7f4..bcb9f725 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java @@ -22,16 +22,16 @@ import com.gitee.dorive.core.api.context.Selector; public interface RefObj { - int select(Context context); + long select(Context context); - int insertOrUpdate(Context context); + long insertOrUpdate(Context context); - int delete(Context context); + long delete(Context context); - int select(Selector selector); + long select(Selector selector); - int insertOrUpdate(Selector selector); + long insertOrUpdate(Selector selector); - int delete(Selector selector); + long delete(Selector selector); } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java index 15871efe..03ccc6fc 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java @@ -36,35 +36,35 @@ public class RefObjImpl implements RefObj { private Object object; @Override - public int select(Context context) { + public long select(Context context) { EntityHandler entityHandler = ref.getEntityHandler(); return entityHandler.handle(context, Collections.singletonList(object)); } @Override - public int insertOrUpdate(Context context) { + public long insertOrUpdate(Context context) { AbstractRepository repository = ref.getProxyRepository(); return repository.insertOrUpdate(context, object); } @Override - public int delete(Context context) { + public long delete(Context context) { AbstractRepository repository = ref.getProxyRepository(); return repository.delete(context, object); } @Override - public int select(Selector selector) { + public long select(Selector selector) { return select(new InnerContext(selector)); } @Override - public int insertOrUpdate(Selector selector) { + public long insertOrUpdate(Selector selector) { return insertOrUpdate(new InnerContext(selector)); } - + @Override - public int delete(Selector selector) { + public long delete(Selector selector) { return delete(new InnerContext(selector)); } -- Gitee From ec25c6bda14f8fad94185caa80c901bd1a219a13 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 May 2023 14:45:39 +0800 Subject: [PATCH 06/43] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/dorive/api/entity/element/EntityField.java | 2 +- .../com/gitee/dorive/api/entity/element/EntityType.java | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java index db9f7bf7..77f7fc71 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java @@ -64,7 +64,7 @@ public class EntityField extends EntityEle { private void resolve(Field field) { EntityDef entityDef = getEntityDef(); - if (entityDef != null) { + if (entityDef != null && type != genericType) { EntityDef genericEntityDef = EntityDef.fromElement(genericType); if (genericEntityDef != null) { entityDef.merge(genericEntityDef); diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityType.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityType.java index b2cea697..2bb0e0a2 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityType.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityType.java @@ -33,6 +33,7 @@ import lombok.extern.slf4j.Slf4j; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -47,7 +48,7 @@ public class EntityType extends EntityEle { private Class type; private String name; - private Map entityFields = new LinkedHashMap<>(); + private Map entityFields; public static synchronized EntityType getInstance(Class type) { EntityType entityType = CACHE.get(type); @@ -67,7 +68,11 @@ public class EntityType extends EntityEle { super(type); this.type = type; this.name = type.getName(); - for (Field field : ReflectUtils.getAllFields(type)) { + + List fields = ReflectUtils.getAllFields(type); + this.entityFields = new LinkedHashMap<>(fields.size() * 4 / 3 + 1); + + for (Field field : fields) { if (!Modifier.isStatic(field.getModifiers())) { try { EntityField entityField = new EntityField(field); -- Gitee From a9c10b150b28a12e5897393c78843d3398c0dbd0 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 May 2023 14:50:05 +0800 Subject: [PATCH 07/43] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=8F=AF=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/api/entity/element/EntityField.java | 4 ++-- .../com/gitee/dorive/api/impl/resolver/PropChainResolver.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java index 77f7fc71..ceeee5c8 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java @@ -40,7 +40,7 @@ public class EntityField extends EntityEle { private AliasDef aliasDef; private EntityType entityType; - public static boolean filter(Class type) { + public static boolean isComplexType(Class type) { String className = type.getName(); return !className.startsWith("java.lang.") && !className.startsWith("java.util.") && !type.isEnum(); } @@ -71,7 +71,7 @@ public class EntityField extends EntityEle { } } aliasDef = AliasDef.fromElement(field); - if (filter(genericType)) { + if (isComplexType(genericType)) { entityType = EntityType.getInstance(genericType); } } diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/impl/resolver/PropChainResolver.java b/dorive-api/src/main/java/com/gitee/dorive/api/impl/resolver/PropChainResolver.java index 64a29e8d..426bcc50 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/impl/resolver/PropChainResolver.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/impl/resolver/PropChainResolver.java @@ -40,7 +40,7 @@ public class PropChainResolver { String accessPath = lastAccessPath + "/" + entityField.getName(); PropChain propChain = new PropChain(lastPropChain, entityType, accessPath, entityField); propChainMap.put(accessPath, propChain); - if (EntityField.filter(entityField.getType()) && !entityField.isAnnotatedEntity()) { + if (EntityField.isComplexType(entityField.getType()) && !entityField.isAnnotatedEntity()) { resolve(accessPath, entityField.getEntityType()); } } -- Gitee From 81d2018a149c2b88d4366556761794321acebe17 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 May 2023 15:02:30 +0800 Subject: [PATCH 08/43] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=8F=AF=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/api/entity/element/EntityEle.java | 11 ++--------- .../gitee/dorive/api/entity/element/EntityField.java | 2 +- .../gitee/dorive/api/entity/element/EntityType.java | 8 ++++---- .../coating/impl/resolver/CoatingTypeResolver.java | 4 ++-- .../starter/repository/MybatisPlusRepository.java | 5 ++++- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityEle.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityEle.java index 2507279b..c070a810 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityEle.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityEle.java @@ -27,7 +27,6 @@ import lombok.NoArgsConstructor; import java.lang.reflect.AnnotatedElement; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -40,7 +39,7 @@ public abstract class EntityEle { private boolean aggregated; private List bindingDefs; private PropProxy pkProxy; - private Map aliasMap; + private Map propAliasMap; public EntityEle(AnnotatedElement element) { this.element = element; @@ -68,7 +67,7 @@ public abstract class EntityEle { List aliases = toAliases(StrUtil.splitTrim(property, ",")); return StrUtil.join(",", aliases); } - return aliasMap.getOrDefault(property, property); + return propAliasMap.getOrDefault(property, property); } public List toAliases(List properties) { @@ -83,12 +82,6 @@ public abstract class EntityEle { return properties; } - public Map newAliasFieldMapping() { - Map map = new LinkedHashMap<>(); - aliasMap.forEach((key, value) -> map.put(value, key)); - return map; - } - protected abstract void doInitialize(); public abstract boolean isCollection(); diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java index ceeee5c8..c5cdee3c 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityField.java @@ -81,7 +81,7 @@ public class EntityField extends EntityEle { if (entityType != null) { entityType.initialize(); setPkProxy(entityType.getPkProxy()); - setAliasMap(entityType.getAliasMap()); + setPropAliasMap(entityType.getPropAliasMap()); } } diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityType.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityType.java index 2bb0e0a2..7aacd484 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityType.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityType.java @@ -68,7 +68,7 @@ public class EntityType extends EntityEle { super(type); this.type = type; this.name = type.getName(); - + List fields = ReflectUtils.getAllFields(type); this.entityFields = new LinkedHashMap<>(fields.size() * 4 / 3 + 1); @@ -94,14 +94,14 @@ public class EntityType extends EntityEle { PropProxy pkProxy = PropProxyFactory.newPropProxy(genericType, "id"); setPkProxy(pkProxy); - Map aliasMap = new LinkedHashMap<>(); + Map propAliasMap = new LinkedHashMap<>(entityFields.size() * 4 / 3 + 1); for (EntityField entityField : entityFields.values()) { String name = entityField.getName(); AliasDef aliasDef = entityField.getAliasDef(); String alias = aliasDef != null ? aliasDef.getValue() : StrUtil.toUnderlineCase(name); - aliasMap.put(name, alias); + propAliasMap.put(name, alias); } - setAliasMap(aliasMap); + setPropAliasMap(propAliasMap); } @Override diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java index 3aafefd6..d61c8e40 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java @@ -129,8 +129,8 @@ public class CoatingTypeResolver { String fieldName = criterionDef.getField(); CommonRepository repository = mergedRepository.getExecutedRepository(); EntityEle entityEle = repository.getEntityEle(); - Map aliasMap = entityEle.getAliasMap(); - Assert.isTrue(aliasMap.containsKey(fieldName), "The field does not exist within the entity! element: {}, field: {}", + Map propAliasMap = entityEle.getPropAliasMap(); + Assert.isTrue(propAliasMap.containsKey(fieldName), "The field does not exist within the entity! element: {}, field: {}", entityEle.getElement(), fieldName); mergedRepositorySet.add(mergedRepository); diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java index 56df63d3..ffad13d0 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java @@ -46,6 +46,7 @@ import java.lang.reflect.Type; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Data @EqualsAndHashCode(callSuper = false) @@ -98,7 +99,9 @@ public class MybatisPlusRepository extends AbstractRefRepository { defaultEntityFactory.setEntityEle(entityEle); defaultEntityFactory.setPojoClass(pojoClass); - Map aliasFieldMapping = entityEle.newAliasFieldMapping(); + Map propAliasMap = entityEle.getPropAliasMap(); + Map aliasFieldMapping = propAliasMap.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); defaultEntityFactory.setAliasFieldMapping(aliasFieldMapping); String keyColumn = tableInfo.getKeyColumn(); -- Gitee From aa669455d59c307700ecd218c5a023f7f6a697be Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 May 2023 15:11:29 +0800 Subject: [PATCH 09/43] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=B8=B8=E9=87=8F?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E8=BD=AC=E7=A7=BB=E8=87=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/core/api/constant/Select.java | 27 ------------------- .../dorive/core/api/context/Selector.java | 5 ++++ 2 files changed, 5 insertions(+), 27 deletions(-) delete mode 100644 dorive-core/src/main/java/com/gitee/dorive/core/api/constant/Select.java diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/constant/Select.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/constant/Select.java deleted file mode 100644 index 2daf51e7..00000000 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/constant/Select.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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 - * - * http://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.gitee.dorive.core.api.constant; - -import com.gitee.dorive.core.api.context.Selector; -import com.gitee.dorive.core.impl.selector.NameSelector; -import com.gitee.dorive.core.impl.selector.RootSelector; - -public interface Select { - Selector ALL = new NameSelector("*"); - Selector ROOT = new RootSelector(); -} diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java index 0f51a05e..fee7f3e3 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java @@ -17,12 +17,17 @@ package com.gitee.dorive.core.api.context; +import com.gitee.dorive.core.impl.selector.NameSelector; +import com.gitee.dorive.core.impl.selector.RootSelector; import com.gitee.dorive.core.repository.CommonRepository; import java.util.List; public interface Selector { + Selector ALL = new NameSelector("*"); + Selector ROOT = new RootSelector(); + boolean matches(Context context, CommonRepository repository); List select(Context context, CommonRepository repository); -- Gitee From b5ba4f99480d8fc57900de38bc96e2b2c6bbdc4b Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 May 2023 15:46:09 +0800 Subject: [PATCH 10/43] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=80=89=E5=8F=96?= =?UTF-8?q?=E5=99=A8=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/core/api/context/Selector.java | 4 +- .../core/entity/context/AbstractContext.java | 4 +- .../core/impl/selector/AllSelector.java | 41 ++++++++++++++++++ .../core/impl/selector/EmptySelector.java | 43 +++++++++++++++++++ .../core/impl/selector/NameSelector.java | 26 ++++------- 5 files changed, 96 insertions(+), 22 deletions(-) create mode 100644 dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/AllSelector.java create mode 100644 dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/EmptySelector.java diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java index fee7f3e3..e1f3faf8 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Selector.java @@ -17,7 +17,7 @@ package com.gitee.dorive.core.api.context; -import com.gitee.dorive.core.impl.selector.NameSelector; +import com.gitee.dorive.core.impl.selector.AllSelector; import com.gitee.dorive.core.impl.selector.RootSelector; import com.gitee.dorive.core.repository.CommonRepository; @@ -25,7 +25,7 @@ import java.util.List; public interface Selector { - Selector ALL = new NameSelector("*"); + Selector ALL = new AllSelector(); Selector ROOT = new RootSelector(); boolean matches(Context context, CommonRepository repository); diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/AbstractContext.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/AbstractContext.java index 97ba0772..392bd829 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/AbstractContext.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/AbstractContext.java @@ -19,7 +19,7 @@ package com.gitee.dorive.core.entity.context; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.context.Selector; -import com.gitee.dorive.core.impl.selector.NameSelector; +import com.gitee.dorive.core.impl.selector.EmptySelector; import lombok.Data; import lombok.NoArgsConstructor; @@ -31,7 +31,7 @@ import java.util.concurrent.ConcurrentHashMap; @NoArgsConstructor public abstract class AbstractContext implements Context { - private Selector selector = NameSelector.EMPTY_SELECTOR; + private Selector selector = EmptySelector.EMPTY_SELECTOR; private Map attachments = Collections.emptyMap(); public AbstractContext(Selector selector) { diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/AllSelector.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/AllSelector.java new file mode 100644 index 00000000..b77705f8 --- /dev/null +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/AllSelector.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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.gitee.dorive.core.impl.selector; + +import com.gitee.dorive.core.api.context.Context; +import com.gitee.dorive.core.repository.CommonRepository; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +public class AllSelector extends AbstractSelector { + + @Override + public boolean matches(Context context, CommonRepository repository) { + return true; + } + + @Override + public List select(Context context, CommonRepository repository) { + return null; + } + +} diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/EmptySelector.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/EmptySelector.java new file mode 100644 index 00000000..8c1fd48f --- /dev/null +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/EmptySelector.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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.gitee.dorive.core.impl.selector; + +import com.gitee.dorive.core.api.context.Context; +import com.gitee.dorive.core.repository.CommonRepository; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +public class EmptySelector extends AbstractSelector { + + public static final EmptySelector EMPTY_SELECTOR = new EmptySelector(); + + @Override + public boolean matches(Context context, CommonRepository repository) { + return false; + } + + @Override + public List select(Context context, CommonRepository repository) { + return null; + } + +} diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/NameSelector.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/NameSelector.java index 3848ee74..23ace0db 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/NameSelector.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/selector/NameSelector.java @@ -18,8 +18,8 @@ package com.gitee.dorive.core.impl.selector; import cn.hutool.core.util.StrUtil; -import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.api.entity.def.EntityDef; +import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.repository.CommonRepository; import lombok.AllArgsConstructor; import lombok.Data; @@ -35,27 +35,20 @@ import java.util.Map; @EqualsAndHashCode(callSuper = false) public class NameSelector extends AbstractSelector { - public static final NameSelector EMPTY_SELECTOR = new NameSelector(); - - private boolean wildcard; private Map nameDefMap = Collections.emptyMap(); public NameSelector(String... names) { if (names != null && names.length > 0) { this.nameDefMap = new LinkedHashMap<>(names.length * 4 / 3 + 1); for (String name : names) { - if ("*".equals(name)) { - this.wildcard = true; - } else { - if (name.contains("(") && name.contains(")")) { - String realName = name.substring(0, name.indexOf("(")); - String propertiesText = name.substring(name.indexOf("(") + 1, name.indexOf(")")); - List properties = StrUtil.splitTrim(propertiesText, ","); - nameDefMap.put(realName, new NameDef(realName, properties)); + if (name.contains("(") && name.contains(")")) { + String realName = name.substring(0, name.indexOf("(")); + String propText = name.substring(name.indexOf("(") + 1, name.indexOf(")")); + List properties = StrUtil.splitTrim(propText, ","); + nameDefMap.put(realName, new NameDef(realName, Collections.unmodifiableList(properties))); - } else { - nameDefMap.put(name, new NameDef(name, Collections.emptyList())); - } + } else { + nameDefMap.put(name, new NameDef(name, Collections.emptyList())); } } } @@ -63,9 +56,6 @@ public class NameSelector extends AbstractSelector { @Override public boolean matches(Context context, CommonRepository repository) { - if (wildcard) { - return true; - } EntityDef entityDef = repository.getEntityDef(); String name = entityDef.getName(); return StringUtils.isBlank(name) || nameDefMap.containsKey(name); -- Gitee From 8ff7b26f221ff8b14f55947a7fa23a4711552ba9 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 May 2023 15:54:01 +0800 Subject: [PATCH 11/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/core/api/executor/Executor.java | 2 +- .../com/gitee/dorive/core/impl/executor/ChainExecutor.java | 2 +- .../gitee/dorive/core/repository/AbstractRepository.java | 6 +++--- .../java/com/gitee/dorive/event/impl/EventExecutor.java | 4 ++-- .../spring/boot/starter/impl/executor/AliasExecutor.java | 4 ++-- .../spring/boot/starter/impl/executor/FactoryExecutor.java | 4 ++-- .../boot/starter/impl/executor/MybatisPlusExecutor.java | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/Executor.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/Executor.java index b8c6d66b..8ec59a6b 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/Executor.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/Executor.java @@ -26,7 +26,7 @@ public interface Executor { Result executeQuery(Context context, Query query); - long executeCountQuery(Context context, Query query); + long executeCount(Context context, Query query); int execute(Context context, Operation operation); diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java index 7fe33302..359a6ea3 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java @@ -78,7 +78,7 @@ public class ChainExecutor extends AbstractExecutor implements EntityHandler { } @Override - public long executeCountQuery(Context context, Query query) { + public long executeCount(Context context, Query query) { throw new RuntimeException("This method does not support!"); } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java index dcdfce1c..843cbfcf 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java @@ -82,7 +82,7 @@ public abstract class AbstractRepository implements Repository, Ex public long selectCount(Context context, Example example) { Assert.notNull(example, "The example cannot be null!"); Query query = operationFactory.buildQuery(example); - return executeCountQuery(context, query); + return executeCount(context, query); } @Override @@ -141,8 +141,8 @@ public abstract class AbstractRepository implements Repository, Ex } @Override - public long executeCountQuery(Context context, Query query) { - return executor.executeCountQuery(context, query); + public long executeCount(Context context, Query query) { + return executor.executeCount(context, query); } @Override diff --git a/dorive-event/src/main/java/com/gitee/dorive/event/impl/EventExecutor.java b/dorive-event/src/main/java/com/gitee/dorive/event/impl/EventExecutor.java index ecacfd2f..2bb9f9ce 100644 --- a/dorive-event/src/main/java/com/gitee/dorive/event/impl/EventExecutor.java +++ b/dorive-event/src/main/java/com/gitee/dorive/event/impl/EventExecutor.java @@ -45,8 +45,8 @@ public class EventExecutor extends AbstractExecutor { } @Override - public long executeCountQuery(Context context, Query query) { - return executor.executeCountQuery(context, query); + public long executeCount(Context context, Query query) { + return executor.executeCount(context, query); } @Override diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/AliasExecutor.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/AliasExecutor.java index 552e2e6a..e9a8bc44 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/AliasExecutor.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/AliasExecutor.java @@ -53,12 +53,12 @@ public class AliasExecutor extends AbstractExecutor { } @Override - public long executeCountQuery(Context context, Query query) { + public long executeCount(Context context, Query query) { Example example = query.getExample(); if (example != null) { convert(example); } - return executor.executeCountQuery(context, query); + return executor.executeCount(context, query); } @Override diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/FactoryExecutor.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/FactoryExecutor.java index 93d24a8d..f3625c61 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/FactoryExecutor.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/FactoryExecutor.java @@ -116,8 +116,8 @@ public class FactoryExecutor extends AbstractExecutor { } @Override - public long executeCountQuery(Context context, Query query) { - return executor.executeCountQuery(context, query); + public long executeCount(Context context, Query query) { + return executor.executeCount(context, query); } @Override diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/MybatisPlusExecutor.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/MybatisPlusExecutor.java index 830fd61a..115b8079 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/MybatisPlusExecutor.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/MybatisPlusExecutor.java @@ -114,7 +114,7 @@ public class MybatisPlusExecutor extends AbstractExecutor { } @Override - public long executeCountQuery(Context context, Query query) { + public long executeCount(Context context, Query query) { Example example = query.getExample(); if (example != null) { QueryWrapper queryWrapper = buildQueryWrapper(example); -- Gitee From 709d17a724804d52d803115fc341995e7361fdea Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 May 2023 16:18:03 +0800 Subject: [PATCH 12/43] =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=8F=8D=E5=A4=8D?= =?UTF-8?q?=E5=88=9B=E5=BB=BACopyOptions=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/factory/DefaultEntityFactory.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java index d65354f8..2071c607 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java @@ -37,17 +37,27 @@ public class DefaultEntityFactory implements EntityFactory { private Class pojoClass; private Map aliasFieldMapping; private Map fieldPropMapping; + private CopyOptions reCopyOptions; + private CopyOptions deCopyOptions; + + public void setAliasFieldMapping(Map aliasFieldMapping) { + this.aliasFieldMapping = aliasFieldMapping; + this.reCopyOptions = CopyOptions.create().ignoreNullValue().setFieldMapping(aliasFieldMapping); + } + + public void setFieldPropMapping(Map fieldPropMapping) { + this.fieldPropMapping = fieldPropMapping; + this.deCopyOptions = CopyOptions.create().ignoreNullValue().setFieldMapping(fieldPropMapping); + } @Override public Object reconstitute(Context context, Object persistent) { - CopyOptions copyOptions = CopyOptions.create().ignoreNullValue().setFieldMapping(aliasFieldMapping); - return BeanUtil.toBean(persistent, entityEle.getGenericType(), copyOptions); + return BeanUtil.toBean(persistent, entityEle.getGenericType(), reCopyOptions); } @Override public Object deconstruct(Context context, Object entity) { - CopyOptions copyOptions = CopyOptions.create().ignoreNullValue().setFieldMapping(fieldPropMapping); - return BeanUtil.toBean(entity, pojoClass, copyOptions); + return BeanUtil.toBean(entity, pojoClass, deCopyOptions); } } -- Gitee From 5db70124e1dcfe425e644bcc159ff8d0127b50cd Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 May 2023 16:58:22 +0800 Subject: [PATCH 13/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/core/impl/handler/MultiEntityHandler.java | 4 ++-- .../gitee/dorive/core/impl/handler/UnionEntityHandler.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java index 36abbe78..c319b045 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java @@ -105,7 +105,7 @@ public class MultiEntityHandler implements EntityHandler { return example; } - public List collectBoundValues(Context context, List entities, Map entityIndex, PropertyBinder binder) { + private List collectBoundValues(Context context, List entities, Map entityIndex, PropertyBinder binder) { List boundValues = new ArrayList<>(entities.size()); for (Object entity : entities) { Object boundValue = binder.getBoundValue(context, entity); @@ -216,7 +216,7 @@ public class MultiEntityHandler implements EntityHandler { } @SuppressWarnings("unchecked") - public void setValueForRootEntity(boolean isCollection, PropChain anchorPoint, int averageSize, Object rootEntity, Object entity) { + private void setValueForRootEntity(boolean isCollection, PropChain anchorPoint, int averageSize, Object rootEntity, Object entity) { if (rootEntity != null) { Object value = anchorPoint.getValue(rootEntity); if (isCollection) { diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/UnionEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/UnionEntityHandler.java index bd4e9fa1..2826ed42 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/UnionEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/UnionEntityHandler.java @@ -80,7 +80,7 @@ public class UnionEntityHandler implements EntityHandler { return unionExample; } - public Example newExample(Context context, Object entity) { + private Example newExample(Context context, Object entity) { BinderResolver binderResolver = repository.getBinderResolver(); Example example = new Example(); for (PropertyBinder binder : binderResolver.getPropertyBinders()) { -- Gitee From 9a4f180290c00414876612fbee461b09a524ff51 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Wed, 31 May 2023 10:20:58 +0800 Subject: [PATCH 14/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E7=9A=84=E5=8C=85=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/dorive/core/api/{common => binder}/Binder.java | 2 +- .../gitee/dorive/core/api/{common => binder}/Processor.java | 2 +- .../dorive/core/api/{common => executor}/EntityFactory.java | 2 +- .../com/gitee/dorive/core/impl/binder/AbstractBinder.java | 4 ++-- .../java/com/gitee/dorive/core/impl/binder/ContextBinder.java | 2 +- .../com/gitee/dorive/core/impl/binder/PropertyBinder.java | 2 +- .../com/gitee/dorive/core/impl/executor/ChainExecutor.java | 2 +- .../gitee/dorive/core/impl/factory/DefaultEntityFactory.java | 2 +- .../gitee/dorive/core/impl/processor/DefaultProcessor.java | 2 +- .../com/gitee/dorive/core/impl/resolver/BinderResolver.java | 4 ++-- .../spring/boot/starter/impl/executor/FactoryExecutor.java | 2 +- .../spring/boot/starter/repository/MybatisPlusRepository.java | 2 +- 12 files changed, 14 insertions(+), 14 deletions(-) rename dorive-core/src/main/java/com/gitee/dorive/core/api/{common => binder}/Binder.java (96%) rename dorive-core/src/main/java/com/gitee/dorive/core/api/{common => binder}/Processor.java (95%) rename dorive-core/src/main/java/com/gitee/dorive/core/api/{common => executor}/EntityFactory.java (95%) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/common/Binder.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/binder/Binder.java similarity index 96% rename from dorive-core/src/main/java/com/gitee/dorive/core/api/common/Binder.java rename to dorive-core/src/main/java/com/gitee/dorive/core/api/binder/Binder.java index 8bd4250f..116e6fcd 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/common/Binder.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/binder/Binder.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.api.common; +package com.gitee.dorive.core.api.binder; import com.gitee.dorive.api.entity.def.BindingDef; import com.gitee.dorive.core.api.context.Context; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/common/Processor.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/binder/Processor.java similarity index 95% rename from dorive-core/src/main/java/com/gitee/dorive/core/api/common/Processor.java rename to dorive-core/src/main/java/com/gitee/dorive/core/api/binder/Processor.java index 0400b4d4..c54ff816 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/common/Processor.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/binder/Processor.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.api.common; +package com.gitee.dorive.core.api.binder; import com.gitee.dorive.core.api.context.Context; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/common/EntityFactory.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/EntityFactory.java similarity index 95% rename from dorive-core/src/main/java/com/gitee/dorive/core/api/common/EntityFactory.java rename to dorive-core/src/main/java/com/gitee/dorive/core/api/executor/EntityFactory.java index b0469e41..789cc202 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/api/common/EntityFactory.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/EntityFactory.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.api.common; +package com.gitee.dorive.core.api.executor; import com.gitee.dorive.core.api.context.Context; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/AbstractBinder.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/AbstractBinder.java index db9cd200..38c1c43a 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/AbstractBinder.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/AbstractBinder.java @@ -19,8 +19,8 @@ package com.gitee.dorive.core.impl.binder; import com.gitee.dorive.api.entity.def.BindingDef; import com.gitee.dorive.api.entity.element.PropChain; -import com.gitee.dorive.core.api.common.Binder; -import com.gitee.dorive.core.api.common.Processor; +import com.gitee.dorive.core.api.binder.Binder; +import com.gitee.dorive.core.api.binder.Processor; import com.gitee.dorive.core.api.context.Context; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/ContextBinder.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/ContextBinder.java index 828a7c81..79da64a8 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/ContextBinder.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/ContextBinder.java @@ -18,7 +18,7 @@ package com.gitee.dorive.core.impl.binder; import com.gitee.dorive.api.entity.def.BindingDef; -import com.gitee.dorive.core.api.common.Processor; +import com.gitee.dorive.core.api.binder.Processor; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.api.entity.element.PropChain; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/PropertyBinder.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/PropertyBinder.java index e3a19c19..2380b193 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/PropertyBinder.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/PropertyBinder.java @@ -19,7 +19,7 @@ package com.gitee.dorive.core.impl.binder; import com.gitee.dorive.api.entity.def.BindingDef; import com.gitee.dorive.api.entity.element.PropChain; -import com.gitee.dorive.core.api.common.Processor; +import com.gitee.dorive.core.api.binder.Processor; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.repository.CommonRepository; import lombok.Getter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java index 359a6ea3..c5da1487 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java @@ -20,7 +20,7 @@ package com.gitee.dorive.core.impl.executor; import cn.hutool.core.lang.Assert; import com.gitee.dorive.api.constant.OperationType; import com.gitee.dorive.api.entity.element.PropChain; -import com.gitee.dorive.core.api.common.Binder; +import com.gitee.dorive.core.api.binder.Binder; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.context.Selector; import com.gitee.dorive.core.api.executor.EntityHandler; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java index 2071c607..b27ceb7a 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java @@ -21,7 +21,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.api.entity.element.EntityEle; -import com.gitee.dorive.core.api.common.EntityFactory; +import com.gitee.dorive.core.api.executor.EntityFactory; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/processor/DefaultProcessor.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/processor/DefaultProcessor.java index f9289291..69d1381a 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/processor/DefaultProcessor.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/processor/DefaultProcessor.java @@ -18,7 +18,7 @@ package com.gitee.dorive.core.impl.processor; import com.gitee.dorive.api.entity.def.BindingDef; -import com.gitee.dorive.core.api.common.Processor; +import com.gitee.dorive.core.api.binder.Processor; import com.gitee.dorive.core.api.context.Context; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java index 8704d031..c0a069f3 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java @@ -25,8 +25,8 @@ import com.gitee.dorive.api.entity.element.EntityEle; import com.gitee.dorive.api.entity.element.PropChain; import com.gitee.dorive.api.impl.resolver.PropChainResolver; import com.gitee.dorive.api.util.ReflectUtils; -import com.gitee.dorive.core.api.common.Binder; -import com.gitee.dorive.core.api.common.Processor; +import com.gitee.dorive.core.api.binder.Binder; +import com.gitee.dorive.core.api.binder.Processor; import com.gitee.dorive.core.impl.binder.ContextBinder; import com.gitee.dorive.core.impl.binder.PropertyBinder; import com.gitee.dorive.core.impl.processor.DefaultProcessor; diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/FactoryExecutor.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/FactoryExecutor.java index f3625c61..7d2205fc 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/FactoryExecutor.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/impl/executor/FactoryExecutor.java @@ -20,7 +20,7 @@ package com.gitee.dorive.spring.boot.starter.impl.executor; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gitee.dorive.api.entity.element.EntityEle; -import com.gitee.dorive.core.api.common.EntityFactory; +import com.gitee.dorive.core.api.executor.EntityFactory; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.Executor; import com.gitee.dorive.core.entity.executor.Example; diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java index ffad13d0..50f81540 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java @@ -25,7 +25,7 @@ import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.gitee.dorive.api.entity.def.EntityDef; import com.gitee.dorive.api.entity.element.EntityEle; import com.gitee.dorive.coating.api.ExampleBuilder; -import com.gitee.dorive.core.api.common.EntityFactory; +import com.gitee.dorive.core.api.executor.EntityFactory; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.Executor; import com.gitee.dorive.core.entity.executor.Example; -- Gitee From 951d67ff6132abca3a881961bb7567cffe5872be Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Wed, 31 May 2023 11:24:29 +0800 Subject: [PATCH 15/43] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=9A=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=9F=A5=E8=AF=A2=E7=9A=84=E5=88=A4=E6=96=AD=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/impl/binder/PropertyBinder.java | 4 ++++ .../core/impl/handler/BatchEntityHandler.java | 19 ++++--------------- .../core/impl/resolver/BinderResolver.java | 9 ++++++++- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/PropertyBinder.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/PropertyBinder.java index 2380b193..3bb6dce5 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/PropertyBinder.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/binder/PropertyBinder.java @@ -57,6 +57,10 @@ public class PropertyBinder extends AbstractBinder { return getFieldPropChain().isSameType(boundPropChain); } + public boolean isCollection() { + return boundPropChain.getEntityField().isCollection(); + } + @Override public Object getBoundValue(Context context, Object rootEntity) { return boundPropChain.getValue(rootEntity); diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java index eaa9b672..8eb44722 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java @@ -20,7 +20,6 @@ package com.gitee.dorive.core.impl.handler; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.context.Selector; import com.gitee.dorive.core.api.executor.EntityHandler; -import com.gitee.dorive.core.impl.binder.PropertyBinder; import com.gitee.dorive.core.impl.resolver.BinderResolver; import com.gitee.dorive.core.repository.AbstractContextRepository; import com.gitee.dorive.core.repository.CommonRepository; @@ -28,7 +27,6 @@ import lombok.AllArgsConstructor; import lombok.Data; import java.util.List; -import java.util.Map; @Data @AllArgsConstructor @@ -42,22 +40,13 @@ public class BatchEntityHandler implements EntityHandler { long totalCount = 0L; for (CommonRepository repository : this.repository.getSubRepositories()) { if (selector.matches(context, repository)) { - if (isMultiQuery(repository)) { - EntityHandler entityHandler = new MultiEntityHandler(repository); - totalCount += entityHandler.handle(context, entities); - } else { - EntityHandler entityHandler = new UnionEntityHandler(repository); - totalCount += entityHandler.handle(context, entities); - } + BinderResolver binderResolver = repository.getBinderResolver(); + EntityHandler entityHandler = binderResolver.isDirectJoin() ? + new MultiEntityHandler(repository) : new UnionEntityHandler(repository); + totalCount += entityHandler.handle(context, entities); } } return totalCount; } - private boolean isMultiQuery(CommonRepository repository) { - BinderResolver binderResolver = repository.getBinderResolver(); - Map> mergedBindersMap = binderResolver.getMergedBindersMap(); - return mergedBindersMap.size() == 1 && mergedBindersMap.containsKey("/"); - } - } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java index c0a069f3..d4730749 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java @@ -18,6 +18,7 @@ package com.gitee.dorive.core.impl.resolver; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import com.gitee.dorive.api.entity.def.BindingDef; import com.gitee.dorive.api.entity.def.EntityDef; @@ -52,6 +53,7 @@ public class BinderResolver { private List allBinders; private List propertyBinders; private Map> mergedBindersMap; + private boolean directJoin; private List boundFields; private List contextBinders; private List boundValueBinders; @@ -69,6 +71,7 @@ public class BinderResolver { allBinders = new ArrayList<>(bindingDefs.size()); propertyBinders = new ArrayList<>(bindingDefs.size()); mergedBindersMap = new LinkedHashMap<>(bindingDefs.size() * 4 / 3 + 1); + directJoin = false; boundFields = new ArrayList<>(bindingDefs.size()); contextBinders = new ArrayList<>(bindingDefs.size()); boundValueBinders = new ArrayList<>(bindingDefs.size()); @@ -94,7 +97,7 @@ public class BinderResolver { String belongAccessPath = propertyBinder.getBelongAccessPath(); List propertyBinders = mergedBindersMap.computeIfAbsent(belongAccessPath, key -> new ArrayList<>(2)); propertyBinders.add(propertyBinder); - + boundFields.add(bindingDef.getField()); if (propertyBinder.isSameType()) { @@ -115,6 +118,10 @@ public class BinderResolver { boundValueBinders.add(contextBinder); } } + + if (mergedBindersMap.size() == 1 && mergedBindersMap.containsKey("/")) { + directJoin = CollUtil.findOne(mergedBindersMap.get("/"), PropertyBinder::isCollection) == null; + } } private BindingDef renewBindingDef(String accessPath, BindingDef bindingDef) { -- Gitee From 8438ba0e3e193d1d3266511b5a0402f967c779b6 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 10:23:20 +0800 Subject: [PATCH 16/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/core/impl/handler/BatchEntityHandler.java | 2 +- .../com/gitee/dorive/core/impl/resolver/BinderResolver.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java index 8eb44722..dcf74e94 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java @@ -41,7 +41,7 @@ public class BatchEntityHandler implements EntityHandler { for (CommonRepository repository : this.repository.getSubRepositories()) { if (selector.matches(context, repository)) { BinderResolver binderResolver = repository.getBinderResolver(); - EntityHandler entityHandler = binderResolver.isDirectJoin() ? + EntityHandler entityHandler = binderResolver.isSimpleRootBinding() ? new MultiEntityHandler(repository) : new UnionEntityHandler(repository); totalCount += entityHandler.handle(context, entities); } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java index d4730749..8d99690d 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java @@ -53,7 +53,7 @@ public class BinderResolver { private List allBinders; private List propertyBinders; private Map> mergedBindersMap; - private boolean directJoin; + private boolean simpleRootBinding; private List boundFields; private List contextBinders; private List boundValueBinders; @@ -71,7 +71,7 @@ public class BinderResolver { allBinders = new ArrayList<>(bindingDefs.size()); propertyBinders = new ArrayList<>(bindingDefs.size()); mergedBindersMap = new LinkedHashMap<>(bindingDefs.size() * 4 / 3 + 1); - directJoin = false; + simpleRootBinding = false; boundFields = new ArrayList<>(bindingDefs.size()); contextBinders = new ArrayList<>(bindingDefs.size()); boundValueBinders = new ArrayList<>(bindingDefs.size()); @@ -120,7 +120,7 @@ public class BinderResolver { } if (mergedBindersMap.size() == 1 && mergedBindersMap.containsKey("/")) { - directJoin = CollUtil.findOne(mergedBindersMap.get("/"), PropertyBinder::isCollection) == null; + simpleRootBinding = CollUtil.findOne(mergedBindersMap.get("/"), PropertyBinder::isCollection) == null; } } -- Gitee From 07eaa07e2aaccdcb67194a237b53167f1364017c Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 10:42:37 +0800 Subject: [PATCH 17/43] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/dorive/api/impl/factory/PropProxyFactory.java | 5 ++--- .../main/java/com/gitee/dorive/api/util/ReflectUtils.java | 4 ---- .../com/gitee/dorive/core/impl/resolver/BinderResolver.java | 4 ++-- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/impl/factory/PropProxyFactory.java b/dorive-api/src/main/java/com/gitee/dorive/api/impl/factory/PropProxyFactory.java index 0722b368..62906454 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/impl/factory/PropProxyFactory.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/impl/factory/PropProxyFactory.java @@ -20,9 +20,8 @@ package com.gitee.dorive.api.impl.factory; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import com.gitee.dorive.api.api.PropProxy; -import com.gitee.dorive.proxy.ProxyCompiler; import com.gitee.dorive.proxy.JavassistCompiler; -import com.gitee.dorive.api.util.ReflectUtils; +import com.gitee.dorive.proxy.ProxyCompiler; import java.lang.reflect.Field; import java.util.Map; @@ -58,7 +57,7 @@ public class PropProxyFactory { try { String generatedCode = generateCode(entityClass, fieldClass, fieldName); Class generatedClass = PROXY_COMPILER.compile(generatedCode, null); - PropProxy propProxy = (PropProxy) ReflectUtils.newInstance(generatedClass); + PropProxy propProxy = (PropProxy) ReflectUtil.newInstance(generatedClass); GENERATED_PROXY_CACHE.put(cacheKey, propProxy); } catch (Exception e) { diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java b/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java index 37d18f6c..127e52fe 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java @@ -50,10 +50,6 @@ public class ReflectUtils { return fields; } - public static Object newInstance(Class type) { - return org.springframework.cglib.core.ReflectUtils.newInstance(type); - } - public static Class getFirstArgumentType(Class type) { Type genericSuperclass = type.getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java index 8d99690d..26b97bff 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java @@ -20,12 +20,12 @@ package com.gitee.dorive.core.impl.resolver; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ReflectUtil; import com.gitee.dorive.api.entity.def.BindingDef; import com.gitee.dorive.api.entity.def.EntityDef; import com.gitee.dorive.api.entity.element.EntityEle; import com.gitee.dorive.api.entity.element.PropChain; import com.gitee.dorive.api.impl.resolver.PropChainResolver; -import com.gitee.dorive.api.util.ReflectUtils; import com.gitee.dorive.core.api.binder.Binder; import com.gitee.dorive.core.api.binder.Processor; import com.gitee.dorive.core.impl.binder.ContextBinder; @@ -151,7 +151,7 @@ public class BinderResolver { processor = (Processor) applicationContext.getBean(beanNamesForType[0]); } if (processor == null) { - processor = (Processor) ReflectUtils.newInstance(processorClass); + processor = (Processor) ReflectUtil.newInstance(processorClass); } } if (processor instanceof DefaultProcessor) { -- Gitee From 15e24cd2302780d03d0ab2e7114b53a6972ba711 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 13:22:40 +0800 Subject: [PATCH 18/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/core/repository/AbstractContextRepository.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index 3261c516..6cebf3e3 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -162,10 +162,11 @@ public abstract class AbstractContextRepository extends AbstractRepositor } if (repository instanceof DefaultRepository) { DefaultRepository defaultRepository = (DefaultRepository) repository; - Map attachments = new ConcurrentHashMap<>(8); defaultRepository.setEntityDef(entityDef); defaultRepository.setEntityEle(entityEle); defaultRepository.setOperationFactory(operationFactory); + + Map attachments = new ConcurrentHashMap<>(8); defaultRepository.setExecutor(newExecutor(entityDef, entityEle, attachments)); defaultRepository.setAttachments(attachments); } @@ -183,15 +184,14 @@ public abstract class AbstractContextRepository extends AbstractRepositor } private Executor newExecutor() { - delegateResolver = new DelegateResolver(this); - EntityHandler entityHandler = new BatchEntityHandler(this); + processEntityClass(entityHandler); + delegateResolver = new DelegateResolver(this); if (delegateResolver.isDelegated()) { entityHandler = new AdaptiveEntityHandler(this, entityHandler); } - return new ChainExecutor(this, entityHandler); } -- Gitee From c897e9dcca2d09bbd0721973a46f441affbd8cc7 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 13:22:59 +0800 Subject: [PATCH 19/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/core/repository/AbstractContextRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index 6cebf3e3..d1833192 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -185,7 +185,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor private Executor newExecutor() { EntityHandler entityHandler = new BatchEntityHandler(this); - + processEntityClass(entityHandler); delegateResolver = new DelegateResolver(this); -- Gitee From dc338aee58aca59549785096ce09ccf3392c49b1 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 15:07:09 +0800 Subject: [PATCH 20/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/repository/AbstractContextRepository.java | 13 +++++-------- .../ref/repository/AbstractRefRepository.java | 3 ++- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index d1833192..4aaa9c0a 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -107,8 +107,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor EntityDef entityDef = renewEntityDef(entityEle); OperationFactory operationFactory = new OperationFactory(entityEle); - AbstractRepository innerRepository = doNewRepository(entityDef, entityEle, operationFactory); - AbstractRepository proxyRepository = processRepository(innerRepository); + AbstractRepository actualRepository = doNewRepository(entityDef, entityEle, operationFactory); + AbstractRepository proxyRepository = processRepository(actualRepository); boolean isRoot = "/".equals(accessPath); boolean isAggregated = entityEle.isAggregated(); @@ -125,7 +125,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor repository.setEntityEle(entityEle); repository.setOperationFactory(operationFactory); repository.setProxyRepository(proxyRepository); - repository.setAttachments(new ConcurrentHashMap<>(innerRepository.getAttachments())); + repository.setAttachments(new ConcurrentHashMap<>(actualRepository.getAttachments())); repository.setAccessPath(accessPath); repository.setRoot(isRoot); @@ -184,10 +184,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor } private Executor newExecutor() { - EntityHandler entityHandler = new BatchEntityHandler(this); - - processEntityClass(entityHandler); - + EntityHandler entityHandler = processEntityHandler(new BatchEntityHandler(this)); delegateResolver = new DelegateResolver(this); if (delegateResolver.isDelegated()) { entityHandler = new AdaptiveEntityHandler(this, entityHandler); @@ -199,6 +196,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor protected abstract AbstractRepository processRepository(AbstractRepository repository); - protected abstract void processEntityClass(EntityHandler entityHandler); + protected abstract EntityHandler processEntityHandler(EntityHandler entityHandler); } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java index bcfae72f..2757f2c4 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java @@ -27,12 +27,13 @@ import java.lang.reflect.Field; public abstract class AbstractRefRepository extends AbstractCoatingRepository implements SimpleRepository { @Override - protected void processEntityClass(EntityHandler entityHandler) { + protected EntityHandler processEntityHandler(EntityHandler entityHandler) { RefInjector refInjector = new RefInjector(this, entityHandler, getEntityClass()); Field field = refInjector.getField(); if (field != null) { refInjector.inject(field, refInjector.createRef()); } + return entityHandler; } } -- Gitee From 9f831a351891495ba8fc0807b71ab941ac039597 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 16:33:33 +0800 Subject: [PATCH 21/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractCoatingRepository.java | 7 +++++++ .../dorive/core/repository/CommonRepository.java | 16 ---------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/repository/AbstractCoatingRepository.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/repository/AbstractCoatingRepository.java index 2b2f42d4..47011512 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/repository/AbstractCoatingRepository.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/repository/AbstractCoatingRepository.java @@ -35,6 +35,7 @@ import lombok.EqualsAndHashCode; import org.apache.commons.lang3.StringUtils; import org.springframework.core.annotation.AnnotatedElementUtils; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -77,6 +78,9 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo @Override public List selectByCoating(Context context, Object coating) { Example example = buildExample(context, coating); + if (example.isEmptyQuery()) { + return Collections.emptyList(); + } if (example.isCountQueried()) { example.setPage(null); } @@ -87,6 +91,9 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo @SuppressWarnings("unchecked") public Page selectPageByCoating(Context context, Object coating) { Example example = buildExample(context, coating); + if (example.isEmptyQuery()) { + return (Page) example.getPage(); + } if (example.isCountQueried()) { Page page = example.getPage(); example.setPage(null); diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/CommonRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/CommonRepository.java index 77fa43a8..761adc05 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/CommonRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/CommonRepository.java @@ -43,22 +43,6 @@ public class CommonRepository extends ProxyRepository { private BinderResolver binderResolver; private boolean boundEntity; - @Override - public int updateByExample(Context context, Object entity, Example example) { - if (example.isEmptyQuery()) { - return 0; - } - return super.updateByExample(context, entity, example); - } - - @Override - public int deleteByExample(Context context, Example example) { - if (example.isEmptyQuery()) { - return 0; - } - return super.deleteByExample(context, example); - } - @Override public Result executeQuery(Context context, Query query) { Selector selector = context.getSelector(); -- Gitee From 67b749b3236afb8850edf8f38708eea29c260e51 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 17:34:08 +0800 Subject: [PATCH 22/43] =?UTF-8?q?=E5=BA=9F=E5=BC=83=E5=8E=9F=E6=9D=A5?= =?UTF-8?q?=E7=9A=84RepositoryContext=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/config/DoriveCoreConfiguration.java | 7 +-- .../dorive/core/config/RepositoryContext.java | 43 +++++++------- .../core/config/RepositoryDefinition.java | 57 ------------------- .../repository/AbstractContextRepository.java | 4 +- 4 files changed, 26 insertions(+), 85 deletions(-) delete mode 100644 dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryDefinition.java diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/config/DoriveCoreConfiguration.java b/dorive-core/src/main/java/com/gitee/dorive/core/config/DoriveCoreConfiguration.java index 0849f450..0e40d407 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/config/DoriveCoreConfiguration.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/config/DoriveCoreConfiguration.java @@ -25,13 +25,8 @@ import org.springframework.core.annotation.Order; @Configuration public class DoriveCoreConfiguration { - @Bean("repositoryDefinitionV3") - public static RepositoryDefinition repositoryDefinition() { - return new RepositoryDefinition(); - } - @Bean("repositoryContextV3") - public RepositoryContext repositoryContext() { + public static RepositoryContext repositoryContext() { return new RepositoryContext(); } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java index ef52545f..c107945c 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java @@ -17,38 +17,41 @@ package com.gitee.dorive.core.config; +import com.gitee.dorive.api.util.ReflectUtils; import com.gitee.dorive.core.repository.AbstractContextRepository; import org.springframework.beans.BeansException; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.core.ResolvableType; +import java.lang.reflect.Type; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class RepositoryContext implements ApplicationContextAware, InitializingBean { +public class RepositoryContext implements BeanFactoryPostProcessor { - private ApplicationContext applicationContext; - - private static final Map, AbstractContextRepository> CLASS_REPOSITORY_MAP = new ConcurrentHashMap<>(); - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } + private static final Map, Class> ENTITY_REPOSITORY_MAP = new ConcurrentHashMap<>(); @Override - @SuppressWarnings("rawtypes") - public void afterPropertiesSet() { - Map beansOfType = applicationContext.getBeansOfType(AbstractContextRepository.class); - for (AbstractContextRepository repository : beansOfType.values()) { - CLASS_REPOSITORY_MAP.put(repository.getEntityClass(), repository); + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + String[] beanNames = beanFactory.getBeanDefinitionNames(); + for (String beanName : beanNames) { + BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName); + ResolvableType resolvableType = beanDefinition.getResolvableType(); + Type type = resolvableType.getType(); + if (type instanceof Class) { + Class clazz = (Class) type; + if (AbstractContextRepository.class.isAssignableFrom(clazz)) { + Class entityClass = ReflectUtils.getFirstArgumentType(clazz); + ENTITY_REPOSITORY_MAP.put(entityClass, clazz); + } + } } } - @SuppressWarnings("unchecked") - public static , E> R getRepository(Class entityClass) { - return (R) CLASS_REPOSITORY_MAP.get(entityClass); + public static Class findTypeByEntity(Class entityClass) { + return ENTITY_REPOSITORY_MAP.get(entityClass); } } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryDefinition.java b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryDefinition.java deleted file mode 100644 index c72f435f..00000000 --- a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryDefinition.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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 - * - * http://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.gitee.dorive.core.config; - -import com.gitee.dorive.api.util.ReflectUtils; -import com.gitee.dorive.core.repository.AbstractContextRepository; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.core.ResolvableType; - -import java.lang.reflect.Type; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public class RepositoryDefinition implements BeanFactoryPostProcessor { - - private static final Map, Class> ENTITY_REPOSITORY_MAP = new ConcurrentHashMap<>(); - - @Override - public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - String[] beanNames = beanFactory.getBeanDefinitionNames(); - for (String beanName : beanNames) { - BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName); - ResolvableType resolvableType = beanDefinition.getResolvableType(); - Type type = resolvableType.getType(); - if (type instanceof Class) { - Class clazz = (Class) type; - if (AbstractContextRepository.class.isAssignableFrom(clazz)) { - Class entityClass = ReflectUtils.getFirstArgumentType(clazz); - ENTITY_REPOSITORY_MAP.put(entityClass, clazz); - } - } - } - } - - public static Class findRepositoryType(Class entityClass) { - return ENTITY_REPOSITORY_MAP.get(entityClass); - } - -} diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index 4aaa9c0a..cb7aee13 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -29,7 +29,7 @@ import com.gitee.dorive.api.impl.resolver.PropChainResolver; import com.gitee.dorive.api.util.ReflectUtils; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.core.api.executor.Executor; -import com.gitee.dorive.core.config.RepositoryDefinition; +import com.gitee.dorive.core.config.RepositoryContext; import com.gitee.dorive.core.entity.executor.OrderBy; import com.gitee.dorive.core.impl.executor.ChainExecutor; import com.gitee.dorive.core.impl.factory.OperationFactory; @@ -144,7 +144,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor entityDef = BeanUtil.copyProperties(entityDef, EntityDef.class); if (!entityDef.isAggregated() && entityEle.isAggregated()) { Class entityClass = entityEle.getGenericType(); - Class repositoryClass = RepositoryDefinition.findRepositoryType(entityClass); + Class repositoryClass = RepositoryContext.findTypeByEntity(entityClass); Assert.notNull(repositoryClass, "No type of repository found! type: {}", entityClass.getName()); entityDef.setRepository(repositoryClass); } -- Gitee From 3172fb4d77cdd69682b1d015eafae960e8dd5d4d Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 17:51:16 +0800 Subject: [PATCH 23/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index fcce1b71..7b8c4ff4 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ - **模型驱动** - **NoSQL** - **面向对象** -- **事件驱动** +- **事件模式** - **代码生成** ### 🤼‍♂️设计模式对比 @@ -47,7 +47,7 @@ com.gitee.digital-engine dorive-spring-boot-starter - 3.3.1 + 3.3.9 ``` @@ -66,11 +66,6 @@ @Data @Entity(name = "tenant", source = SysTenantMapper.class) public class Tenant { - /** - * 选取器,决定每次操作的范围 - */ - public static final Selector ALL = new NameSelector("*"); - public static final Selector ONLY_TENANT = new NameSelector("tenant"); private Integer id; private String tenantCode; @@ -98,8 +93,6 @@ public class Tenant { ```java @RootRepository -@AllArgsConstructor -@EqualsAndHashCode(callSuper = false) @CoatingScan("xxx.xxx.xxx.xxx.xxx.query") public class TenantRepository extends MybatisPlusRepository { } @@ -110,7 +103,7 @@ public class TenantRepository extends MybatisPlusRepository { ```java package xxx.xxx.xxx.xxx.xxx.query; @Data -@Coating +@Example public class TenantQuery { private String userCode; private String sortBy; @@ -135,7 +128,7 @@ User user = new User(); user.setUserCode("user"); tenant.setUser(Collections.singletonList(user)); -int count = tenantRepository.insert(Tenant.ALL, tenant); +int count = tenantRepository.insert(Selector.ALL, tenant); ``` #### 查询数据 @@ -149,7 +142,7 @@ tenantQuery.setOrder("desc"); tenantQuery.setPage(1); tenantQuery.setLimit(10); -List tenants = tenantRepository.selectByCoating(Tenant.ALL, tenantQuery); +List tenants = tenantRepository.selectByCoating(Selector.ALL, tenantQuery); ``` #### 更新数据 @@ -158,12 +151,12 @@ List tenants = tenantRepository.selectByCoating(Tenant.ALL, tenantQuery) Tenant tenant = tenantRepository.selectByPrimaryKey(Tenant.ONLY_TENANT, 1); tenant.setTenantCode("tenant1"); -int count = tenantRepository.update(Tenant.ONLY_TENANT, tenant); +int count = tenantRepository.update(Selector.ROOT, tenant); ``` #### 删除数据 ```java // 开发者通过聚合对象的id,即可删除所有数据 -int count = tenantRepository.deleteByPrimaryKey(Tenant.ALL, 1); +int count = tenantRepository.deleteByPrimaryKey(Selector.ALL, 1); ``` -- Gitee From 7fe12ef7b848a81e03bae86e8ed1242e4beb11aa Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 17:54:23 +0800 Subject: [PATCH 24/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7b8c4ff4..c4f751fc 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ package xxx.xxx.xxx.xxx.xxx.query; @Data @Example public class TenantQuery { + @Criterion(belongTo = "user") private String userCode; private String sortBy; private String order; -- Gitee From 8b5796d6b30e93df0fe9810bee8ac3a5231248b1 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 2 Jun 2023 18:00:04 +0800 Subject: [PATCH 25/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4f751fc..c7b3f01e 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ List tenants = tenantRepository.selectByCoating(Selector.ALL, tenantQuer #### 更新数据 ```java -Tenant tenant = tenantRepository.selectByPrimaryKey(Tenant.ONLY_TENANT, 1); +Tenant tenant = tenantRepository.selectByPrimaryKey(Selector.ROOT, 1); tenant.setTenantCode("tenant1"); int count = tenantRepository.update(Selector.ROOT, tenant); -- Gitee From 7cca220d59835f52bd027e3907002f34a7246288 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 10:07:43 +0800 Subject: [PATCH 26/43] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/dorive/core/repository/ProxyRepository.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/ProxyRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/ProxyRepository.java index fe690e84..2140546b 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/ProxyRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/ProxyRepository.java @@ -112,6 +112,11 @@ public class ProxyRepository extends AbstractRepository { return proxyRepository.executeQuery(context, query); } + @Override + public long executeCount(Context context, Query query) { + return proxyRepository.executeCount(context, query); + } + @Override public int execute(Context context, Operation operation) { return proxyRepository.execute(context, operation); -- Gitee From a4bd4796965d673ba6bccb593d76cc373b1f627c Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 11:01:20 +0800 Subject: [PATCH 27/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/dorive/core/util/NumberUtils.java | 7 ------- .../com/gitee/dorive/core/util/PathUtils.java | 16 ++++++++-------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/util/NumberUtils.java b/dorive-core/src/main/java/com/gitee/dorive/core/util/NumberUtils.java index 2a51a4f6..d9cb41fd 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/util/NumberUtils.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/util/NumberUtils.java @@ -26,11 +26,4 @@ public class NumberUtils { return null; } - public static Long longValue(Object object) { - if (object instanceof Number) { - return ((Number) object).longValue(); - } - return null; - } - } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/util/PathUtils.java b/dorive-core/src/main/java/com/gitee/dorive/core/util/PathUtils.java index d049a5fa..c173175c 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/util/PathUtils.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/util/PathUtils.java @@ -23,14 +23,6 @@ import java.util.Set; public class PathUtils { - public static String getPrevPath(String accessPath) { - return accessPath.lastIndexOf("/") > 0 ? accessPath.substring(0, accessPath.lastIndexOf("/")) : "/"; - } - - public static String getLastName(String accessPath) { - return accessPath.startsWith("/") && accessPath.length() > 1 ? accessPath.substring(accessPath.lastIndexOf("/") + 1) : ""; - } - public static String getAbsolutePath(String accessPath, String relativePath) { accessPath = "https://dorive" + accessPath; accessPath = URLUtil.completeUrl(accessPath, relativePath); @@ -44,4 +36,12 @@ public class PathUtils { return accessPath; } + public static String getPrevPath(String accessPath) { + return accessPath.lastIndexOf("/") > 0 ? accessPath.substring(0, accessPath.lastIndexOf("/")) : "/"; + } + + public static String getLastName(String accessPath) { + return accessPath.startsWith("/") && accessPath.length() > 1 ? accessPath.substring(accessPath.lastIndexOf("/") + 1) : ""; + } + } -- Gitee From b531b356c4261789cf830e7c5c50ca99a8d056b0 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 13:55:16 +0800 Subject: [PATCH 28/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/core/impl/resolver/BinderResolver.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java index 26b97bff..1abeca6c 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java @@ -84,7 +84,8 @@ public class BinderResolver { String alias = entityEle.toAlias(field); PropChain fieldPropChain = propChainMap.get("/" + field); - Assert.notNull(fieldPropChain, "The field of @Binding may be wrong! type: {}, field: {}", entityEle.getGenericType().getName(), field); + Assert.notNull(fieldPropChain, "The field configured for @Binding does not exist within the entity! type: {}, field: {}", + entityEle.getGenericType().getName(), field); fieldPropChain.newPropProxy(); Processor processor = newProcessor(bindingDef); @@ -180,8 +181,8 @@ public class BinderResolver { boundPropChain.newPropProxy(); EntityEle entityEle = belongRepository.getEntityEle(); - String fieldName = StringUtils.isBlank(property) ? PathUtils.getLastName(bindExp) : property; - String bindAlias = entityEle.toAlias(fieldName); + String boundName = StringUtils.isBlank(property) ? PathUtils.getLastName(bindExp) : property; + String bindAlias = entityEle.toAlias(boundName); return new PropertyBinder(bindingDef, alias, fieldPropChain, processor, belongAccessPath, belongRepository, boundPropChain, bindAlias); -- Gitee From eee448d80d5e3b5de3482320c89f38fb0edee248 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 14:07:20 +0800 Subject: [PATCH 29/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/impl/executor/ChainExecutor.java | 6 +++--- .../impl/handler/AdaptiveEntityHandler.java | 8 ++++---- ...gateResolver.java => DerivedResolver.java} | 20 +++++++++---------- .../repository/AbstractContextRepository.java | 8 ++++---- 4 files changed, 21 insertions(+), 21 deletions(-) rename dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/{DelegateResolver.java => DerivedResolver.java} (76%) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java index c5da1487..1da151c3 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ChainExecutor.java @@ -28,7 +28,7 @@ import com.gitee.dorive.core.entity.executor.Result; import com.gitee.dorive.core.entity.operation.Operation; import com.gitee.dorive.core.entity.operation.Query; import com.gitee.dorive.core.impl.factory.OperationFactory; -import com.gitee.dorive.core.impl.resolver.DelegateResolver; +import com.gitee.dorive.core.impl.resolver.DerivedResolver; import com.gitee.dorive.core.repository.AbstractContextRepository; import com.gitee.dorive.core.repository.CommonRepository; import lombok.Getter; @@ -97,8 +97,8 @@ public class ChainExecutor extends AbstractExecutor implements EntityHandler { Object rootEntity = operation.getEntity(); Assert.notNull(rootEntity, "The rootEntity cannot be null!"); - DelegateResolver delegateResolver = repository.getDelegateResolver(); - AbstractContextRepository delegateRepository = delegateResolver.delegateRepository(rootEntity); + DerivedResolver derivedResolver = repository.getDerivedResolver(); + AbstractContextRepository delegateRepository = derivedResolver.deriveRepository(rootEntity); delegateRepository = delegateRepository == null ? repository : delegateRepository; Selector selector = context.getSelector(); diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java index 781b1b7b..6b0cbbf3 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java @@ -20,7 +20,7 @@ package com.gitee.dorive.core.impl.handler; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.core.api.executor.Executor; -import com.gitee.dorive.core.impl.resolver.DelegateResolver; +import com.gitee.dorive.core.impl.resolver.DerivedResolver; import com.gitee.dorive.core.repository.AbstractContextRepository; import lombok.Data; @@ -61,11 +61,11 @@ public class AdaptiveEntityHandler implements EntityHandler { } private Map, List> distribute(List entities, List newEntities) { - DelegateResolver delegateResolver = repository.getDelegateResolver(); - Map, List> repositoryEntitiesMap = new LinkedHashMap<>(delegateResolver.getDelegateCount() * 4 / 3 + 1); + DerivedResolver derivedResolver = repository.getDerivedResolver(); + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(derivedResolver.numberOf() * 4 / 3 + 1); for (Object entity : entities) { - AbstractContextRepository repository = delegateResolver.delegateRepository(entity); + AbstractContextRepository repository = derivedResolver.deriveRepository(entity); if (repository == null) { newEntities.add(entity); } else { diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DelegateResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedResolver.java similarity index 76% rename from dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DelegateResolver.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedResolver.java index 1d2ee8cb..8dede108 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DelegateResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedResolver.java @@ -26,12 +26,12 @@ import java.util.LinkedHashMap; import java.util.Map; @Data -public class DelegateResolver { +public class DerivedResolver { private AbstractContextRepository repository; - private Map, AbstractContextRepository> delegateRepositoryMap = new LinkedHashMap<>(3 * 4 / 3 + 1); + private Map, AbstractContextRepository> derivedRepositoryMap = new LinkedHashMap<>(3 * 4 / 3 + 1); - public DelegateResolver(AbstractContextRepository repository) { + public DerivedResolver(AbstractContextRepository repository) { this.repository = repository; resolve(); } @@ -45,22 +45,22 @@ public class DelegateResolver { AbstractContextRepository abstractContextRepository = (AbstractContextRepository) beanInstance; Class fieldEntityClass = abstractContextRepository.getEntityClass(); if (repository.getEntityClass().isAssignableFrom(fieldEntityClass)) { - delegateRepositoryMap.put(fieldEntityClass, abstractContextRepository); + derivedRepositoryMap.put(fieldEntityClass, abstractContextRepository); } } }); } - public boolean isDelegated() { - return !delegateRepositoryMap.isEmpty(); + public boolean isDerived() { + return !derivedRepositoryMap.isEmpty(); } - public int getDelegateCount() { - return delegateRepositoryMap.size(); + public int numberOf() { + return derivedRepositoryMap.size(); } - public AbstractContextRepository delegateRepository(Object rootEntity) { - return delegateRepositoryMap.get(rootEntity.getClass()); + public AbstractContextRepository deriveRepository(Object rootEntity) { + return derivedRepositoryMap.get(rootEntity.getClass()); } } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index cb7aee13..cdcf6dea 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -36,7 +36,7 @@ import com.gitee.dorive.core.impl.factory.OperationFactory; import com.gitee.dorive.core.impl.handler.AdaptiveEntityHandler; import com.gitee.dorive.core.impl.handler.BatchEntityHandler; import com.gitee.dorive.core.impl.resolver.BinderResolver; -import com.gitee.dorive.core.impl.resolver.DelegateResolver; +import com.gitee.dorive.core.impl.resolver.DerivedResolver; import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.commons.lang3.StringUtils; @@ -59,7 +59,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor private ApplicationContext applicationContext; private PropChainResolver propChainResolver; - private DelegateResolver delegateResolver; + private DerivedResolver derivedResolver; private Map repositoryMap = new LinkedHashMap<>(); private CommonRepository rootRepository; @@ -185,8 +185,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor private Executor newExecutor() { EntityHandler entityHandler = processEntityHandler(new BatchEntityHandler(this)); - delegateResolver = new DelegateResolver(this); - if (delegateResolver.isDelegated()) { + derivedResolver = new DerivedResolver(this); + if (derivedResolver.isDerived()) { entityHandler = new AdaptiveEntityHandler(this, entityHandler); } return new ChainExecutor(this, entityHandler); -- Gitee From 14be198a2b6419eef9bed4cba48aff98fcb35bf5 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 14:14:18 +0800 Subject: [PATCH 30/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/dorive/core/impl/resolver/DerivedResolver.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedResolver.java index 8dede108..95cce01c 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedResolver.java @@ -59,8 +59,8 @@ public class DerivedResolver { return derivedRepositoryMap.size(); } - public AbstractContextRepository deriveRepository(Object rootEntity) { - return derivedRepositoryMap.get(rootEntity.getClass()); + public AbstractContextRepository deriveRepository(Object entity) { + return derivedRepositoryMap.get(entity.getClass()); } } -- Gitee From 2ba318628f4fe76060e187e8e982284361510f92 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 14:15:27 +0800 Subject: [PATCH 31/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java index 6b0cbbf3..618241e4 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java @@ -62,7 +62,8 @@ public class AdaptiveEntityHandler implements EntityHandler { private Map, List> distribute(List entities, List newEntities) { DerivedResolver derivedResolver = repository.getDerivedResolver(); - Map, List> repositoryEntitiesMap = new LinkedHashMap<>(derivedResolver.numberOf() * 4 / 3 + 1); + int numberOf = derivedResolver.numberOf(); + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(numberOf * 4 / 3 + 1); for (Object entity : entities) { AbstractContextRepository repository = derivedResolver.deriveRepository(entity); -- Gitee From 7354b7592134c79af6e31fffa41f9313f6803ca7 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 15:00:13 +0800 Subject: [PATCH 32/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/event/repository/AbstractEventRepository.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java b/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java index 830111fb..f4d345c3 100644 --- a/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java +++ b/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java @@ -41,12 +41,12 @@ public abstract class AbstractEventRepository extends AbstractGenericRepo @Override protected AbstractRepository processRepository(AbstractRepository repository) { if (enableEvent) { - AbstractRepository innerRepository = repository; + AbstractRepository actualRepository = repository; if (repository instanceof ProxyRepository) { - innerRepository = ((ProxyRepository) repository).getProxyRepository(); + actualRepository = ((ProxyRepository) repository).getProxyRepository(); } - if (innerRepository instanceof DefaultRepository) { - DefaultRepository defaultRepository = (DefaultRepository) innerRepository; + if (actualRepository instanceof DefaultRepository) { + DefaultRepository defaultRepository = (DefaultRepository) actualRepository; EntityEle entityEle = defaultRepository.getEntityEle(); Executor executor = defaultRepository.getExecutor(); executor = new EventExecutor(getApplicationContext(), entityEle, executor); -- Gitee From f2f523941cc23ee86b32eccd417ca1a515abd50a Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 15:07:57 +0800 Subject: [PATCH 33/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/event/impl/RepositoryListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java b/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java index a70ba762..f448f831 100644 --- a/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java +++ b/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java @@ -55,7 +55,7 @@ public class RepositoryListener implements ApplicationListener, A Listener listener = AnnotationUtils.getAnnotation(entityListener.getClass(), Listener.class); if (listener != null) { Class entityClass = listener.value(); - List existEntityListeners = classEventListenersMap.computeIfAbsent(entityClass, key -> new ArrayList<>()); + List existEntityListeners = classEventListenersMap.computeIfAbsent(entityClass, key -> new ArrayList<>(4)); existEntityListeners.add(entityListener); } } -- Gitee From 03b0aa2e12d6ab583c44defd3846e47585a01971 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 15:18:40 +0800 Subject: [PATCH 34/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/event/impl/RepositoryListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java b/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java index f448f831..ee6f50b0 100644 --- a/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java +++ b/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java @@ -31,15 +31,15 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.annotation.AnnotationUtils; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; @Slf4j public class RepositoryListener implements ApplicationListener, ApplicationContextAware, InitializingBean { private ApplicationContext applicationContext; - private final Map, List> classEventListenersMap = new LinkedHashMap<>(); + private final Map, List> classEventListenersMap = new ConcurrentHashMap<>(); @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { -- Gitee From 31295ed59f6db1bcb359fa9c37b0b10273bdcdb0 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 5 Jun 2023 15:19:52 +0800 Subject: [PATCH 35/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/event/impl/RepositoryListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java b/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java index ee6f50b0..5e7d80e6 100644 --- a/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java +++ b/dorive-event/src/main/java/com/gitee/dorive/event/impl/RepositoryListener.java @@ -63,8 +63,8 @@ public class RepositoryListener implements ApplicationListener, A @Override public void onApplicationEvent(ExecutorEvent event) { - EventExecutor executor = (EventExecutor) event.getSource(); - EntityEle entityEle = executor.getEntityEle(); + EventExecutor eventExecutor = (EventExecutor) event.getSource(); + EntityEle entityEle = eventExecutor.getEntityEle(); Class entityClass = entityEle.getGenericType(); List entityListeners = classEventListenersMap.get(entityClass); if (entityListeners != null && !entityListeners.isEmpty()) { -- Gitee From d26c249209087462bf327f66a8da96bcc7710e8f Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 6 Jun 2023 10:46:08 +0800 Subject: [PATCH 36/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/coating/entity/CoatingField.java | 2 +- .../com/gitee/dorive/coating/entity/def/CriterionDef.java | 2 +- .../com/gitee/dorive/coating/entity/def/ExampleDef.java | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingField.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingField.java index 423f32d1..898e8b37 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingField.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingField.java @@ -50,7 +50,7 @@ public class CoatingField { Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0]; this.genericType = (Class) actualTypeArgument; } - criterionDef = CriterionDef.fromElement(field); + criterionDef = CriterionDef.fromField(field); } public boolean isIgnore() { diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CriterionDef.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CriterionDef.java index 0d872ffd..220a49c0 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CriterionDef.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/CriterionDef.java @@ -38,7 +38,7 @@ public class CriterionDef { private String operator; private boolean ignore; - public static CriterionDef fromElement(Field field) { + public static CriterionDef fromField(Field field) { if (field.isAnnotationPresent(Criterion.class)) { Map attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(field, Criterion.class); CriterionDef criterionDef = BeanUtil.copyProperties(attributes, CriterionDef.class); diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/ExampleDef.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/ExampleDef.java index 04ab58a3..c7640186 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/ExampleDef.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/def/ExampleDef.java @@ -26,9 +26,9 @@ import java.util.Map; public class ExampleDef { - public static ExampleDef fromElement(AnnotatedElement annotatedElement) { - Map annotationAttributes = AnnotatedElementUtils.getMergedAnnotationAttributes(annotatedElement, Example.class); - return BeanUtil.copyProperties(annotationAttributes, ExampleDef.class); + public static ExampleDef fromElement(AnnotatedElement element) { + Map attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(element, Example.class); + return BeanUtil.copyProperties(attributes, ExampleDef.class); } } -- Gitee From 62e5c04f0a48d74767b54a21168f6adddef5ac81 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 6 Jun 2023 11:21:57 +0800 Subject: [PATCH 37/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resolver/MergedRepositoryResolver.java | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/MergedRepositoryResolver.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/MergedRepositoryResolver.java index d1c41118..96af4dfd 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/MergedRepositoryResolver.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/MergedRepositoryResolver.java @@ -55,14 +55,7 @@ public class MergedRepositoryResolver { getMergedBindersMap("", rootRepository), rootRepository, 1); - - mergedRepositoryMap.put("/", mergedRepository); - - String name = mergedRepository.getName(); - if (StringUtils.isNotBlank(name)) { - nameMergedRepositoryMap.putIfAbsent(name, mergedRepository); - } - + addMergedRepository(mergedRepository); resolve(new ArrayList<>(), repository); } @@ -87,13 +80,7 @@ public class MergedRepositoryResolver { getMergedBindersMap(lastAccessPath, repository), rootRepository, mergedRepositoryMap.size() + 1); - - mergedRepositoryMap.put(absoluteAccessPath, mergedRepository); - - String name = mergedRepository.getName(); - if (StringUtils.isNotBlank(name)) { - nameMergedRepositoryMap.putIfAbsent(name, mergedRepository); - } + addMergedRepository(mergedRepository); List newMultiAccessPath = new ArrayList<>(multiAccessPath); newMultiAccessPath.add(accessPath); @@ -109,17 +96,20 @@ public class MergedRepositoryResolver { getMergedBindersMap(lastAccessPath, repository), repository, mergedRepositoryMap.size() + 1); - - mergedRepositoryMap.put(absoluteAccessPath, mergedRepository); - - String name = mergedRepository.getName(); - if (StringUtils.isNotBlank(name)) { - nameMergedRepositoryMap.putIfAbsent(name, mergedRepository); - } + addMergedRepository(mergedRepository); } } } + private void addMergedRepository(MergedRepository mergedRepository) { + String absoluteAccessPath = mergedRepository.getAbsoluteAccessPath(); + String name = mergedRepository.getName(); + mergedRepositoryMap.put(absoluteAccessPath, mergedRepository); + if (StringUtils.isNotBlank(name)) { + nameMergedRepositoryMap.putIfAbsent(name, mergedRepository); + } + } + private Map> getMergedBindersMap(String lastAccessPath, CommonRepository repository) { BinderResolver binderResolver = repository.getBinderResolver(); List propertyBinders = binderResolver.getPropertyBinders(); -- Gitee From f8f7b63057d21bf6efbee014d467a560a939c29d Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 6 Jun 2023 13:21:04 +0800 Subject: [PATCH 38/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/coating/impl/resolver/MergedRepositoryResolver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/MergedRepositoryResolver.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/MergedRepositoryResolver.java index 96af4dfd..f7f8e679 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/MergedRepositoryResolver.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/MergedRepositoryResolver.java @@ -116,7 +116,7 @@ public class MergedRepositoryResolver { Map> mergedBindersMap = new LinkedHashMap<>(); for (PropertyBinder propertyBinder : propertyBinders) { String relativeAccessPath = lastAccessPath + propertyBinder.getBelongAccessPath(); - List existPropertyBinders = mergedBindersMap.computeIfAbsent(relativeAccessPath, key -> new ArrayList<>()); + List existPropertyBinders = mergedBindersMap.computeIfAbsent(relativeAccessPath, key -> new ArrayList<>(4)); existPropertyBinders.add(propertyBinder); } return mergedBindersMap; -- Gitee From bc2ee6c1dceec3dd103c7d8f3f8bb91af3edf2d2 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 6 Jun 2023 13:57:55 +0800 Subject: [PATCH 39/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/coating/entity/CoatingType.java | 8 +++---- .../coating/entity/MergedRepository.java | 2 +- .../dorive/coating/entity/SpecificFields.java | 12 +++++----- .../impl/resolver/CoatingTypeResolver.java | 22 +++++++++---------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingType.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingType.java index 1b06e528..eea73b5b 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingType.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/CoatingType.java @@ -35,7 +35,7 @@ import java.util.Map; public class CoatingType { private ExampleDef exampleDef; - private List fields; + private List coatingFields; private SpecificFields specificFields; private List mergedRepositories; private List reversedMergedRepositories; @@ -49,10 +49,10 @@ public class CoatingType { public Map> newCriteriaMap(Object coating) { Map> criteriaMap = new LinkedHashMap<>(8); - for (CoatingField field : fields) { - Object fieldValue = field.getFieldValue(coating); + for (CoatingField coatingField : coatingFields) { + Object fieldValue = coatingField.getFieldValue(coating); if (fieldValue != null) { - CriterionDef criterionDef = field.getCriterionDef(); + CriterionDef criterionDef = coatingField.getCriterionDef(); String belongTo = criterionDef.getBelongTo(); String fieldName = criterionDef.getField(); String operator = criterionDef.getOperator(); diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/MergedRepository.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/MergedRepository.java index cb9eba4a..3a15ca0d 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/MergedRepository.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/MergedRepository.java @@ -36,7 +36,7 @@ public class MergedRepository { private CommonRepository definedRepository; private Map> mergedBindersMap; private CommonRepository executedRepository; - private Integer sequence; + private Integer order; public String getName() { return definedRepository.getEntityDef().getName(); diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/SpecificFields.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/SpecificFields.java index 421213c0..56b581a8 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/SpecificFields.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/entity/SpecificFields.java @@ -34,22 +34,22 @@ public class SpecificFields { private CoatingField pageField; private CoatingField limitField; - public boolean addProperty(CoatingField field) { - String fieldName = field.getName(); + public boolean addProperty(CoatingField coatingField) { + String fieldName = coatingField.getName(); if ("sortBy".equals(fieldName)) { - sortByField = field; + sortByField = coatingField; return true; } else if ("order".equals(fieldName)) { - orderField = field; + orderField = coatingField; return true; } else if ("page".equals(fieldName)) { - pageField = field; + pageField = coatingField; return true; } else if ("limit".equals(fieldName)) { - limitField = field; + limitField = coatingField; return true; } return false; diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java index d61c8e40..3771d764 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/resolver/CoatingTypeResolver.java @@ -80,40 +80,40 @@ public class CoatingTypeResolver { } ExampleDef exampleDef = ExampleDef.fromElement(coatingClass); - List fields = new ArrayList<>(); + List coatingFields = new ArrayList<>(); SpecificFields specificFields = new SpecificFields(); ReflectionUtils.doWithLocalFields(coatingClass, declaredField -> { - CoatingField field = new CoatingField(declaredField); - if (field.isIgnore()) { + CoatingField coatingField = new CoatingField(declaredField); + if (coatingField.isIgnore()) { return; } - if (specificFields.addProperty(field)) { + if (specificFields.addProperty(coatingField)) { return; } - fields.add(field); + coatingFields.add(coatingField); }); - List mergedRepositories = collectRepositories(fields); + List mergedRepositories = matchMergedRepositories(coatingFields); List reversedMergedRepositories = new ArrayList<>(mergedRepositories); Collections.reverse(reversedMergedRepositories); - CoatingType coatingType = new CoatingType(exampleDef, fields, specificFields, mergedRepositories, reversedMergedRepositories); + CoatingType coatingType = new CoatingType(exampleDef, coatingFields, specificFields, mergedRepositories, reversedMergedRepositories); classCoatingTypeMap.put(coatingClass, coatingType); nameCoatingTypeMap.put(coatingClass.getName(), coatingType); } } } - private List collectRepositories(List fields) { + private List matchMergedRepositories(List coatingFields) { MergedRepositoryResolver mergedRepositoryResolver = repository.getMergedRepositoryResolver(); Map mergedRepositoryMap = mergedRepositoryResolver.getMergedRepositoryMap(); Map nameMergedRepositoryMap = mergedRepositoryResolver.getNameMergedRepositoryMap(); Set mergedRepositorySet = new LinkedHashSet<>(); - for (CoatingField field : fields) { - CriterionDef criterionDef = field.getCriterionDef(); + for (CoatingField coatingField : coatingFields) { + CriterionDef criterionDef = coatingField.getCriterionDef(); String belongTo = criterionDef.getBelongTo(); if (!belongTo.startsWith("/")) { @@ -144,7 +144,7 @@ public class CoatingTypeResolver { } List mergedRepositories = new ArrayList<>(mergedRepositorySet); - mergedRepositories.sort(Comparator.comparing(MergedRepository::getSequence)); + mergedRepositories.sort(Comparator.comparing(MergedRepository::getOrder)); return mergedRepositories; } -- Gitee From c1fd255c8d77f7ff198bd0d09b02cd126ec268fc Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 6 Jun 2023 14:38:29 +0800 Subject: [PATCH 40/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coating/impl/DefaultExampleBuilder.java | 17 +++++++++-------- .../core/impl/resolver/BinderResolver.java | 8 +++++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/DefaultExampleBuilder.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/DefaultExampleBuilder.java index e19f6ff4..64336c46 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/DefaultExampleBuilder.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/DefaultExampleBuilder.java @@ -108,22 +108,23 @@ public class DefaultExampleBuilder implements ExampleBuilder { List entities = Collections.emptyList(); if (!example.isEmptyQuery() && example.isDirtyQuery()) { - example.select(new ArrayList<>(binderResolver.getBoundFields())); + example.select(binderResolver.getSelfFields()); entities = executedRepository.selectByExample(context, example); } - List finalEntities = entities; - mergedBindersMap.forEach((relativeAccessPath, binders) -> { + for (Map.Entry> entry : mergedBindersMap.entrySet()) { + String relativeAccessPath = entry.getKey(); + List binders = entry.getValue(); RepoExample targetRepoExample = repoExampleMap.get(relativeAccessPath); if (targetRepoExample != null) { Example targetExample = targetRepoExample.getExample(); - if (finalEntities.isEmpty()) { + if (entities.isEmpty()) { targetExample.setEmptyQuery(true); return; } if (binders.size() == 1) { PropertyBinder binder = binders.get(0); - List fieldValues = binder.collectFieldValues(context, finalEntities); + List fieldValues = binder.collectFieldValues(context, entities); if (!fieldValues.isEmpty()) { String boundName = binder.getBoundName(); if (fieldValues.size() == 1) { @@ -137,8 +138,8 @@ public class DefaultExampleBuilder implements ExampleBuilder { } else { List properties = binders.stream().map(PropertyBinder::getBoundName).collect(Collectors.toList()); - MultiInBuilder builder = new MultiInBuilder(finalEntities.size(), properties); - collectFieldValues(context, finalEntities, binders, builder); + MultiInBuilder builder = new MultiInBuilder(entities.size(), properties); + collectFieldValues(context, entities, binders, builder); if (!builder.isEmpty()) { targetExample.getCriteria().add(builder.build()); } else { @@ -146,7 +147,7 @@ public class DefaultExampleBuilder implements ExampleBuilder { } } } - }); + } }); } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java index 1abeca6c..b9b96b5d 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java @@ -40,6 +40,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.context.ApplicationContext; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -54,7 +55,7 @@ public class BinderResolver { private List propertyBinders; private Map> mergedBindersMap; private boolean simpleRootBinding; - private List boundFields; + private List selfFields; private List contextBinders; private List boundValueBinders; private PropertyBinder boundIdBinder; @@ -72,7 +73,7 @@ public class BinderResolver { propertyBinders = new ArrayList<>(bindingDefs.size()); mergedBindersMap = new LinkedHashMap<>(bindingDefs.size() * 4 / 3 + 1); simpleRootBinding = false; - boundFields = new ArrayList<>(bindingDefs.size()); + selfFields = new ArrayList<>(bindingDefs.size()); contextBinders = new ArrayList<>(bindingDefs.size()); boundValueBinders = new ArrayList<>(bindingDefs.size()); boundIdBinder = null; @@ -99,7 +100,7 @@ public class BinderResolver { List propertyBinders = mergedBindersMap.computeIfAbsent(belongAccessPath, key -> new ArrayList<>(2)); propertyBinders.add(propertyBinder); - boundFields.add(bindingDef.getField()); + selfFields.add(bindingDef.getField()); if (propertyBinder.isSameType()) { if (!"id".equals(field)) { @@ -123,6 +124,7 @@ public class BinderResolver { if (mergedBindersMap.size() == 1 && mergedBindersMap.containsKey("/")) { simpleRootBinding = CollUtil.findOne(mergedBindersMap.get("/"), PropertyBinder::isCollection) == null; } + selfFields = Collections.unmodifiableList(selfFields); } private BindingDef renewBindingDef(String accessPath, BindingDef bindingDef) { -- Gitee From 3b4ab9ce186f1709f22ab5aad053f4b8376dc230 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 6 Jun 2023 15:07:48 +0800 Subject: [PATCH 41/43] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/api/entity/element/EntityEle.java | 5 ----- .../dorive/coating/impl/DefaultExampleBuilder.java | 4 ++-- .../dorive/core/entity/executor/MultiInBuilder.java | 12 ++++++------ .../dorive/core/impl/handler/MultiEntityHandler.java | 4 ++-- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityEle.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityEle.java index c070a810..09d257f8 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityEle.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/element/EntityEle.java @@ -17,7 +17,6 @@ package com.gitee.dorive.api.entity.element; -import cn.hutool.core.util.StrUtil; import com.gitee.dorive.api.annotation.Aggregate; import com.gitee.dorive.api.api.PropProxy; import com.gitee.dorive.api.entity.def.BindingDef; @@ -63,10 +62,6 @@ public abstract class EntityEle { } public String toAlias(String property) { - if (property.contains(",")) { - List aliases = toAliases(StrUtil.splitTrim(property, ",")); - return StrUtil.join(",", aliases); - } return propAliasMap.getOrDefault(property, property); } diff --git a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/DefaultExampleBuilder.java b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/DefaultExampleBuilder.java index 64336c46..a8bf57e7 100644 --- a/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/DefaultExampleBuilder.java +++ b/dorive-coating/src/main/java/com/gitee/dorive/coating/impl/DefaultExampleBuilder.java @@ -137,8 +137,8 @@ public class DefaultExampleBuilder implements ExampleBuilder { } } else { - List properties = binders.stream().map(PropertyBinder::getBoundName).collect(Collectors.toList()); - MultiInBuilder builder = new MultiInBuilder(entities.size(), properties); + List aliases = binders.stream().map(PropertyBinder::getBindAlias).collect(Collectors.toList()); + MultiInBuilder builder = new MultiInBuilder(entities.size(), aliases); collectFieldValues(context, entities, binders, builder); if (!builder.isEmpty()) { targetExample.getCriteria().add(builder.build()); diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/MultiInBuilder.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/MultiInBuilder.java index b335f818..1bf01dbe 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/MultiInBuilder.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/MultiInBuilder.java @@ -30,15 +30,15 @@ import java.util.List; public class MultiInBuilder { private int size; - private List properties; + private List aliases; private int step; private List values; private int cursor; - public MultiInBuilder(int size, List properties) { + public MultiInBuilder(int size, List aliases) { this.size = size; - this.properties = properties; - this.step = properties.size(); + this.aliases = aliases; + this.step = aliases.size(); this.values = new ArrayList<>(size * step); this.cursor = 0; } @@ -69,8 +69,8 @@ public class MultiInBuilder { } public Criterion build() { - String propStr = StrUtil.join(",", properties); - return new Criterion(propStr, Operator.MULTI_IN, this); + String aliasesStr = StrUtil.join(",", aliases); + return new Criterion(aliasesStr, Operator.MULTI_IN, this); } } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java index c319b045..018a3241 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/MultiEntityHandler.java @@ -84,8 +84,8 @@ public class MultiEntityHandler implements EntityHandler { } } else { - List properties = binders.stream().map(AbstractBinder::getFieldName).collect(Collectors.toList()); - MultiInBuilder builder = new MultiInBuilder(entities.size(), properties); + List aliases = binders.stream().map(AbstractBinder::getAlias).collect(Collectors.toList()); + MultiInBuilder builder = new MultiInBuilder(entities.size(), aliases); collectBoundValues(context, entities, entityIndex, binders, builder); if (!builder.isEmpty()) { example.getCriteria().add(builder.build()); -- Gitee From 342f66400c89ce5ff57e83c17e9c3f9d0ab67977 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 6 Jun 2023 16:18:03 +0800 Subject: [PATCH 42/43] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/ref/api/RefObj.java | 8 +++--- .../gitee/dorive/ref/impl/RefInjector.java | 25 ++++++++++++++----- .../com/gitee/dorive/ref/impl/RefObjImpl.java | 8 +++--- .../ref/repository/AbstractRefRepository.java | 8 +----- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java index bcb9f725..4c28909c 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/RefObj.java @@ -24,14 +24,14 @@ public interface RefObj { long select(Context context); - long insertOrUpdate(Context context); + int insertOrUpdate(Context context); - long delete(Context context); + int delete(Context context); long select(Selector selector); - long insertOrUpdate(Selector selector); + int insertOrUpdate(Selector selector); - long delete(Selector selector); + int delete(Selector selector); } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java index 055b7161..f2bc4ae0 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java @@ -21,21 +21,34 @@ import cn.hutool.core.util.ReflectUtil; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.ref.api.Ref; import com.gitee.dorive.ref.repository.AbstractRefRepository; -import lombok.AllArgsConstructor; import lombok.Data; import java.lang.reflect.Field; import java.lang.reflect.Modifier; @Data -@AllArgsConstructor public class RefInjector { private AbstractRefRepository repository; private EntityHandler entityHandler; private Class entityClass; - public Field getField() { + public RefInjector(AbstractRefRepository repository, EntityHandler entityHandler, Class entityClass) { + this.repository = repository; + this.entityHandler = entityHandler; + this.entityClass = entityClass; + inject(); + } + + private void inject() { + Field staticRefField = findStaticRefField(); + if (staticRefField != null) { + Ref ref = newRefImpl(); + doInject(staticRefField, ref); + } + } + + private Field findStaticRefField() { try { Field field = entityClass.getDeclaredField("ref"); return Modifier.isStatic(field.getModifiers()) ? field : null; @@ -44,9 +57,9 @@ public class RefInjector { } return null; } - + @SuppressWarnings("unchecked") - public Ref createRef() { + private Ref newRefImpl() { RefImpl refImpl = new RefImpl((AbstractRefRepository) repository, entityHandler); refImpl.setEntityDef(repository.getEntityDef()); refImpl.setEntityEle(repository.getEntityEle()); @@ -56,7 +69,7 @@ public class RefInjector { return refImpl; } - public void inject(Field field, Ref ref) { + private void doInject(Field field, Ref ref) { ReflectUtil.setFieldValue(null, field, ref); } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java index 03ccc6fc..5fd2bead 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java @@ -42,13 +42,13 @@ public class RefObjImpl implements RefObj { } @Override - public long insertOrUpdate(Context context) { + public int insertOrUpdate(Context context) { AbstractRepository repository = ref.getProxyRepository(); return repository.insertOrUpdate(context, object); } @Override - public long delete(Context context) { + public int delete(Context context) { AbstractRepository repository = ref.getProxyRepository(); return repository.delete(context, object); } @@ -59,12 +59,12 @@ public class RefObjImpl implements RefObj { } @Override - public long insertOrUpdate(Selector selector) { + public int insertOrUpdate(Selector selector) { return insertOrUpdate(new InnerContext(selector)); } @Override - public long delete(Selector selector) { + public int delete(Selector selector) { return delete(new InnerContext(selector)); } diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java index 2757f2c4..0aeed35c 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java @@ -22,17 +22,11 @@ import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.ref.api.SimpleRepository; import com.gitee.dorive.ref.impl.RefInjector; -import java.lang.reflect.Field; - public abstract class AbstractRefRepository extends AbstractCoatingRepository implements SimpleRepository { @Override protected EntityHandler processEntityHandler(EntityHandler entityHandler) { - RefInjector refInjector = new RefInjector(this, entityHandler, getEntityClass()); - Field field = refInjector.getField(); - if (field != null) { - refInjector.inject(field, refInjector.createRef()); - } + new RefInjector(this, entityHandler, getEntityClass()); return entityHandler; } -- Gitee From f429cf72f8d317d73de1233e2d4729a52a9dd3f6 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 6 Jun 2023 17:12:30 +0800 Subject: [PATCH 43/43] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/MybatisPlusRepository.java | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java index 50f81540..94dcacc3 100644 --- a/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java +++ b/dorive-spring-boot-starter/src/main/java/com/gitee/dorive/spring/boot/starter/repository/MybatisPlusRepository.java @@ -80,13 +80,20 @@ public class MybatisPlusRepository extends AbstractRefRepository { } } } - Assert.notNull(pojoClass, "The class of pojo cannot be null! source: {}", mapperClass); TableInfo tableInfo = TableInfoHelper.getTableInfo(pojoClass); - assert tableInfo != null; attachments.put(Keys.TABLE_INFO, tableInfo); + EntityFactory entityFactory = newEntityFactory(entityDef, entityEle, pojoClass, tableInfo); + + Executor executor = new MybatisPlusExecutor(entityDef, entityEle, (BaseMapper) mapper, (Class) pojoClass); + executor = new FactoryExecutor(entityEle, entityFactory, executor); + executor = new AliasExecutor(entityEle, executor); + attachments.put(Keys.ALIAS_EXECUTOR, executor); + return executor; + } + private EntityFactory newEntityFactory(EntityDef entityDef, EntityEle entityEle, Class pojoClass, TableInfo tableInfo) { Class factoryClass = entityDef.getFactory(); EntityFactory entityFactory; if (factoryClass == Object.class) { @@ -99,36 +106,39 @@ public class MybatisPlusRepository extends AbstractRefRepository { defaultEntityFactory.setEntityEle(entityEle); defaultEntityFactory.setPojoClass(pojoClass); - Map propAliasMap = entityEle.getPropAliasMap(); - Map aliasFieldMapping = propAliasMap.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); + Map aliasFieldMapping = newAliasFieldMapping(entityEle); defaultEntityFactory.setAliasFieldMapping(aliasFieldMapping); - String keyColumn = tableInfo.getKeyColumn(); - String keyProperty = tableInfo.getKeyProperty(); - List tableFieldInfos = tableInfo.getFieldList(); + Map fieldPropMapping = newFieldPropMapping(tableInfo, aliasFieldMapping); + defaultEntityFactory.setFieldPropMapping(fieldPropMapping); + } + return entityFactory; + } - Map fieldPropMapping = new LinkedHashMap<>(); - if (StringUtils.isNotBlank(keyColumn) && StringUtils.isNotBlank(keyProperty)) { - String field = aliasFieldMapping.get(keyColumn); - if (field != null) { - fieldPropMapping.put(field, keyProperty); - } + private Map newAliasFieldMapping(EntityEle entityEle) { + Map propAliasMap = entityEle.getPropAliasMap(); + return propAliasMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); + } + + private Map newFieldPropMapping(TableInfo tableInfo, Map aliasFieldMapping) { + String keyColumn = tableInfo.getKeyColumn(); + String keyProperty = tableInfo.getKeyProperty(); + List tableFieldInfos = tableInfo.getFieldList(); + Map fieldPropMapping = new LinkedHashMap<>(); + + if (StringUtils.isNotBlank(keyColumn) && StringUtils.isNotBlank(keyProperty)) { + String field = aliasFieldMapping.get(keyColumn); + if (field != null) { + fieldPropMapping.put(field, keyProperty); } - for (TableFieldInfo tableFieldInfo : tableFieldInfos) { - String field = aliasFieldMapping.get(tableFieldInfo.getColumn()); - if (field != null) { - fieldPropMapping.put(field, tableFieldInfo.getProperty()); - } + } + for (TableFieldInfo tableFieldInfo : tableFieldInfos) { + String field = aliasFieldMapping.get(tableFieldInfo.getColumn()); + if (field != null) { + fieldPropMapping.put(field, tableFieldInfo.getProperty()); } - defaultEntityFactory.setFieldPropMapping(fieldPropMapping); } - - Executor executor = new MybatisPlusExecutor(entityDef, entityEle, (BaseMapper) mapper, (Class) pojoClass); - executor = new FactoryExecutor(entityEle, entityFactory, executor); - executor = new AliasExecutor(entityEle, executor); - attachments.put(Keys.ALIAS_EXECUTOR, executor); - return executor; + return fieldPropMapping; } @Override -- Gitee