From 72d349fd384d649f218b3e35c273806369de3801 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Tue, 7 Jun 2022 23:49:10 +0800 Subject: [PATCH 01/55] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=B8=80=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/spring/domain/core/entity/EntityExample.java | 1 + .../com/gitee/spring/domain/core/entity/EntityPropertyChain.java | 1 + 2 files changed, 2 insertions(+) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityExample.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityExample.java index ea11c699..4044b3c7 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityExample.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityExample.java @@ -8,6 +8,7 @@ import java.util.List; @Data public class EntityExample { + protected boolean emptyQuery = false; protected Object example; protected List columns; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityPropertyChain.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityPropertyChain.java index 89559f17..bc2407aa 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityPropertyChain.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityPropertyChain.java @@ -12,6 +12,7 @@ import java.lang.reflect.Field; @AllArgsConstructor @ToString(exclude = "lastEntityPropertyChain") public class EntityPropertyChain implements EntityProperty { + private EntityPropertyChain lastEntityPropertyChain; private Class lastEntityClass; private Field declaredField; -- Gitee From 3da82e7f927c96ef3523e3ad2e3e13fded98cbe0 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Wed, 8 Jun 2022 16:17:04 +0800 Subject: [PATCH 02/55] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractContextRepository.java | 7 +++- .../repository/AbstractGenericRepository.java | 34 +++++++++++-------- .../core/repository/ConfiguredRepository.java | 19 +++++++++++ 3 files changed, 44 insertions(+), 16 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 88aa23be..eddd2d83 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -71,7 +71,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor } resolveRootRepository(entityClass); - Assert.notNull(rootRepository, "The root repository does not exist!"); + Assert.notNull(rootRepository, "The root repository cannot be null!"); List> superClasses = ReflectUtils.getAllSuperClasses(entityClass, Object.class); superClasses.add(entityClass); superClasses.forEach(clazz -> resolveSubRepositories("/", clazz)); @@ -237,6 +237,11 @@ public abstract class AbstractContextRepository extends AbstractRepositor boundEntityPropertyChain.initialize(); boundEntityPropertyChain.setBoundProperty(true); + List boundEntityPropertyChains = belongConfiguredRepository.getBoundEntityPropertyChains(); + if (!boundEntityPropertyChains.contains(boundEntityPropertyChain)) { + boundEntityPropertyChains.add(boundEntityPropertyChain); + } + bindingColumns.add(StrUtil.toUnderlineCase(fieldAliasAttribute)); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index e83e932e..97b9352a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -27,8 +27,8 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); EntityProperty lastEntityProperty = entityPropertyChain.getLastEntityPropertyChain(); Object lastEntity = lastEntityProperty == null ? rootEntity : lastEntityProperty.getValue(rootEntity); - if (lastEntity != null && isMatchScenes(configuredRepository, boundedContext)) { - EntityExample entityExample = newExampleByContext(configuredRepository, boundedContext, rootEntity); + if (lastEntity != null && isMatchScenes(boundedContext, configuredRepository)) { + EntityExample entityExample = newExampleByContext(boundedContext, configuredRepository, rootEntity); if (entityExample.isDirtyQuery()) { List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); Object entity = convertManyToOneEntity(configuredRepository, entities); @@ -41,7 +41,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR } } - protected boolean isMatchScenes(ConfiguredRepository configuredRepository, BoundedContext boundedContext) { + protected boolean isMatchScenes(BoundedContext boundedContext, ConfiguredRepository configuredRepository) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); String[] sceneAttribute = entityDefinition.getSceneAttribute(); if (sceneAttribute.length == 0) return true; @@ -53,12 +53,12 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR return false; } - protected EntityExample newExampleByContext(ConfiguredRepository configuredRepository, BoundedContext boundedContext, Object rootEntity) { + protected EntityExample newExampleByContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, Object rootEntity) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { - Object boundValue = getBoundValue(bindingDefinition, boundedContext, rootEntity); + Object boundValue = getBoundValue(boundedContext, bindingDefinition, rootEntity); if (boundValue != null) { String fieldAliasAttribute = bindingDefinition.getFieldAliasAttribute(); EntityCriterion entityCriterion = entityMapper.newEqualCriterion(fieldAliasAttribute, boundValue); @@ -68,7 +68,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR return entityExample; } - protected Object getBoundValue(BindingDefinition bindingDefinition, BoundedContext boundedContext, Object rootEntity) { + protected Object getBoundValue(BoundedContext boundedContext, BindingDefinition bindingDefinition, Object rootEntity) { Object boundValue; if (bindingDefinition.isFromContext()) { String bindAttribute = bindingDefinition.getBindAttribute(); @@ -93,20 +93,24 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR @Override @SuppressWarnings("unchecked") public List selectByExample(BoundedContext boundedContext, Object example) { - List entities = rootRepository.selectByExample(boundedContext, example); - entities.forEach(entity -> handleRootEntity(boundedContext, entity)); - return (List) entities; + List rootEntities = rootRepository.selectByExample(boundedContext, example); + handleRootEntities(boundedContext, rootEntities); + return (List) rootEntities; } @Override public T selectPageByExample(BoundedContext boundedContext, Object example, Object page) { T dataPage = rootRepository.selectPageByExample(boundedContext, example, page); EntityMapper entityMapper = rootRepository.getEntityMapper(); - List entities = entityMapper.getDataFromPage(dataPage); - entities.forEach(entity -> handleRootEntity(boundedContext, entity)); + List rootEntities = entityMapper.getDataFromPage(dataPage); + handleRootEntities(boundedContext, rootEntities); return dataPage; } + protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { + rootEntities.forEach(rootEntity -> handleRootEntity(boundedContext, rootEntity)); + } + @Override public int insert(BoundedContext boundedContext, E entity) { Assert.notNull(entity, "The entity cannot be null!"); @@ -115,7 +119,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getOrderedRepositories()) { EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); Object targetEntity = entityPropertyChain == null ? entity : entityPropertyChain.getValue(entity); - if (targetEntity != null && isMatchScenes(configuredRepository, boundedContext)) { + if (targetEntity != null && isMatchScenes(boundedContext, configuredRepository)) { if (targetEntity instanceof Collection) { for (Object eachEntity : (Collection) targetEntity) { setBoundValueByContext(configuredRepository, boundedContext, entity, eachEntity); @@ -136,7 +140,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { if (!bindingDefinition.isBoundId()) { - Object boundValue = getBoundValue(bindingDefinition, boundedContext, rootEntity); + Object boundValue = getBoundValue(boundedContext, bindingDefinition, rootEntity); if (boundValue != null) { String fieldAttribute = bindingDefinition.getFieldAttribute(); BeanUtil.setFieldValue(entity, fieldAttribute, boundValue); @@ -162,7 +166,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getOrderedRepositories()) { EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); Object targetEntity = entityPropertyChain == null ? entity : entityPropertyChain.getValue(entity); - if (targetEntity != null && isMatchScenes(configuredRepository, boundedContext)) { + if (targetEntity != null && isMatchScenes(boundedContext, configuredRepository)) { if (targetEntity instanceof Collection) { for (Object eachEntity : (Collection) targetEntity) { totalCount += configuredRepository.update(boundedContext, eachEntity); @@ -188,7 +192,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getOrderedRepositories()) { EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); Object targetEntity = entityPropertyChain == null ? entity : entityPropertyChain.getValue(entity); - if (targetEntity != null && isMatchScenes(configuredRepository, boundedContext)) { + if (targetEntity != null && isMatchScenes(boundedContext, configuredRepository)) { if (targetEntity instanceof Collection) { for (Object eachEntity : (Collection) targetEntity) { totalCount += configuredRepository.delete(boundedContext, eachEntity); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java index 49e76b69..7cfe2560 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java @@ -2,11 +2,16 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityAssembler; import com.gitee.spring.domain.core.api.EntityMapper; +import com.gitee.spring.domain.core.entity.BoundedContext; import com.gitee.spring.domain.core.entity.EntityDefinition; +import com.gitee.spring.domain.core.entity.EntityExample; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import lombok.Getter; import lombok.Setter; +import java.util.ArrayList; +import java.util.List; + @Getter @Setter public class ConfiguredRepository extends ProxyRepository { @@ -15,6 +20,7 @@ public class ConfiguredRepository extends ProxyRepository { protected EntityDefinition entityDefinition; protected EntityMapper entityMapper; protected EntityAssembler entityAssembler; + protected List boundEntityPropertyChains = new ArrayList<>(); public ConfiguredRepository(EntityPropertyChain entityPropertyChain, EntityDefinition entityDefinition, @@ -34,6 +40,19 @@ public class ConfiguredRepository extends ProxyRepository { this.entityDefinition = configuredRepository.getEntityDefinition(); this.entityMapper = configuredRepository.getEntityMapper(); this.entityAssembler = configuredRepository.getEntityAssembler(); + this.boundEntityPropertyChains = configuredRepository.getBoundEntityPropertyChains(); + } + + @Override + public List selectByExample(BoundedContext boundedContext, Object example) { + example = example instanceof EntityExample ? ((EntityExample) example).buildExample() : example; + return super.selectByExample(boundedContext, example); + } + + @Override + public T selectPageByExample(BoundedContext boundedContext, Object example, Object page) { + example = example instanceof EntityExample ? ((EntityExample) example).buildExample() : example; + return super.selectPageByExample(boundedContext, example, page); } } -- Gitee From 270e424dac53997b72e0652b200bde49bccd1925 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Wed, 8 Jun 2022 19:49:35 +0800 Subject: [PATCH 03/55] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractChainRepository.java | 2 +- .../spring/domain/core/annotation/Binding.java | 4 +--- .../gitee/spring/domain/core/api/Constants.java | 4 +--- .../domain/core/entity/BindingDefinition.java | 3 +-- .../repository/AbstractContextRepository.java | 17 ++++++----------- .../repository/AbstractGenericRepository.java | 4 ++-- 6 files changed, 12 insertions(+), 22 deletions(-) diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java index e4c3752b..317a69ff 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java @@ -88,7 +88,7 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo if (bindingDefinition.isFromContext()) { Object boundValue = boundedContext.get(bindingDefinition.getBindAttribute()); if (boundValue != null) { - EntityCriterion entityCriterion = entityMapper.newEqualCriterion(bindingDefinition.getFieldAliasAttribute(), boundValue); + EntityCriterion entityCriterion = entityMapper.newEqualCriterion(bindingDefinition.getAliasAttribute(), boundValue); entityExample.addCriterion(entityCriterion); } } else { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/annotation/Binding.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/annotation/Binding.java index f1530a9e..fa1a3d21 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/annotation/Binding.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/annotation/Binding.java @@ -11,10 +11,8 @@ public @interface Binding { String field(); - String fieldAlias() default ""; + String alias() default ""; String bind(); - String bindAlias() default ""; - } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/Constants.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/Constants.java index 69bc5a9b..7c762b3a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/Constants.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/Constants.java @@ -14,11 +14,9 @@ public interface Constants { String REPOSITORY_ATTRIBUTE = "repository"; String FIELD_ATTRIBUTE = "field"; - String FIELD_ALIAS_ATTRIBUTE = "fieldAlias"; + String ALIAS_ATTRIBUTE = "alias"; String BIND_ATTRIBUTE = "bind"; - String BIND_ALIAS_ATTRIBUTE = "bindAlias"; String LOCATION_ATTRIBUTE = "location"; - String ALIAS_ATTRIBUTE = "alias"; String OPERATOR_ATTRIBUTE = "operator"; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java index e01d5a90..fa831113 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java @@ -10,9 +10,8 @@ import org.springframework.core.annotation.AnnotationAttributes; public class BindingDefinition { private AnnotationAttributes attributes; private String fieldAttribute; - private String fieldAliasAttribute; + private String aliasAttribute; private String bindAttribute; - private String bindAliasAttribute; private boolean fromContext; private boolean boundId; private String belongAccessPath; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index eddd2d83..1ad26b18 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -204,12 +204,11 @@ public abstract class AbstractContextRepository extends AbstractRepositor AnnotationAttributes bindingAttributes = AnnotationUtils.getAnnotationAttributes( bindingAnnotation, false, false); String fieldAttribute = bindingAttributes.getString(Constants.FIELD_ATTRIBUTE); - String fieldAliasAttribute = bindingAttributes.getString(Constants.FIELD_ALIAS_ATTRIBUTE); + String aliasAttribute = bindingAttributes.getString(Constants.ALIAS_ATTRIBUTE); String bindAttribute = bindingAttributes.getString(Constants.BIND_ATTRIBUTE); - String bindAliasAttribute = bindingAttributes.getString(Constants.BIND_ALIAS_ATTRIBUTE); - if (StringUtils.isBlank(fieldAliasAttribute)) { - fieldAliasAttribute = fieldAttribute; + if (StringUtils.isBlank(aliasAttribute)) { + aliasAttribute = fieldAttribute; } if (bindAttribute.startsWith(".")) { @@ -242,16 +241,12 @@ public abstract class AbstractContextRepository extends AbstractRepositor boundEntityPropertyChains.add(boundEntityPropertyChain); } - bindingColumns.add(StrUtil.toUnderlineCase(fieldAliasAttribute)); + bindingColumns.add(StrUtil.toUnderlineCase(aliasAttribute)); } - - if (StringUtils.isBlank(bindAliasAttribute) && boundFieldName != null) { - bindAliasAttribute = boundFieldName; - } - + BindingDefinition bindingDefinition = new BindingDefinition( bindingAttributes, - fieldAttribute, fieldAliasAttribute, bindAttribute, bindAliasAttribute, + fieldAttribute, aliasAttribute, bindAttribute, isFromContext, isBoundId, belongAccessPath, belongConfiguredRepository, boundFieldName, boundEntityPropertyChain); bindingDefinitions.add(bindingDefinition); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index 97b9352a..88b9cb0b 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -60,8 +60,8 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { Object boundValue = getBoundValue(boundedContext, bindingDefinition, rootEntity); if (boundValue != null) { - String fieldAliasAttribute = bindingDefinition.getFieldAliasAttribute(); - EntityCriterion entityCriterion = entityMapper.newEqualCriterion(fieldAliasAttribute, boundValue); + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValue); entityExample.addCriterion(entityCriterion); } } -- Gitee From 024a109aed5dadde0bc00679308954885ed17237 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Wed, 8 Jun 2022 20:25:50 +0800 Subject: [PATCH 04/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractBatchRepository.java | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java new file mode 100644 index 00000000..9359abe5 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -0,0 +1,94 @@ +package com.gitee.spring.domain.core.repository; + +import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.api.EntityMapper; +import com.gitee.spring.domain.core.entity.*; + +import java.util.*; + +public abstract class AbstractBatchRepository extends AbstractGenericRepository { + + @Override + protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { + + Map> fieldValues = new LinkedHashMap<>(); + + collectBoundValuesAsQueryParams(fieldValues, rootRepository, rootEntities); + for (ConfiguredRepository configuredRepository : subRepositories) { + if (isMatchScenes(boundedContext, configuredRepository)) { + EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); + if (entityExample.isDirtyQuery()) { + List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); + collectBoundValuesAsQueryParams(fieldValues, configuredRepository, entities); + addEntitiesToContext(boundedContext, configuredRepository, entities); + } + } + } + + Set> repositorySet = adaptiveRepositories(rootEntities); + for (AbstractDelegateRepository abstractDelegateRepository : repositorySet) { + for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { + if (isMatchScenes(boundedContext, configuredRepository)) { + EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); + if (entityExample.isDirtyQuery()) { + List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); + collectBoundValuesAsQueryParams(fieldValues, configuredRepository, entities); + addEntitiesToContext(boundedContext, configuredRepository, entities); + } + } + } + } + + super.handleRootEntities(boundedContext, rootEntities); + } + + protected Set> adaptiveRepositories(List rootEntities) { + Set> repositorySet = new LinkedHashSet<>(); + for (Object rootEntity : rootEntities) { + AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); + repositorySet.add(abstractDelegateRepository); + } + return repositorySet; + } + + protected void collectBoundValuesAsQueryParams(Map> fieldValues, + ConfiguredRepository configuredRepository, + List entities) { + for (Object entity : entities) { + List boundEntityPropertyChains = configuredRepository.getBoundEntityPropertyChains(); + if (!boundEntityPropertyChains.isEmpty()) { + for (EntityPropertyChain entityPropertyChain : boundEntityPropertyChains) { + String accessPath = entityPropertyChain.getAccessPath(); + Object boundValue = entityPropertyChain.getValue(entity); + if (boundValue != null) { + List boundValues = fieldValues.computeIfAbsent(accessPath, key -> new ArrayList<>()); + boundValues.add(boundValue); + } + } + } + } + } + + protected EntityExample newExampleByFieldValues(BoundedContext boundedContext, + Map> fieldValues, + ConfiguredRepository configuredRepository) { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + EntityMapper entityMapper = configuredRepository.getEntityMapper(); + EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); + for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { + String bindAttribute = bindingDefinition.getBindAttribute(); + List boundValues = fieldValues.get(bindAttribute); + if (boundValues != null) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); + entityExample.addCriterion(entityCriterion); + } + } + return entityExample; + } + + protected void addEntitiesToContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List entities) { + + } + +} -- Gitee From aa7d8112d3480b9e0d33269525aea020ed7c4c31 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 9 Jun 2022 18:38:32 +0800 Subject: [PATCH 05/55] =?UTF-8?q?=E8=B0=83=E6=95=B4EntityDefinition?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coating/impl/DefaultCoatingAssembler.java | 1 - .../repository/AbstractCoatingRepository.java | 88 +++------- .../domain/core/entity/EntityDefinition.java | 5 + .../repository/AbstractBatchRepository.java | 164 +++++++++--------- .../repository/AbstractContextRepository.java | 68 +++++--- .../AbstractDelegateRepository.java | 10 +- .../core/repository/ConfiguredRepository.java | 2 - 7 files changed, 163 insertions(+), 175 deletions(-) diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/impl/DefaultCoatingAssembler.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/impl/DefaultCoatingAssembler.java index ad447ac6..da520c2f 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/impl/DefaultCoatingAssembler.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/impl/DefaultCoatingAssembler.java @@ -17,7 +17,6 @@ public class DefaultCoatingAssembler implements CoatingAssembler { private CoatingDefinition coatingDefinition; private List availablePropertyDefinitions; - private List repositoryLocations; private List reversedRepositoryLocations; @Override diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java index 57fd30e0..d0fe7b46 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java @@ -120,8 +120,7 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo List repositoryLocations = new ArrayList<>(repositoryLocationMap.values()); checkFieldNames(coatingClass, allPropertyDefinitionMap.keySet(), repositoryLocations); - List reversedRepositoryLocations = new ArrayList<>(repositoryLocations); - Collections.reverse(reversedRepositoryLocations); + Collections.reverse(repositoryLocations); AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(coatingClass, Coating.class); String name = null; @@ -134,7 +133,7 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo CoatingDefinition coatingDefinition = new CoatingDefinition(entityClass, coatingClass, attributes, name, allPropertyDefinitionMap); CoatingAssembler coatingAssembler = new DefaultCoatingAssembler( - coatingDefinition, availablePropertyDefinitions, repositoryLocations, reversedRepositoryLocations); + coatingDefinition, availablePropertyDefinitions, repositoryLocations); classCoatingAssemblerMap.put(coatingClass, coatingAssembler); Assert.isTrue(!nameCoatingAssemblerMap.containsKey(name), "The same coating name cannot exist!"); @@ -172,47 +171,36 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo String parentAccessPath = multiAccessPath.size() > 1 ? StrUtil.join("", multiAccessPath.subList(0, multiAccessPath.size() - 1)) : ""; String prefixAccessPath = StrUtil.join("", multiAccessPath); - collectRepositoryLocationByLocations( - repositoryLocationMap, multiAccessPath, - parentConfiguredRepository, abstractDelegateRepository, locationPropertyDefinitionsMap, - parentAccessPath, prefixAccessPath, rootRepository); - - for (EntityPropertyChain entityPropertyChain : entityPropertyChainMap.values()) { - String accessPath = entityPropertyChain.getAccessPath(); - ConfiguredRepository configuredRepository = configuredRepositoryMap.get(accessPath); - if (configuredRepository != null) { - collectRepositoryLocationByLocations( - repositoryLocationMap, multiAccessPath, - parentConfiguredRepository, abstractDelegateRepository, locationPropertyDefinitionsMap, - parentAccessPath, prefixAccessPath, configuredRepository); + List finalMultiAccessPath = multiAccessPath; + allConfiguredRepositoryMap.forEach((accessPath, configuredRepository) -> { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + + String absoluteAccessPath = prefixAccessPath + entityDefinition.getAccessPath(); + boolean forwardParent = entityDefinition.isRoot() && parentConfiguredRepository != null; + + List propertyDefinitions = new ArrayList<>(); + if (locationPropertyDefinitionsMap.containsKey(absoluteAccessPath)) { + propertyDefinitions.addAll(locationPropertyDefinitionsMap.get(absoluteAccessPath)); } - String fieldName = entityPropertyChain.getFieldName(); - if (fieldPropertyDefinitionMap.containsKey(fieldName) || entityPropertyChain.isBoundProperty()) { - String belongAccessPath = PathUtils.getBelongPath(configuredRepositoryMap.keySet(), accessPath); - ConfiguredRepository belongConfiguredRepository = configuredRepositoryMap.get(belongAccessPath); - if (belongConfiguredRepository != null) { - EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); - String absoluteAccessPath = prefixAccessPath + entityDefinition.getAccessPath(); - boolean forwardParent = entityDefinition.isRoot() && parentConfiguredRepository != null; - - if (!repositoryLocationMap.containsKey(absoluteAccessPath)) { - RepositoryLocation repositoryLocation = new RepositoryLocation( - multiAccessPath, parentAccessPath, prefixAccessPath, absoluteAccessPath, - forwardParent, parentConfiguredRepository, abstractDelegateRepository, belongConfiguredRepository, - new ArrayList<>()); - repositoryLocationMap.put(absoluteAccessPath, repositoryLocation); - } + Set fieldNames = entityDefinition.getFieldNames(); + List boundEntityPropertyChains = entityDefinition.getBoundEntityPropertyChains(); - PropertyDefinition propertyDefinition = fieldPropertyDefinitionMap.get(fieldName); - if (propertyDefinition != null) { - RepositoryLocation repositoryLocation = repositoryLocationMap.get(absoluteAccessPath); - List propertyDefinitions = repositoryLocation.getCollectedPropertyDefinitions(); - propertyDefinitions.add(propertyDefinition); - } + for (String fieldName : fieldNames) { + PropertyDefinition propertyDefinition = fieldPropertyDefinitionMap.get(fieldName); + if (propertyDefinition != null) { + propertyDefinitions.add(propertyDefinition); } } - } + + if (!propertyDefinitions.isEmpty() || !boundEntityPropertyChains.isEmpty()) { + RepositoryLocation repositoryLocation = new RepositoryLocation( + finalMultiAccessPath, parentAccessPath, prefixAccessPath, absoluteAccessPath, + forwardParent, parentConfiguredRepository, abstractDelegateRepository, configuredRepository, + propertyDefinitions); + repositoryLocationMap.put(absoluteAccessPath, repositoryLocation); + } + }); for (ConfiguredRepository configuredRepository : delegateConfiguredRepositories) { multiAccessPath = new ArrayList<>(multiAccessPath); @@ -224,28 +212,6 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo } } - protected void collectRepositoryLocationByLocations(Map repositoryLocationMap, - List multiAccessPath, - ConfiguredRepository parentConfiguredRepository, - AbstractDelegateRepository abstractDelegateRepository, - Map> locationPropertyDefinitionsMap, - String parentAccessPath, - String prefixAccessPath, - ConfiguredRepository configuredRepository) { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - String absoluteAccessPath = prefixAccessPath + entityDefinition.getAccessPath(); - boolean forwardParent = entityDefinition.isRoot() && parentConfiguredRepository != null; - - if (locationPropertyDefinitionsMap.containsKey(absoluteAccessPath)) { - List propertyDefinitions = locationPropertyDefinitionsMap.get(absoluteAccessPath); - RepositoryLocation repositoryLocation = new RepositoryLocation( - multiAccessPath, parentAccessPath, prefixAccessPath, absoluteAccessPath, - forwardParent, parentConfiguredRepository, abstractDelegateRepository, configuredRepository, - propertyDefinitions); - repositoryLocationMap.put(absoluteAccessPath, repositoryLocation); - } - } - protected void checkFieldNames(Class coatingClass, Set fieldNames, List repositoryLocations) { Set newFieldNames = new LinkedHashSet<>(fieldNames); for (RepositoryLocation repositoryLocation : repositoryLocations) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index 9c87570b..38f7257c 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -6,6 +6,8 @@ import org.springframework.core.annotation.AnnotationAttributes; import java.lang.reflect.AnnotatedElement; import java.util.List; +import java.util.Map; +import java.util.Set; @Data @AllArgsConstructor @@ -33,4 +35,7 @@ public class EntityDefinition { private List bindingDefinitions; private BindingDefinition boundIdBindingDefinition; private List bindingColumns; + private Map entityPropertyChainMap; + private Set fieldNames; + private List boundEntityPropertyChains; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 9359abe5..a57e2d63 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -8,87 +8,87 @@ import java.util.*; public abstract class AbstractBatchRepository extends AbstractGenericRepository { - @Override - protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { - - Map> fieldValues = new LinkedHashMap<>(); - - collectBoundValuesAsQueryParams(fieldValues, rootRepository, rootEntities); - for (ConfiguredRepository configuredRepository : subRepositories) { - if (isMatchScenes(boundedContext, configuredRepository)) { - EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); - if (entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); - collectBoundValuesAsQueryParams(fieldValues, configuredRepository, entities); - addEntitiesToContext(boundedContext, configuredRepository, entities); - } - } - } - - Set> repositorySet = adaptiveRepositories(rootEntities); - for (AbstractDelegateRepository abstractDelegateRepository : repositorySet) { - for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { - if (isMatchScenes(boundedContext, configuredRepository)) { - EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); - if (entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); - collectBoundValuesAsQueryParams(fieldValues, configuredRepository, entities); - addEntitiesToContext(boundedContext, configuredRepository, entities); - } - } - } - } - - super.handleRootEntities(boundedContext, rootEntities); - } - - protected Set> adaptiveRepositories(List rootEntities) { - Set> repositorySet = new LinkedHashSet<>(); - for (Object rootEntity : rootEntities) { - AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); - repositorySet.add(abstractDelegateRepository); - } - return repositorySet; - } - - protected void collectBoundValuesAsQueryParams(Map> fieldValues, - ConfiguredRepository configuredRepository, - List entities) { - for (Object entity : entities) { - List boundEntityPropertyChains = configuredRepository.getBoundEntityPropertyChains(); - if (!boundEntityPropertyChains.isEmpty()) { - for (EntityPropertyChain entityPropertyChain : boundEntityPropertyChains) { - String accessPath = entityPropertyChain.getAccessPath(); - Object boundValue = entityPropertyChain.getValue(entity); - if (boundValue != null) { - List boundValues = fieldValues.computeIfAbsent(accessPath, key -> new ArrayList<>()); - boundValues.add(boundValue); - } - } - } - } - } - - protected EntityExample newExampleByFieldValues(BoundedContext boundedContext, - Map> fieldValues, - ConfiguredRepository configuredRepository) { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - EntityMapper entityMapper = configuredRepository.getEntityMapper(); - EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { - String bindAttribute = bindingDefinition.getBindAttribute(); - List boundValues = fieldValues.get(bindAttribute); - if (boundValues != null) { - String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); - entityExample.addCriterion(entityCriterion); - } - } - return entityExample; - } - - protected void addEntitiesToContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List entities) { - - } +// @Override +// protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { +// +// Map> fieldValues = new LinkedHashMap<>(); +// +// collectBoundValuesAsQueryParams(fieldValues, rootRepository, rootEntities); +// for (ConfiguredRepository configuredRepository : subRepositories) { +// if (isMatchScenes(boundedContext, configuredRepository)) { +// EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); +// if (entityExample.isDirtyQuery()) { +// List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); +// collectBoundValuesAsQueryParams(fieldValues, configuredRepository, entities); +// addEntitiesToContext(boundedContext, configuredRepository, entities); +// } +// } +// } +// +// Set> repositorySet = adaptiveRepositories(rootEntities); +// for (AbstractDelegateRepository abstractDelegateRepository : repositorySet) { +// for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { +// if (isMatchScenes(boundedContext, configuredRepository)) { +// EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); +// if (entityExample.isDirtyQuery()) { +// List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); +// collectBoundValuesAsQueryParams(fieldValues, configuredRepository, entities); +// addEntitiesToContext(boundedContext, configuredRepository, entities); +// } +// } +// } +// } +// +// super.handleRootEntities(boundedContext, rootEntities); +// } +// +// protected Set> adaptiveRepositories(List rootEntities) { +// Set> repositorySet = new LinkedHashSet<>(); +// for (Object rootEntity : rootEntities) { +// AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); +// repositorySet.add(abstractDelegateRepository); +// } +// return repositorySet; +// } +// +// protected void collectBoundValuesAsQueryParams(Map> fieldValues, +// ConfiguredRepository configuredRepository, +// List entities) { +// for (Object entity : entities) { +// List boundEntityPropertyChains = configuredRepository.getBoundEntityPropertyChains(); +// if (!boundEntityPropertyChains.isEmpty()) { +// for (EntityPropertyChain entityPropertyChain : boundEntityPropertyChains) { +// String accessPath = entityPropertyChain.getAccessPath(); +// Object boundValue = entityPropertyChain.getValue(entity); +// if (boundValue != null) { +// List boundValues = fieldValues.computeIfAbsent(accessPath, key -> new ArrayList<>()); +// boundValues.add(boundValue); +// } +// } +// } +// } +// } +// +// protected EntityExample newExampleByFieldValues(BoundedContext boundedContext, +// Map> fieldValues, +// ConfiguredRepository configuredRepository) { +// EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); +// EntityMapper entityMapper = configuredRepository.getEntityMapper(); +// EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); +// for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { +// String bindAttribute = bindingDefinition.getBindAttribute(); +// List boundValues = fieldValues.get(bindAttribute); +// if (boundValues != null) { +// String aliasAttribute = bindingDefinition.getAliasAttribute(); +// EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); +// entityExample.addCriterion(entityCriterion); +// } +// } +// return entityExample; +// } +// +// protected void addEntitiesToContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List entities) { +// +// } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 1ad26b18..8314ed8d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -42,8 +42,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor protected AnnotationAttributes attributes; protected String name; - protected Map entityPropertyChainMap = new LinkedHashMap<>(); - protected Map configuredRepositoryMap = new LinkedHashMap<>(); + protected Map allEntityPropertyChainMap = new LinkedHashMap<>(); + protected Map allConfiguredRepositoryMap = new LinkedHashMap<>(); protected ConfiguredRepository rootRepository; protected List subRepositories = new ArrayList<>(); @@ -76,7 +76,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor superClasses.add(entityClass); superClasses.forEach(clazz -> resolveSubRepositories("/", clazz)); - orderedRepositories.sort(Comparator.comparingInt(configuredRepository -> configuredRepository.getEntityDefinition().getOrderAttribute())); + orderedRepositories.sort(Comparator.comparingInt( + configuredRepository -> configuredRepository.getEntityDefinition().getOrderAttribute())); } protected void resolveRootRepository(Class entityClass) { @@ -89,7 +90,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor entityClass, entityClass, null, attributes, bindingAnnotations); - configuredRepositoryMap.put("/", configuredRepository); + allConfiguredRepositoryMap.put("/", configuredRepository); rootRepository = configuredRepository; orderedRepositories.add(configuredRepository); } @@ -108,9 +109,22 @@ public abstract class AbstractContextRepository extends AbstractRepositor fieldGenericEntityClass = (Class) actualTypeArgument; } + String belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), fieldAccessPath); + ConfiguredRepository belongConfiguredRepository = allConfiguredRepositoryMap.get(belongAccessPath); + Assert.notNull(belongConfiguredRepository, "No belong repository found!"); + EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); + + Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); + EntityPropertyChain relativeEntityPropertyChain = newEntityPropertyChain( + entityPropertyChainMap, entityClass, declaredField, fieldAccessPath, fieldEntityClass, fieldName); + entityPropertyChainMap.put(fieldAccessPath, relativeEntityPropertyChain); + + Set fieldNames = entityDefinition.getFieldNames(); + fieldNames.add(fieldName); + EntityPropertyChain entityPropertyChain = newEntityPropertyChain( - entityClass, declaredField, fieldAccessPath, fieldEntityClass, fieldName); - entityPropertyChainMap.put(fieldAccessPath, entityPropertyChain); + allEntityPropertyChainMap, entityClass, declaredField, fieldAccessPath, fieldEntityClass, fieldName); + allEntityPropertyChainMap.put(fieldAccessPath, entityPropertyChain); AnnotationAttributes fieldAttributes = AnnotatedElementUtils.getMergedAnnotationAttributes(declaredField, Entity.class); if (fieldAttributes != null) { @@ -122,7 +136,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor fieldEntityClass, fieldGenericEntityClass, fieldName, fieldAttributes, fieldBindingAnnotations); - configuredRepositoryMap.put(fieldAccessPath, configuredRepository); + allConfiguredRepositoryMap.put(fieldAccessPath, configuredRepository); subRepositories.add(configuredRepository); orderedRepositories.add(configuredRepository); } @@ -133,8 +147,12 @@ public abstract class AbstractContextRepository extends AbstractRepositor }); } - protected EntityPropertyChain newEntityPropertyChain(Class lastEntityClass, Field declaredField, - String accessPath, Class entityClass, String fieldName) { + protected EntityPropertyChain newEntityPropertyChain(Map entityPropertyChainMap, + Class lastEntityClass, + Field declaredField, + String accessPath, + Class entityClass, + String fieldName) { String lastAccessPath = PathUtils.getLastAccessPath(accessPath); EntityPropertyChain lastEntityPropertyChain = entityPropertyChainMap.get(lastAccessPath); return new EntityPropertyChain(lastEntityPropertyChain, lastEntityClass, declaredField, @@ -203,6 +221,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor for (Binding bindingAnnotation : bindingAnnotations) { AnnotationAttributes bindingAttributes = AnnotationUtils.getAnnotationAttributes( bindingAnnotation, false, false); + String fieldAttribute = bindingAttributes.getString(Constants.FIELD_ATTRIBUTE); String aliasAttribute = bindingAttributes.getString(Constants.ALIAS_ATTRIBUTE); String bindAttribute = bindingAttributes.getString(Constants.BIND_ATTRIBUTE); @@ -225,30 +244,32 @@ public abstract class AbstractContextRepository extends AbstractRepositor EntityPropertyChain boundEntityPropertyChain = null; if (!isFromContext) { - belongAccessPath = PathUtils.getBelongPath(configuredRepositoryMap.keySet(), bindAttribute); - belongConfiguredRepository = configuredRepositoryMap.get(belongAccessPath); + belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), bindAttribute); + belongConfiguredRepository = allConfiguredRepositoryMap.get(belongAccessPath); Assert.notNull(belongConfiguredRepository, "No belong repository found!"); boundFieldName = PathUtils.getFieldName(bindAttribute); - boundEntityPropertyChain = entityPropertyChainMap.get(bindAttribute); + boundEntityPropertyChain = allEntityPropertyChainMap.get(bindAttribute); Assert.notNull(boundEntityPropertyChain, "Bound path not available!"); boundEntityPropertyChain.initialize(); boundEntityPropertyChain.setBoundProperty(true); - List boundEntityPropertyChains = belongConfiguredRepository.getBoundEntityPropertyChains(); - if (!boundEntityPropertyChains.contains(boundEntityPropertyChain)) { - boundEntityPropertyChains.add(boundEntityPropertyChain); - } - bindingColumns.add(StrUtil.toUnderlineCase(aliasAttribute)); + + EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); + Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); + List boundEntityPropertyChains = entityDefinition.getBoundEntityPropertyChains(); + EntityPropertyChain relativeEntityPropertyChain = entityPropertyChainMap.get(bindAttribute); + if (!boundEntityPropertyChains.contains(relativeEntityPropertyChain)) { + boundEntityPropertyChains.add(relativeEntityPropertyChain); + } } - + BindingDefinition bindingDefinition = new BindingDefinition( - bindingAttributes, - fieldAttribute, aliasAttribute, bindAttribute, - isFromContext, isBoundId, - belongAccessPath, belongConfiguredRepository, boundFieldName, boundEntityPropertyChain); + bindingAttributes, fieldAttribute, aliasAttribute, bindAttribute, + isFromContext, isBoundId, belongAccessPath, belongConfiguredRepository, + boundFieldName, boundEntityPropertyChain); bindingDefinitions.add(bindingDefinition); if (isBoundId) { @@ -265,7 +286,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor entityClass, isCollection, genericEntityClass, fieldName, attributes, sceneAttribute, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, - orderAttribute, bindingDefinitions, boundIdBindingDefinition, bindingColumns); + orderAttribute, bindingDefinitions, boundIdBindingDefinition, bindingColumns, + new LinkedHashMap<>(), new LinkedHashSet<>(), new ArrayList<>()); EntityMapper entityMapper = newEntityMapper(entityDefinition); if (mapAsExample) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java index 324b135d..5a168f4a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java @@ -2,7 +2,6 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.entity.EntityPropertyChain; -import java.lang.reflect.Field; import java.util.*; public abstract class AbstractDelegateRepository extends AbstractContextRepository { @@ -11,11 +10,10 @@ public abstract class AbstractDelegateRepository extends AbstractContextR protected List delegateConfiguredRepositories = new ArrayList<>(); @Override - protected EntityPropertyChain newEntityPropertyChain(Class lastEntityClass, Field declaredField, - String accessPath, Class entityClass, String fieldName) { - EntityPropertyChain entityPropertyChain = super.newEntityPropertyChain(lastEntityClass, declaredField, accessPath, entityClass, fieldName); - fieldEntityPropertyChainMap.putIfAbsent(fieldName, entityPropertyChain); - return entityPropertyChain; + public void afterPropertiesSet() throws Exception { + super.afterPropertiesSet(); + allEntityPropertyChainMap.values().forEach(entityPropertyChain -> + fieldEntityPropertyChainMap.putIfAbsent(entityPropertyChain.getFieldName(), entityPropertyChain)); } @Override diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java index 7cfe2560..6ca7012d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java @@ -20,7 +20,6 @@ public class ConfiguredRepository extends ProxyRepository { protected EntityDefinition entityDefinition; protected EntityMapper entityMapper; protected EntityAssembler entityAssembler; - protected List boundEntityPropertyChains = new ArrayList<>(); public ConfiguredRepository(EntityPropertyChain entityPropertyChain, EntityDefinition entityDefinition, @@ -40,7 +39,6 @@ public class ConfiguredRepository extends ProxyRepository { this.entityDefinition = configuredRepository.getEntityDefinition(); this.entityMapper = configuredRepository.getEntityMapper(); this.entityAssembler = configuredRepository.getEntityAssembler(); - this.boundEntityPropertyChains = configuredRepository.getBoundEntityPropertyChains(); } @Override -- Gitee From c93d4bdde6840fa5def7f74d9062d904eea885bf Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Thu, 9 Jun 2022 23:50:10 +0800 Subject: [PATCH 06/55] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E4=B8=80=E9=83=A8?= =?UTF-8?q?=E5=88=86=E9=BB=98=E8=AE=A4=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractBatchRepository.java | 139 +++++++----------- .../repository/AbstractContextRepository.java | 3 +- 2 files changed, 59 insertions(+), 83 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index a57e2d63..4920b6a8 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -8,87 +8,62 @@ import java.util.*; public abstract class AbstractBatchRepository extends AbstractGenericRepository { -// @Override -// protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { -// -// Map> fieldValues = new LinkedHashMap<>(); -// -// collectBoundValuesAsQueryParams(fieldValues, rootRepository, rootEntities); -// for (ConfiguredRepository configuredRepository : subRepositories) { -// if (isMatchScenes(boundedContext, configuredRepository)) { -// EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); -// if (entityExample.isDirtyQuery()) { -// List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); -// collectBoundValuesAsQueryParams(fieldValues, configuredRepository, entities); -// addEntitiesToContext(boundedContext, configuredRepository, entities); -// } -// } -// } -// -// Set> repositorySet = adaptiveRepositories(rootEntities); -// for (AbstractDelegateRepository abstractDelegateRepository : repositorySet) { -// for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { -// if (isMatchScenes(boundedContext, configuredRepository)) { -// EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); -// if (entityExample.isDirtyQuery()) { -// List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); -// collectBoundValuesAsQueryParams(fieldValues, configuredRepository, entities); -// addEntitiesToContext(boundedContext, configuredRepository, entities); -// } -// } -// } -// } -// -// super.handleRootEntities(boundedContext, rootEntities); -// } -// -// protected Set> adaptiveRepositories(List rootEntities) { -// Set> repositorySet = new LinkedHashSet<>(); -// for (Object rootEntity : rootEntities) { -// AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); -// repositorySet.add(abstractDelegateRepository); -// } -// return repositorySet; -// } -// -// protected void collectBoundValuesAsQueryParams(Map> fieldValues, -// ConfiguredRepository configuredRepository, -// List entities) { -// for (Object entity : entities) { -// List boundEntityPropertyChains = configuredRepository.getBoundEntityPropertyChains(); -// if (!boundEntityPropertyChains.isEmpty()) { -// for (EntityPropertyChain entityPropertyChain : boundEntityPropertyChains) { -// String accessPath = entityPropertyChain.getAccessPath(); -// Object boundValue = entityPropertyChain.getValue(entity); -// if (boundValue != null) { -// List boundValues = fieldValues.computeIfAbsent(accessPath, key -> new ArrayList<>()); -// boundValues.add(boundValue); -// } -// } -// } -// } -// } -// -// protected EntityExample newExampleByFieldValues(BoundedContext boundedContext, -// Map> fieldValues, -// ConfiguredRepository configuredRepository) { -// EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); -// EntityMapper entityMapper = configuredRepository.getEntityMapper(); -// EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); -// for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { -// String bindAttribute = bindingDefinition.getBindAttribute(); -// List boundValues = fieldValues.get(bindAttribute); -// if (boundValues != null) { -// String aliasAttribute = bindingDefinition.getAliasAttribute(); -// EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); -// entityExample.addCriterion(entityCriterion); -// } -// } -// return entityExample; -// } -// -// protected void addEntitiesToContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List entities) { -// -// } + @Override + protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { + Map> fieldValues = new LinkedHashMap<>(); + collectFieldValues(fieldValues, rootRepository, rootEntities); + + for (ConfiguredRepository configuredRepository : subRepositories) { + if (isMatchScenes(boundedContext, configuredRepository)) { + EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); + if (entityExample.isDirtyQuery()) { + List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); + collectFieldValues(fieldValues, configuredRepository, entities); + addEntitiesToContext(boundedContext, configuredRepository, entities); + } + } + } + + super.handleRootEntities(boundedContext, rootEntities); + } + + protected EntityExample newExampleByFieldValues(BoundedContext boundedContext, + Map> fieldValues, + ConfiguredRepository configuredRepository) { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + EntityMapper entityMapper = configuredRepository.getEntityMapper(); + EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); + for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { + String bindAttribute = bindingDefinition.getBindAttribute(); + List boundValues = fieldValues.get(bindAttribute); + if (boundValues != null) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); + entityExample.addCriterion(entityCriterion); + } + } + return entityExample; + } + + protected void collectFieldValues(Map> fieldValues, + ConfiguredRepository configuredRepository, + List entities) { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + List boundEntityPropertyChains = entityDefinition.getBoundEntityPropertyChains(); + for (EntityPropertyChain entityPropertyChain : boundEntityPropertyChains) { + String accessPath = entityPropertyChain.getAccessPath(); + for (Object entity : entities) { + Object boundValue = entityPropertyChain.getValue(entity); + if (boundValue != null) { + List boundValues = fieldValues.computeIfAbsent(accessPath, key -> new ArrayList<>()); + boundValues.add(boundValue); + } + } + } + } + + protected void addEntitiesToContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List entities) { + + } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 8314ed8d..1022af1b 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -303,7 +303,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor } ConfiguredRepository configuredRepository = new ConfiguredRepository( - entityPropertyChain, entityDefinition, entityMapper, entityAssembler, (AbstractRepository) repository); + entityPropertyChain, entityDefinition, entityMapper, entityAssembler, + (AbstractRepository) repository); return processConfiguredRepository(configuredRepository); } -- Gitee From 62f52decd40465715fc90462990dff3555dc06b5 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 10 Jun 2022 11:03:21 +0800 Subject: [PATCH 07/55] =?UTF-8?q?=E8=B0=83=E6=95=B4EntityDefinition?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/spring/domain/core/entity/EntityDefinition.java | 3 ++- .../domain/core/repository/AbstractContextRepository.java | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index 38f7257c..a634bc1d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -35,7 +35,8 @@ public class EntityDefinition { private List bindingDefinitions; private BindingDefinition boundIdBindingDefinition; private List bindingColumns; - private Map entityPropertyChainMap; private Set fieldNames; + private Map entityPropertyChainMap; + private List fieldEntityPropertyChains; private List boundEntityPropertyChains; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 1022af1b..05af45ef 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -114,14 +114,14 @@ public abstract class AbstractContextRepository extends AbstractRepositor Assert.notNull(belongConfiguredRepository, "No belong repository found!"); EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); + Set fieldNames = entityDefinition.getFieldNames(); + fieldNames.add(fieldName); + Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); EntityPropertyChain relativeEntityPropertyChain = newEntityPropertyChain( entityPropertyChainMap, entityClass, declaredField, fieldAccessPath, fieldEntityClass, fieldName); entityPropertyChainMap.put(fieldAccessPath, relativeEntityPropertyChain); - Set fieldNames = entityDefinition.getFieldNames(); - fieldNames.add(fieldName); - EntityPropertyChain entityPropertyChain = newEntityPropertyChain( allEntityPropertyChainMap, entityClass, declaredField, fieldAccessPath, fieldEntityClass, fieldName); allEntityPropertyChainMap.put(fieldAccessPath, entityPropertyChain); @@ -287,7 +287,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor attributes, sceneAttribute, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, bindingDefinitions, boundIdBindingDefinition, bindingColumns, - new LinkedHashMap<>(), new LinkedHashSet<>(), new ArrayList<>()); + new LinkedHashSet<>(), new LinkedHashMap<>(), new ArrayList<>(), new ArrayList<>()); EntityMapper entityMapper = newEntityMapper(entityDefinition); if (mapAsExample) { -- Gitee From b1177a8b1270583a297c38235da56e9db6da8199 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 10 Jun 2022 13:18:09 +0800 Subject: [PATCH 08/55] =?UTF-8?q?=E5=A4=A7=E5=B9=85=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/entity/EntityPropertyChain.java | 18 ++- .../repository/AbstractContextRepository.java | 152 +++++++++--------- 2 files changed, 96 insertions(+), 74 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityPropertyChain.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityPropertyChain.java index bc2407aa..bb8d8277 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityPropertyChain.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityPropertyChain.java @@ -15,12 +15,26 @@ public class EntityPropertyChain implements EntityProperty { private EntityPropertyChain lastEntityPropertyChain; private Class lastEntityClass; - private Field declaredField; private String accessPath; + private Field declaredField; private Class entityClass; + private boolean collection; + private Class genericEntityClass; private String fieldName; private EntityProperty entityProperty; - private boolean boundProperty; + + public EntityPropertyChain(EntityPropertyChain lastEntityPropertyChain, + EntityPropertyChain entityPropertyChain) { + this.lastEntityPropertyChain = lastEntityPropertyChain; + this.lastEntityClass = entityPropertyChain.getLastEntityClass(); + this.accessPath = entityPropertyChain.getAccessPath(); + this.declaredField = entityPropertyChain.getDeclaredField(); + this.entityClass = entityPropertyChain.getEntityClass(); + this.collection = entityPropertyChain.isCollection(); + this.genericEntityClass = entityPropertyChain.getGenericEntityClass(); + this.fieldName = entityPropertyChain.getFieldName(); + this.entityProperty = entityPropertyChain.getEntityProperty(); + } public void initialize() { if (entityProperty == null) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 05af45ef..032061a0 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -29,6 +29,7 @@ import org.springframework.util.ReflectionUtils; import java.lang.reflect.*; import java.util.*; +import java.util.stream.Collectors; @Data @EqualsAndHashCode(callSuper = false) @@ -70,106 +71,99 @@ public abstract class AbstractContextRepository extends AbstractRepositor name = StrUtil.lowerFirst(entityClass.getSimpleName()); } - resolveRootRepository(entityClass); - Assert.notNull(rootRepository, "The root repository cannot be null!"); List> superClasses = ReflectUtils.getAllSuperClasses(entityClass, Object.class); superClasses.add(entityClass); - superClasses.forEach(clazz -> resolveSubRepositories("/", clazz)); + superClasses.forEach(clazz -> resolveEntityPropertyChains("", clazz)); + + Map annotatedElementMap = new LinkedHashMap<>(); + annotatedElementMap.put("/", entityClass); + allEntityPropertyChainMap.values().forEach(entityPropertyChain -> + annotatedElementMap.put(entityPropertyChain.getAccessPath(), entityPropertyChain.getDeclaredField())); + resolveRepositories(annotatedElementMap); orderedRepositories.sort(Comparator.comparingInt( configuredRepository -> configuredRepository.getEntityDefinition().getOrderAttribute())); } - protected void resolveRootRepository(Class entityClass) { - AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(entityClass, Entity.class); - if (attributes != null) { - Set bindingAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(entityClass, Binding.class); - - ConfiguredRepository configuredRepository = newConfiguredRepository( - "/", entityClass, null, - entityClass, entityClass, null, - attributes, bindingAnnotations); - - allConfiguredRepositoryMap.put("/", configuredRepository); - rootRepository = configuredRepository; - orderedRepositories.add(configuredRepository); - } - } - - protected void resolveSubRepositories(String accessPath, Class entityClass) { + protected void resolveEntityPropertyChains(String accessPath, Class entityClass) { ReflectionUtils.doWithLocalFields(entityClass, declaredField -> { - String fieldName = declaredField.getName(); - String fieldAccessPath = "/".equals(accessPath) ? accessPath + fieldName : accessPath + "/" + fieldName; - Class fieldEntityClass = declaredField.getType(); + boolean isCollection = false; Class fieldGenericEntityClass = fieldEntityClass; + String fieldName = declaredField.getName(); + if (Collection.class.isAssignableFrom(fieldEntityClass)) { + isCollection = true; ParameterizedType parameterizedType = (ParameterizedType) declaredField.getGenericType(); Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0]; fieldGenericEntityClass = (Class) actualTypeArgument; } - String belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), fieldAccessPath); - ConfiguredRepository belongConfiguredRepository = allConfiguredRepositoryMap.get(belongAccessPath); - Assert.notNull(belongConfiguredRepository, "No belong repository found!"); - EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); - - Set fieldNames = entityDefinition.getFieldNames(); - fieldNames.add(fieldName); - - Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); - EntityPropertyChain relativeEntityPropertyChain = newEntityPropertyChain( - entityPropertyChainMap, entityClass, declaredField, fieldAccessPath, fieldEntityClass, fieldName); - entityPropertyChainMap.put(fieldAccessPath, relativeEntityPropertyChain); + EntityPropertyChain lastEntityPropertyChain = allEntityPropertyChainMap.get(accessPath); + String fieldAccessPath = accessPath + "/" + fieldName; - EntityPropertyChain entityPropertyChain = newEntityPropertyChain( - allEntityPropertyChainMap, entityClass, declaredField, fieldAccessPath, fieldEntityClass, fieldName); + EntityPropertyChain entityPropertyChain = new EntityPropertyChain( + lastEntityPropertyChain, entityClass, fieldAccessPath, declaredField, + fieldEntityClass, isCollection, fieldGenericEntityClass, fieldName, null); allEntityPropertyChainMap.put(fieldAccessPath, entityPropertyChain); - AnnotationAttributes fieldAttributes = AnnotatedElementUtils.getMergedAnnotationAttributes(declaredField, Entity.class); - if (fieldAttributes != null) { - entityPropertyChain.initialize(); - Set fieldBindingAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(declaredField, Binding.class); - - ConfiguredRepository configuredRepository = newConfiguredRepository( - fieldAccessPath, declaredField, entityPropertyChain, - fieldEntityClass, fieldGenericEntityClass, fieldName, - fieldAttributes, fieldBindingAnnotations); - - allConfiguredRepositoryMap.put(fieldAccessPath, configuredRepository); - subRepositories.add(configuredRepository); - orderedRepositories.add(configuredRepository); - } - if (!filterEntityClass(fieldEntityClass)) { - resolveSubRepositories(fieldAccessPath, fieldEntityClass); + resolveEntityPropertyChains(fieldAccessPath, fieldEntityClass); } }); } - protected EntityPropertyChain newEntityPropertyChain(Map entityPropertyChainMap, - Class lastEntityClass, - Field declaredField, - String accessPath, - Class entityClass, - String fieldName) { - String lastAccessPath = PathUtils.getLastAccessPath(accessPath); - EntityPropertyChain lastEntityPropertyChain = entityPropertyChainMap.get(lastAccessPath); - return new EntityPropertyChain(lastEntityPropertyChain, lastEntityClass, declaredField, - accessPath, entityClass, fieldName, null, false); + protected boolean filterEntityClass(Class entityClass) { + String className = entityClass.getName(); + return className.startsWith("java.lang.") || className.startsWith("java.util."); + } + + protected void resolveRepositories(Map annotatedElementMap) { + annotatedElementMap.forEach((accessPath, annotatedElement) -> { + AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(annotatedElement, Entity.class); + Set bindingAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(annotatedElement, Binding.class); + if (attributes != null) { + ConfiguredRepository configuredRepository; + boolean isRoot = "/".equals(accessPath); + if (isRoot) { + configuredRepository = newConfiguredRepository( + true, "/", annotatedElement, null, + entityClass, false, entityClass, null, + attributes, bindingAnnotations); + rootRepository = configuredRepository; + + } else { + EntityPropertyChain entityPropertyChain = allEntityPropertyChainMap.get(accessPath); + Class entityClass = entityPropertyChain.getEntityClass(); + boolean isCollection = entityPropertyChain.isCollection(); + Class genericEntityClass = entityPropertyChain.getGenericEntityClass(); + String fieldName = entityPropertyChain.getFieldName(); + + entityPropertyChain.initialize(); + + configuredRepository = newConfiguredRepository( + false, accessPath, annotatedElement, entityPropertyChain, + entityClass, isCollection, genericEntityClass, fieldName, + attributes, bindingAnnotations); + subRepositories.add(configuredRepository); + } + allConfiguredRepositoryMap.put(accessPath, configuredRepository); + orderedRepositories.add(configuredRepository); + } + }); } @SuppressWarnings("unchecked") - protected ConfiguredRepository newConfiguredRepository(String accessPath, + protected ConfiguredRepository newConfiguredRepository(boolean isRoot, + String accessPath, AnnotatedElement annotatedElement, EntityPropertyChain entityPropertyChain, Class entityClass, + boolean isCollection, Class genericEntityClass, String fieldName, AnnotationAttributes attributes, Set bindingAnnotations) { - boolean isRoot = entityPropertyChain == null; - boolean isCollection = Collection.class.isAssignableFrom(entityClass); String[] sceneAttribute = attributes.getStringArray(Constants.SCENE_ATTRIBUTE); @@ -253,7 +247,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor Assert.notNull(boundEntityPropertyChain, "Bound path not available!"); boundEntityPropertyChain.initialize(); - boundEntityPropertyChain.setBoundProperty(true); bindingColumns.add(StrUtil.toUnderlineCase(aliasAttribute)); @@ -309,12 +302,27 @@ public abstract class AbstractContextRepository extends AbstractRepositor return processConfiguredRepository(configuredRepository); } - protected boolean filterEntityClass(Class entityClass) { - String className = entityClass.getName(); - return className.startsWith("java.lang.") || className.startsWith("java.util."); - } - protected ConfiguredRepository processConfiguredRepository(ConfiguredRepository configuredRepository) { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + Set fieldNames = entityDefinition.getFieldNames(); + Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); + + String prefixAccessPath = entityDefinition.getAccessPath() + "/"; + List accessPaths = allEntityPropertyChainMap.keySet().stream() + .filter(key -> key.startsWith(prefixAccessPath)).collect(Collectors.toList()); + + for (String accessPath : accessPaths) { + String lastAccessPath = PathUtils.getLastAccessPath(accessPath); + EntityPropertyChain lastEntityPropertyChain = entityPropertyChainMap.get(lastAccessPath); + EntityPropertyChain entityPropertyChain = entityPropertyChainMap.get(accessPath); + + fieldNames.add(entityPropertyChain.getFieldName()); + + EntityPropertyChain relativeEntityPropertyChain = new EntityPropertyChain( + lastEntityPropertyChain, entityPropertyChain); + entityPropertyChainMap.put(accessPath, relativeEntityPropertyChain); + } + return configuredRepository; } -- Gitee From c9822a39996cecfdb0f8ec2daa22f925b96e20ea Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 10 Jun 2022 13:23:22 +0800 Subject: [PATCH 09/55] =?UTF-8?q?=E5=A4=A7=E5=B9=85=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractContextRepository.java | 64 +++++++++---------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 032061a0..9b0e42eb 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -79,7 +79,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor annotatedElementMap.put("/", entityClass); allEntityPropertyChainMap.values().forEach(entityPropertyChain -> annotatedElementMap.put(entityPropertyChain.getAccessPath(), entityPropertyChain.getDeclaredField())); - resolveRepositories(annotatedElementMap); + annotatedElementMap.forEach(this::resolveRepository); orderedRepositories.sort(Comparator.comparingInt( configuredRepository -> configuredRepository.getEntityDefinition().getOrderAttribute())); @@ -118,39 +118,37 @@ public abstract class AbstractContextRepository extends AbstractRepositor return className.startsWith("java.lang.") || className.startsWith("java.util."); } - protected void resolveRepositories(Map annotatedElementMap) { - annotatedElementMap.forEach((accessPath, annotatedElement) -> { - AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(annotatedElement, Entity.class); - Set bindingAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(annotatedElement, Binding.class); - if (attributes != null) { - ConfiguredRepository configuredRepository; - boolean isRoot = "/".equals(accessPath); - if (isRoot) { - configuredRepository = newConfiguredRepository( - true, "/", annotatedElement, null, - entityClass, false, entityClass, null, - attributes, bindingAnnotations); - rootRepository = configuredRepository; - - } else { - EntityPropertyChain entityPropertyChain = allEntityPropertyChainMap.get(accessPath); - Class entityClass = entityPropertyChain.getEntityClass(); - boolean isCollection = entityPropertyChain.isCollection(); - Class genericEntityClass = entityPropertyChain.getGenericEntityClass(); - String fieldName = entityPropertyChain.getFieldName(); - - entityPropertyChain.initialize(); - - configuredRepository = newConfiguredRepository( - false, accessPath, annotatedElement, entityPropertyChain, - entityClass, isCollection, genericEntityClass, fieldName, - attributes, bindingAnnotations); - subRepositories.add(configuredRepository); - } - allConfiguredRepositoryMap.put(accessPath, configuredRepository); - orderedRepositories.add(configuredRepository); + protected void resolveRepository(String accessPath, AnnotatedElement annotatedElement) { + AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(annotatedElement, Entity.class); + Set bindingAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(annotatedElement, Binding.class); + if (attributes != null) { + ConfiguredRepository configuredRepository; + boolean isRoot = "/".equals(accessPath); + if (isRoot) { + configuredRepository = newConfiguredRepository( + true, "/", annotatedElement, null, + entityClass, false, entityClass, null, + attributes, bindingAnnotations); + rootRepository = configuredRepository; + + } else { + EntityPropertyChain entityPropertyChain = allEntityPropertyChainMap.get(accessPath); + Class entityClass = entityPropertyChain.getEntityClass(); + boolean isCollection = entityPropertyChain.isCollection(); + Class genericEntityClass = entityPropertyChain.getGenericEntityClass(); + String fieldName = entityPropertyChain.getFieldName(); + + entityPropertyChain.initialize(); + + configuredRepository = newConfiguredRepository( + false, accessPath, annotatedElement, entityPropertyChain, + entityClass, isCollection, genericEntityClass, fieldName, + attributes, bindingAnnotations); + subRepositories.add(configuredRepository); } - }); + allConfiguredRepositoryMap.put(accessPath, configuredRepository); + orderedRepositories.add(configuredRepository); + } } @SuppressWarnings("unchecked") -- Gitee From c6828e6708c8681e3107353d8f21a7d94b1e8197 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 10 Jun 2022 13:32:40 +0800 Subject: [PATCH 10/55] =?UTF-8?q?=E5=A4=A7=E5=B9=85=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/domain/core/repository/AbstractContextRepository.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 9b0e42eb..171a23e0 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -253,6 +253,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor List boundEntityPropertyChains = entityDefinition.getBoundEntityPropertyChains(); EntityPropertyChain relativeEntityPropertyChain = entityPropertyChainMap.get(bindAttribute); if (!boundEntityPropertyChains.contains(relativeEntityPropertyChain)) { + relativeEntityPropertyChain.initialize(); boundEntityPropertyChains.add(relativeEntityPropertyChain); } } -- Gitee From d503bd87c36a55dcec357764cdd35a0666396383 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 10 Jun 2022 14:50:14 +0800 Subject: [PATCH 11/55] =?UTF-8?q?=E5=A4=A7=E5=B9=85=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/domain/core/entity/BindingDefinition.java | 1 + .../spring/domain/core/entity/EntityDefinition.java | 1 - .../core/repository/AbstractContextRepository.java | 11 +++++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java index fa831113..01c83fd6 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java @@ -18,4 +18,5 @@ public class BindingDefinition { private ConfiguredRepository belongConfiguredRepository; private String boundFieldName; private EntityPropertyChain boundEntityPropertyChain; + private EntityPropertyChain fieldEntityPropertyChain; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index a634bc1d..b1743cc8 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -37,6 +37,5 @@ public class EntityDefinition { private List bindingColumns; private Set fieldNames; private Map entityPropertyChainMap; - private List fieldEntityPropertyChains; private List boundEntityPropertyChains; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 171a23e0..80ed4a88 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -261,7 +261,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor BindingDefinition bindingDefinition = new BindingDefinition( bindingAttributes, fieldAttribute, aliasAttribute, bindAttribute, isFromContext, isBoundId, belongAccessPath, belongConfiguredRepository, - boundFieldName, boundEntityPropertyChain); + boundFieldName, boundEntityPropertyChain, null); bindingDefinitions.add(bindingDefinition); if (isBoundId) { @@ -279,7 +279,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor attributes, sceneAttribute, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, bindingDefinitions, boundIdBindingDefinition, bindingColumns, - new LinkedHashSet<>(), new LinkedHashMap<>(), new ArrayList<>(), new ArrayList<>()); + new LinkedHashSet<>(), new LinkedHashMap<>(), new ArrayList<>()); EntityMapper entityMapper = newEntityMapper(entityDefinition); if (mapAsExample) { @@ -322,6 +322,13 @@ public abstract class AbstractContextRepository extends AbstractRepositor entityPropertyChainMap.put(accessPath, relativeEntityPropertyChain); } + for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { + String accessPath = prefixAccessPath + bindingDefinition.getFieldAttribute(); + EntityPropertyChain entityPropertyChain = entityPropertyChainMap.get(accessPath); + Assert.notNull(entityPropertyChain, "The binding field does not exist!"); + bindingDefinition.setFieldEntityPropertyChain(entityPropertyChain); + } + return configuredRepository; } -- Gitee From 3665167f669522889aafc09c4746086bea0e6c99 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 10 Jun 2022 20:33:41 +0800 Subject: [PATCH 12/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/domain/core/api/QueryCache.java | 7 +++++++ .../domain/core/entity/BoundedContext.java | 11 +++++++++++ .../domain/core/impl/DefaultQueryCache.java | 19 +++++++++++++++++++ .../repository/AbstractBatchRepository.java | 15 +++++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java new file mode 100644 index 00000000..dbd5f1b6 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java @@ -0,0 +1,7 @@ +package com.gitee.spring.domain.core.api; + +public interface QueryCache { + + Object selectByPrimaryKey(Class entityClass, String primaryKey); + +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java index 27935334..5868c683 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java @@ -1,6 +1,17 @@ package com.gitee.spring.domain.core.entity; +import com.gitee.spring.domain.core.api.QueryCache; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + import java.util.LinkedHashMap; +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) public class BoundedContext extends LinkedHashMap { + private QueryCache queryCache; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java new file mode 100644 index 00000000..e0b9d6c2 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java @@ -0,0 +1,19 @@ +package com.gitee.spring.domain.core.impl; + +import com.gitee.spring.domain.core.api.QueryCache; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class DefaultQueryCache implements QueryCache { + + protected Map, Map>> entitiesCache = new ConcurrentHashMap<>(); + + @Override + public Object selectByPrimaryKey(Class entityClass, String primaryKey) { + Map> entitiesMap = entitiesCache.get(entityClass); + return entitiesMap.get(primaryKey); + } + +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 4920b6a8..99744835 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -63,7 +63,22 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo } protected void addEntitiesToContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List entities) { + + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + List bindingDefinitions = entityDefinition.getBindingDefinitions(); + for (Object entity : entities) { + StringBuilder builder = new StringBuilder(); + for (BindingDefinition bindingDefinition : bindingDefinitions) { + EntityPropertyChain entityPropertyChain = bindingDefinition.getFieldEntityPropertyChain(); + String aliasAttribute = bindingDefinition.getAliasAttribute(); + Object boundValue = entityPropertyChain.getValue(entity); + builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); + } + if (builder.length() > 0) { + builder.delete(builder.length() - 2, builder.length()); + } + } } } -- Gitee From fd7d621dbba4e7fec576bbd229e187adad3771b4 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 13 Jun 2022 19:11:24 +0800 Subject: [PATCH 13/55] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=9F=A5=E8=AF=A2=E7=BB=84=E8=A3=85=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/api/EntityCriterion.java | 6 +- .../spring/domain/core/api/QueryCache.java | 7 +- .../domain/core/impl/DefaultQueryCache.java | 14 ++- .../repository/AbstractBatchRepository.java | 106 ++++++++++++------ .../repository/AbstractContextRepository.java | 8 +- .../repository/AbstractGenericRepository.java | 2 +- .../core/repository/BatchRepository.java | 46 ++++++++ .../core/repository/ConfiguredRepository.java | 6 +- 8 files changed, 151 insertions(+), 44 deletions(-) create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCriterion.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCriterion.java index 2d7df86b..c27593af 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCriterion.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCriterion.java @@ -3,7 +3,11 @@ package com.gitee.spring.domain.core.api; import com.gitee.spring.domain.core.entity.EntityExample; public interface EntityCriterion { - + + String getFieldName(); + + Object getFieldValue(); + void appendTo(EntityExample entityExample); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java index dbd5f1b6..5ff41513 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java @@ -1,7 +1,12 @@ package com.gitee.spring.domain.core.api; +import java.util.List; +import java.util.Map; + public interface QueryCache { - Object selectByPrimaryKey(Class entityClass, String primaryKey); + Map> getOrCreateCache(Class repositoryClass, String accessPath); + + Map> getCache(Class repositoryClass, String accessPath); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java index e0b9d6c2..2f309867 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java @@ -8,12 +8,18 @@ import java.util.concurrent.ConcurrentHashMap; public class DefaultQueryCache implements QueryCache { - protected Map, Map>> entitiesCache = new ConcurrentHashMap<>(); + protected Map, Map>>> entitiesCache = new ConcurrentHashMap<>(); @Override - public Object selectByPrimaryKey(Class entityClass, String primaryKey) { - Map> entitiesMap = entitiesCache.get(entityClass); - return entitiesMap.get(primaryKey); + public Map> getOrCreateCache(Class repositoryClass, String accessPath) { + Map>> entitiesMap = entitiesCache.computeIfAbsent(repositoryClass, key -> new ConcurrentHashMap<>()); + return entitiesMap.computeIfAbsent(accessPath, key -> new ConcurrentHashMap<>()); + } + + @Override + public Map> getCache(Class repositoryClass, String accessPath) { + Map>> entitiesMap = entitiesCache.get(repositoryClass); + return entitiesMap != null ? entitiesMap.get(accessPath) : null; } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 99744835..725bc4d3 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -2,47 +2,58 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; +import com.gitee.spring.domain.core.api.QueryCache; import com.gitee.spring.domain.core.entity.*; +import com.gitee.spring.domain.core.impl.DefaultQueryCache; import java.util.*; public abstract class AbstractBatchRepository extends AbstractGenericRepository { + @Override + protected ConfiguredRepository processConfiguredRepository(ConfiguredRepository configuredRepository) { + return new BatchRepository(configuredRepository); + } + @Override protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { - Map> fieldValues = new LinkedHashMap<>(); - collectFieldValues(fieldValues, rootRepository, rootEntities); - - for (ConfiguredRepository configuredRepository : subRepositories) { - if (isMatchScenes(boundedContext, configuredRepository)) { - EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); - if (entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); - collectFieldValues(fieldValues, configuredRepository, entities); - addEntitiesToContext(boundedContext, configuredRepository, entities); + if (boundedContext.getQueryCache() == null) { + boundedContext.setQueryCache(new DefaultQueryCache()); + } + + Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); + repositoryEntitiesMap.forEach((abstractDelegateRepository, eachRootEntities) -> { + + Class repositoryClass = abstractDelegateRepository.getRepositoryClass(); + ConfiguredRepository rootRepository = abstractDelegateRepository.getRootRepository(); + List subRepositories = abstractDelegateRepository.getSubRepositories(); + + Map> fieldValues = new LinkedHashMap<>(); + collectFieldValues(fieldValues, rootRepository, eachRootEntities); + + for (ConfiguredRepository configuredRepository : subRepositories) { + if (isMatchScenes(boundedContext, configuredRepository)) { + EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); + if (entityExample.isDirtyQuery()) { + List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); + collectFieldValues(fieldValues, configuredRepository, entities); + addEntitiesToContext(boundedContext, repositoryClass, configuredRepository, entities); + } } } - } - super.handleRootEntities(boundedContext, rootEntities); + super.handleRootEntities(boundedContext, eachRootEntities); + }); } - protected EntityExample newExampleByFieldValues(BoundedContext boundedContext, - Map> fieldValues, - ConfiguredRepository configuredRepository) { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - EntityMapper entityMapper = configuredRepository.getEntityMapper(); - EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { - String bindAttribute = bindingDefinition.getBindAttribute(); - List boundValues = fieldValues.get(bindAttribute); - if (boundValues != null) { - String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); - entityExample.addCriterion(entityCriterion); - } + protected Map, List> adaptiveRepositoryEntities(List rootEntities) { + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); + for (Object rootEntity : rootEntities) { + AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); + List entities = repositoryEntitiesMap.computeIfAbsent(abstractDelegateRepository, key -> new ArrayList<>()); + entities.add(rootEntity); } - return entityExample; + return repositoryEntitiesMap; } protected void collectFieldValues(Map> fieldValues, @@ -62,22 +73,49 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo } } - protected void addEntitiesToContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List entities) { - + protected EntityExample newExampleByFieldValues(BoundedContext boundedContext, + Map> fieldValues, + ConfiguredRepository configuredRepository) { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + EntityMapper entityMapper = configuredRepository.getEntityMapper(); + EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); + for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { + String bindAttribute = bindingDefinition.getBindAttribute(); + List boundValues = fieldValues.get(bindAttribute); + if (boundValues != null) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); + entityExample.addCriterion(entityCriterion); + } + } + return entityExample; + } + + protected void addEntitiesToContext(BoundedContext boundedContext, + Class repositoryClass, + ConfiguredRepository configuredRepository, + List entities) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + + QueryCache queryCache = boundedContext.getQueryCache(); + Map> entitiesMap = queryCache.getOrCreateCache(repositoryClass, entityDefinition.getAccessPath()); + List bindingDefinitions = entityDefinition.getBindingDefinitions(); for (Object entity : entities) { StringBuilder builder = new StringBuilder(); for (BindingDefinition bindingDefinition : bindingDefinitions) { - EntityPropertyChain entityPropertyChain = bindingDefinition.getFieldEntityPropertyChain(); - String aliasAttribute = bindingDefinition.getAliasAttribute(); - Object boundValue = entityPropertyChain.getValue(entity); - builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); + if (!bindingDefinition.isFromContext()) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityPropertyChain entityPropertyChain = bindingDefinition.getFieldEntityPropertyChain(); + Object boundValue = entityPropertyChain.getValue(entity); + builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); + } } if (builder.length() > 0) { builder.delete(builder.length() - 2, builder.length()); } - + List existEntities = entitiesMap.computeIfAbsent(builder.toString(), key -> new ArrayList<>()); + existEntities.add(entity); } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 80ed4a88..0d384bf1 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -35,7 +35,7 @@ import java.util.stream.Collectors; @EqualsAndHashCode(callSuper = false) public abstract class AbstractContextRepository extends AbstractRepository implements ApplicationContextAware, InitializingBean { - protected ApplicationContext applicationContext; + protected Class repositoryClass; protected Class entityClass; protected Constructor entityCtor; @@ -50,6 +50,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor protected List subRepositories = new ArrayList<>(); protected List orderedRepositories = new ArrayList<>(); + protected ApplicationContext applicationContext; + @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; @@ -57,6 +59,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor @Override public void afterPropertiesSet() throws Exception { + repositoryClass = this.getClass(); + Type genericSuperclass = this.getClass().getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0]; @@ -295,7 +299,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor } ConfiguredRepository configuredRepository = new ConfiguredRepository( - entityPropertyChain, entityDefinition, entityMapper, entityAssembler, + this, entityPropertyChain, entityDefinition, entityMapper, entityAssembler, (AbstractRepository) repository); return processConfiguredRepository(configuredRepository); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index 88b9cb0b..c4d21782 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -30,7 +30,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR if (lastEntity != null && isMatchScenes(boundedContext, configuredRepository)) { EntityExample entityExample = newExampleByContext(boundedContext, configuredRepository, rootEntity); if (entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); + List entities = configuredRepository.selectByExample(boundedContext, entityExample); Object entity = convertManyToOneEntity(configuredRepository, entities); if (entity != null) { EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java new file mode 100644 index 00000000..1b958c1e --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java @@ -0,0 +1,46 @@ +package com.gitee.spring.domain.core.repository; + +import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.api.QueryCache; +import com.gitee.spring.domain.core.entity.BoundedContext; +import com.gitee.spring.domain.core.entity.EntityExample; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class BatchRepository extends ConfiguredRepository { + + public BatchRepository(ConfiguredRepository configuredRepository) { + super(configuredRepository); + } + + @Override + public List selectByExample(BoundedContext boundedContext, Object example) { + QueryCache queryCache = boundedContext.getQueryCache(); + if (queryCache != null && example instanceof EntityExample) { + Class repositoryClass = abstractContextRepository.getRepositoryClass(); + String accessPath = entityDefinition.getAccessPath(); + Map> entitiesMap = queryCache.getCache(repositoryClass, accessPath); + if (entitiesMap != null) { + if (entitiesMap.isEmpty()) { + return Collections.emptyList(); + } + EntityExample entityExample = (EntityExample) example; + StringBuilder builder = new StringBuilder(); + for (EntityCriterion entityCriterion : entityExample.getEntityCriteria()) { + String fieldName = entityCriterion.getFieldName(); + Object fieldValue = entityCriterion.getFieldValue(); + builder.append(fieldName).append(": ").append(fieldValue).append(", "); + } + if (builder.length() > 0) { + builder.delete(builder.length() - 2, builder.length()); + } + List entities = entitiesMap.get(builder.toString()); + return entities != null ? entities : Collections.emptyList(); + } + } + return super.selectByExample(boundedContext, example); + } + +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java index 6ca7012d..92413ac7 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java @@ -16,17 +16,20 @@ import java.util.List; @Setter public class ConfiguredRepository extends ProxyRepository { + protected AbstractContextRepository abstractContextRepository; protected EntityPropertyChain entityPropertyChain; protected EntityDefinition entityDefinition; protected EntityMapper entityMapper; protected EntityAssembler entityAssembler; - public ConfiguredRepository(EntityPropertyChain entityPropertyChain, + public ConfiguredRepository(AbstractContextRepository abstractContextRepository, + EntityPropertyChain entityPropertyChain, EntityDefinition entityDefinition, EntityMapper entityMapper, EntityAssembler entityAssembler, AbstractRepository repository) { super(repository); + this.abstractContextRepository = abstractContextRepository; this.entityPropertyChain = entityPropertyChain; this.entityDefinition = entityDefinition; this.entityMapper = entityMapper; @@ -35,6 +38,7 @@ public class ConfiguredRepository extends ProxyRepository { public ConfiguredRepository(ConfiguredRepository configuredRepository) { super(configuredRepository); + this.abstractContextRepository = configuredRepository.getAbstractContextRepository(); this.entityPropertyChain = configuredRepository.getEntityPropertyChain(); this.entityDefinition = configuredRepository.getEntityDefinition(); this.entityMapper = configuredRepository.getEntityMapper(); -- Gitee From 52165cbff5f50de70469ba9796b92954b928f93b Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 13 Jun 2022 19:28:45 +0800 Subject: [PATCH 14/55] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B1=BB=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/{QueryCache.java => EntityCache.java} | 2 +- .../spring/domain/core/entity/BoundedContext.java | 4 ++-- ...efaultQueryCache.java => DefaultEntityCache.java} | 4 ++-- .../core/repository/AbstractBatchRepository.java | 12 ++++++------ .../domain/core/repository/BatchRepository.java | 8 ++++---- 5 files changed, 15 insertions(+), 15 deletions(-) rename spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/{QueryCache.java => EntityCache.java} (89%) rename spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/{DefaultQueryCache.java => DefaultEntityCache.java} (89%) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCache.java similarity index 89% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java rename to spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCache.java index 5ff41513..e3d72132 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/QueryCache.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCache.java @@ -3,7 +3,7 @@ package com.gitee.spring.domain.core.api; import java.util.List; import java.util.Map; -public interface QueryCache { +public interface EntityCache { Map> getOrCreateCache(Class repositoryClass, String accessPath); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java index 5868c683..bb7fca31 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java @@ -1,6 +1,6 @@ package com.gitee.spring.domain.core.entity; -import com.gitee.spring.domain.core.api.QueryCache; +import com.gitee.spring.domain.core.api.EntityCache; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -13,5 +13,5 @@ import java.util.LinkedHashMap; @AllArgsConstructor @EqualsAndHashCode(callSuper = false) public class BoundedContext extends LinkedHashMap { - private QueryCache queryCache; + private EntityCache entityCache; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCache.java similarity index 89% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java rename to spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCache.java index 2f309867..212b970c 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultQueryCache.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCache.java @@ -1,12 +1,12 @@ package com.gitee.spring.domain.core.impl; -import com.gitee.spring.domain.core.api.QueryCache; +import com.gitee.spring.domain.core.api.EntityCache; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class DefaultQueryCache implements QueryCache { +public class DefaultEntityCache implements EntityCache { protected Map, Map>>> entitiesCache = new ConcurrentHashMap<>(); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 725bc4d3..fdb17a60 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -2,9 +2,9 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; -import com.gitee.spring.domain.core.api.QueryCache; +import com.gitee.spring.domain.core.api.EntityCache; import com.gitee.spring.domain.core.entity.*; -import com.gitee.spring.domain.core.impl.DefaultQueryCache; +import com.gitee.spring.domain.core.impl.DefaultEntityCache; import java.util.*; @@ -17,8 +17,8 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo @Override protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { - if (boundedContext.getQueryCache() == null) { - boundedContext.setQueryCache(new DefaultQueryCache()); + if (boundedContext.getEntityCache() == null) { + boundedContext.setEntityCache(new DefaultEntityCache()); } Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); @@ -97,8 +97,8 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo List entities) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - QueryCache queryCache = boundedContext.getQueryCache(); - Map> entitiesMap = queryCache.getOrCreateCache(repositoryClass, entityDefinition.getAccessPath()); + EntityCache entityCache = boundedContext.getEntityCache(); + Map> entitiesMap = entityCache.getOrCreateCache(repositoryClass, entityDefinition.getAccessPath()); List bindingDefinitions = entityDefinition.getBindingDefinitions(); for (Object entity : entities) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java index 1b958c1e..ae6d5fd7 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java @@ -1,7 +1,7 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.QueryCache; +import com.gitee.spring.domain.core.api.EntityCache; import com.gitee.spring.domain.core.entity.BoundedContext; import com.gitee.spring.domain.core.entity.EntityExample; @@ -17,11 +17,11 @@ public class BatchRepository extends ConfiguredRepository { @Override public List selectByExample(BoundedContext boundedContext, Object example) { - QueryCache queryCache = boundedContext.getQueryCache(); - if (queryCache != null && example instanceof EntityExample) { + EntityCache entityCache = boundedContext.getEntityCache(); + if (entityCache != null && example instanceof EntityExample) { Class repositoryClass = abstractContextRepository.getRepositoryClass(); String accessPath = entityDefinition.getAccessPath(); - Map> entitiesMap = queryCache.getCache(repositoryClass, accessPath); + Map> entitiesMap = entityCache.getCache(repositoryClass, accessPath); if (entitiesMap != null) { if (entitiesMap.isEmpty()) { return Collections.emptyList(); -- Gitee From b5349fbc912fb169471020217ca3884bab51acfd Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 13 Jun 2022 19:33:04 +0800 Subject: [PATCH 15/55] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B1=BB=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/{EntityCache.java => EntityCaches.java} | 2 +- .../spring/domain/core/entity/BoundedContext.java | 4 ++-- ...aultEntityCache.java => DefaultEntityCaches.java} | 4 ++-- .../core/repository/AbstractBatchRepository.java | 12 ++++++------ .../domain/core/repository/BatchRepository.java | 8 ++++---- 5 files changed, 15 insertions(+), 15 deletions(-) rename spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/{EntityCache.java => EntityCaches.java} (89%) rename spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/{DefaultEntityCache.java => DefaultEntityCaches.java} (88%) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCache.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCaches.java similarity index 89% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCache.java rename to spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCaches.java index e3d72132..7b305be6 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCache.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCaches.java @@ -3,7 +3,7 @@ package com.gitee.spring.domain.core.api; import java.util.List; import java.util.Map; -public interface EntityCache { +public interface EntityCaches { Map> getOrCreateCache(Class repositoryClass, String accessPath); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java index bb7fca31..3d3294b0 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java @@ -1,6 +1,6 @@ package com.gitee.spring.domain.core.entity; -import com.gitee.spring.domain.core.api.EntityCache; +import com.gitee.spring.domain.core.api.EntityCaches; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -13,5 +13,5 @@ import java.util.LinkedHashMap; @AllArgsConstructor @EqualsAndHashCode(callSuper = false) public class BoundedContext extends LinkedHashMap { - private EntityCache entityCache; + private EntityCaches entityCaches; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCache.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCaches.java similarity index 88% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCache.java rename to spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCaches.java index 212b970c..db9c5915 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCache.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCaches.java @@ -1,12 +1,12 @@ package com.gitee.spring.domain.core.impl; -import com.gitee.spring.domain.core.api.EntityCache; +import com.gitee.spring.domain.core.api.EntityCaches; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class DefaultEntityCache implements EntityCache { +public class DefaultEntityCaches implements EntityCaches { protected Map, Map>>> entitiesCache = new ConcurrentHashMap<>(); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index fdb17a60..c1653938 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -2,9 +2,9 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; -import com.gitee.spring.domain.core.api.EntityCache; +import com.gitee.spring.domain.core.api.EntityCaches; import com.gitee.spring.domain.core.entity.*; -import com.gitee.spring.domain.core.impl.DefaultEntityCache; +import com.gitee.spring.domain.core.impl.DefaultEntityCaches; import java.util.*; @@ -17,8 +17,8 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo @Override protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { - if (boundedContext.getEntityCache() == null) { - boundedContext.setEntityCache(new DefaultEntityCache()); + if (boundedContext.getEntityCaches() == null) { + boundedContext.setEntityCaches(new DefaultEntityCaches()); } Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); @@ -97,8 +97,8 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo List entities) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - EntityCache entityCache = boundedContext.getEntityCache(); - Map> entitiesMap = entityCache.getOrCreateCache(repositoryClass, entityDefinition.getAccessPath()); + EntityCaches entityCaches = boundedContext.getEntityCaches(); + Map> entitiesMap = entityCaches.getOrCreateCache(repositoryClass, entityDefinition.getAccessPath()); List bindingDefinitions = entityDefinition.getBindingDefinitions(); for (Object entity : entities) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java index ae6d5fd7..199175b1 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java @@ -1,7 +1,7 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityCache; +import com.gitee.spring.domain.core.api.EntityCaches; import com.gitee.spring.domain.core.entity.BoundedContext; import com.gitee.spring.domain.core.entity.EntityExample; @@ -17,11 +17,11 @@ public class BatchRepository extends ConfiguredRepository { @Override public List selectByExample(BoundedContext boundedContext, Object example) { - EntityCache entityCache = boundedContext.getEntityCache(); - if (entityCache != null && example instanceof EntityExample) { + EntityCaches entityCaches = boundedContext.getEntityCaches(); + if (entityCaches != null && example instanceof EntityExample) { Class repositoryClass = abstractContextRepository.getRepositoryClass(); String accessPath = entityDefinition.getAccessPath(); - Map> entitiesMap = entityCache.getCache(repositoryClass, accessPath); + Map> entitiesMap = entityCaches.getCache(repositoryClass, accessPath); if (entitiesMap != null) { if (entitiesMap.isEmpty()) { return Collections.emptyList(); -- Gitee From 8c205ad2954b9f14d70db81cfefcb4af0298d677 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 14 Jun 2022 09:49:08 +0800 Subject: [PATCH 16/55] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=88=B02.6.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- spring-boot-starter-domain/pom.xml | 2 +- spring-domain-coating/pom.xml | 2 +- spring-domain-core/pom.xml | 2 +- spring-domain-event/pom.xml | 2 +- spring-domain-injection/pom.xml | 2 +- spring-domain-web/pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 4879ff77..eaf5fad2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.gitee.digital-engine spring-domain - 2.5.8 + 2.6.1 pom diff --git a/spring-boot-starter-domain/pom.xml b/spring-boot-starter-domain/pom.xml index 2c12f8fe..35302375 100644 --- a/spring-boot-starter-domain/pom.xml +++ b/spring-boot-starter-domain/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.5.8 + 2.6.1 spring-boot-starter-domain diff --git a/spring-domain-coating/pom.xml b/spring-domain-coating/pom.xml index 38035c3f..8524391e 100644 --- a/spring-domain-coating/pom.xml +++ b/spring-domain-coating/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.5.8 + 2.6.1 spring-domain-coating diff --git a/spring-domain-core/pom.xml b/spring-domain-core/pom.xml index 062e7442..d6139a9f 100644 --- a/spring-domain-core/pom.xml +++ b/spring-domain-core/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.5.8 + 2.6.1 spring-domain-core diff --git a/spring-domain-event/pom.xml b/spring-domain-event/pom.xml index 909bc0c7..2153143b 100644 --- a/spring-domain-event/pom.xml +++ b/spring-domain-event/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.5.8 + 2.6.1 spring-domain-event diff --git a/spring-domain-injection/pom.xml b/spring-domain-injection/pom.xml index 19ebd610..80339ac2 100644 --- a/spring-domain-injection/pom.xml +++ b/spring-domain-injection/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.5.8 + 2.6.1 spring-domain-injection diff --git a/spring-domain-web/pom.xml b/spring-domain-web/pom.xml index 830daf4e..2f3baa9f 100644 --- a/spring-domain-web/pom.xml +++ b/spring-domain-web/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.5.8 + 2.6.1 spring-domain-web -- Gitee From c193052d292e4f347363268f2bfabc51994518f2 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 14 Jun 2022 11:03:33 +0800 Subject: [PATCH 17/55] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=9C=BA=E6=99=AF=E5=80=BC=E5=88=A4?= =?UTF-8?q?=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/entity/EntityDefinition.java | 4 +-- .../core/entity/SceneEntityProperty.java | 26 +++++++++++++++++++ .../repository/AbstractBatchRepository.java | 26 +++++++++++-------- .../repository/AbstractContextRepository.java | 22 ++++++++++++---- .../repository/AbstractGenericRepository.java | 11 ++++++-- 5 files changed, 69 insertions(+), 20 deletions(-) create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/SceneEntityProperty.java diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index b1743cc8..7054c6e9 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -20,7 +20,7 @@ public class EntityDefinition { private Class genericEntityClass; private String fieldName; private AnnotationAttributes attributes; - private String[] sceneAttribute; + private Set sceneAttribute; private Object mapper; private Class pojoClass; private boolean sameType; @@ -37,5 +37,5 @@ public class EntityDefinition { private List bindingColumns; private Set fieldNames; private Map entityPropertyChainMap; - private List boundEntityPropertyChains; + private List boundSceneEntityProperties; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/SceneEntityProperty.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/SceneEntityProperty.java new file mode 100644 index 00000000..b5ef3661 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/SceneEntityProperty.java @@ -0,0 +1,26 @@ +package com.gitee.spring.domain.core.entity; + +import com.gitee.spring.domain.core.api.EntityProperty; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Set; + +@Data +@AllArgsConstructor +public class SceneEntityProperty implements EntityProperty { + + private Set sceneAttribute; + private EntityPropertyChain entityPropertyChain; + + @Override + public Object getValue(Object entity) { + return entityPropertyChain.getValue(entity); + } + + @Override + public void setValue(Object entity, Object property) { + entityPropertyChain.setValue(entity, property); + } + +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index c1653938..7b162830 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -29,14 +29,14 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo List subRepositories = abstractDelegateRepository.getSubRepositories(); Map> fieldValues = new LinkedHashMap<>(); - collectFieldValues(fieldValues, rootRepository, eachRootEntities); + collectFieldValues(boundedContext, fieldValues, rootRepository, eachRootEntities); for (ConfiguredRepository configuredRepository : subRepositories) { if (isMatchScenes(boundedContext, configuredRepository)) { EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); if (entityExample.isDirtyQuery()) { List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); - collectFieldValues(fieldValues, configuredRepository, entities); + collectFieldValues(boundedContext, fieldValues, configuredRepository, entities); addEntitiesToContext(boundedContext, repositoryClass, configuredRepository, entities); } } @@ -56,18 +56,22 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return repositoryEntitiesMap; } - protected void collectFieldValues(Map> fieldValues, + protected void collectFieldValues(BoundedContext boundedContext, + Map> fieldValues, ConfiguredRepository configuredRepository, List entities) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - List boundEntityPropertyChains = entityDefinition.getBoundEntityPropertyChains(); - for (EntityPropertyChain entityPropertyChain : boundEntityPropertyChains) { - String accessPath = entityPropertyChain.getAccessPath(); - for (Object entity : entities) { - Object boundValue = entityPropertyChain.getValue(entity); - if (boundValue != null) { - List boundValues = fieldValues.computeIfAbsent(accessPath, key -> new ArrayList<>()); - boundValues.add(boundValue); + List boundSceneEntityProperties = entityDefinition.getBoundSceneEntityProperties(); + for (SceneEntityProperty sceneEntityProperty : boundSceneEntityProperties) { + if (isMatchScenes(boundedContext, sceneEntityProperty.getSceneAttribute())) { + EntityPropertyChain entityPropertyChain = sceneEntityProperty.getEntityPropertyChain(); + String accessPath = entityPropertyChain.getAccessPath(); + for (Object entity : entities) { + Object boundValue = entityPropertyChain.getValue(entity); + if (boundValue != null) { + List boundValues = fieldValues.computeIfAbsent(accessPath, key -> new ArrayList<>()); + boundValues.add(boundValue); + } } } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 0d384bf1..6a7b2d67 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -1,5 +1,6 @@ package com.gitee.spring.domain.core.repository; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.gitee.spring.domain.core.annotation.Binding; @@ -11,6 +12,7 @@ import com.gitee.spring.domain.core.entity.BindingDefinition; import com.gitee.spring.domain.core.api.Constants; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; +import com.gitee.spring.domain.core.entity.SceneEntityProperty; import com.gitee.spring.domain.core.mapper.MapEntityMapper; import com.gitee.spring.domain.core.mapper.NoBuiltEntityMapper; import com.gitee.spring.domain.core.utils.PathUtils; @@ -167,7 +169,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor AnnotationAttributes attributes, Set bindingAnnotations) { - String[] sceneAttribute = attributes.getStringArray(Constants.SCENE_ATTRIBUTE); + String[] sceneAttributeStrs = attributes.getStringArray(Constants.SCENE_ATTRIBUTE); + Set sceneAttributeSet = new LinkedHashSet<>(Arrays.asList(sceneAttributeStrs)); Class mapperClass = attributes.getClass(Constants.MAPPER_ATTRIBUTE); Object mapper = null; @@ -254,11 +257,19 @@ public abstract class AbstractContextRepository extends AbstractRepositor EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); - List boundEntityPropertyChains = entityDefinition.getBoundEntityPropertyChains(); + List boundSceneEntityProperties = entityDefinition.getBoundSceneEntityProperties(); + EntityPropertyChain relativeEntityPropertyChain = entityPropertyChainMap.get(bindAttribute); - if (!boundEntityPropertyChains.contains(relativeEntityPropertyChain)) { + SceneEntityProperty sceneEntityProperty = CollUtil.findOne(boundSceneEntityProperties, item -> + item.getEntityPropertyChain() == relativeEntityPropertyChain); + if (sceneEntityProperty != null) { + Set sceneAttribute = sceneEntityProperty.getSceneAttribute(); + sceneAttribute.addAll(sceneAttributeSet); + } else { relativeEntityPropertyChain.initialize(); - boundEntityPropertyChains.add(relativeEntityPropertyChain); + SceneEntityProperty newSceneEntityProperty = new SceneEntityProperty( + new LinkedHashSet<>(sceneAttributeSet), relativeEntityPropertyChain); + boundSceneEntityProperties.add(newSceneEntityProperty); } } @@ -280,7 +291,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor EntityDefinition entityDefinition = new EntityDefinition( isRoot, accessPath, annotatedElement, entityClass, isCollection, genericEntityClass, fieldName, - attributes, sceneAttribute, mapper, pojoClass, sameType, mappedClass, + attributes, sceneAttributeSet, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, bindingDefinitions, boundIdBindingDefinition, bindingColumns, new LinkedHashSet<>(), new LinkedHashMap<>(), new ArrayList<>()); @@ -330,6 +341,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor String accessPath = prefixAccessPath + bindingDefinition.getFieldAttribute(); EntityPropertyChain entityPropertyChain = entityPropertyChainMap.get(accessPath); Assert.notNull(entityPropertyChain, "The binding field does not exist!"); + entityPropertyChain.initialize(); bindingDefinition.setFieldEntityPropertyChain(entityPropertyChain); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index c4d21782..ab7bf97d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -9,6 +9,7 @@ import com.gitee.spring.domain.core.entity.*; import java.util.Collection; import java.util.List; +import java.util.Set; public abstract class AbstractGenericRepository extends AbstractDelegateRepository { @@ -43,8 +44,14 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR protected boolean isMatchScenes(BoundedContext boundedContext, ConfiguredRepository configuredRepository) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - String[] sceneAttribute = entityDefinition.getSceneAttribute(); - if (sceneAttribute.length == 0) return true; + Set sceneAttribute = entityDefinition.getSceneAttribute(); + return isMatchScenes(boundedContext, sceneAttribute); + } + + protected boolean isMatchScenes(BoundedContext boundedContext, Set sceneAttribute) { + if (sceneAttribute.isEmpty()) { + return true; + } for (String scene : sceneAttribute) { if (boundedContext.containsKey(scene)) { return true; -- Gitee From 115d6f2037ce14eea9fc0fec51f93d9cf3e515b1 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 14 Jun 2022 15:21:23 +0800 Subject: [PATCH 18/55] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=89=80=E6=9C=89?= =?UTF-8?q?=E6=A0=B8=E5=BF=83=E9=80=BB=E8=BE=91=EF=BC=8C=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E9=98=B6=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractChainRepository.java | 74 +++++++++---------- .../repository/AbstractCoatingRepository.java | 6 +- .../domain/core/entity/EntityDefinition.java | 5 +- .../repository/AbstractBatchRepository.java | 31 ++++---- .../repository/AbstractContextRepository.java | 19 ++++- .../repository/AbstractGenericRepository.java | 4 +- .../core/repository/BatchRepository.java | 8 +- 7 files changed, 84 insertions(+), 63 deletions(-) diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java index 317a69ff..37d58988 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java @@ -84,23 +84,25 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); EntityMapper entityMapper = queryRepository.getEntityMapper(); - for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { - if (bindingDefinition.isFromContext()) { + for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { + String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); + ChainCriterion targetChainCriterion = criterionMap.get(absoluteAccessPath); + if (targetChainCriterion != null) { + EntityExample targetEntityExample = targetChainCriterion.getEntityExample(); + if (targetEntityExample.isEmptyQuery()) { + entityExample.setEmptyQuery(true); + break; + } + } + } + + if (!entityExample.isEmptyQuery()) { + for (BindingDefinition bindingDefinition : entityDefinition.getContextBindingDefinitions()) { Object boundValue = boundedContext.get(bindingDefinition.getBindAttribute()); if (boundValue != null) { EntityCriterion entityCriterion = entityMapper.newEqualCriterion(bindingDefinition.getAliasAttribute(), boundValue); entityExample.addCriterion(entityCriterion); } - } else { - String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); - ChainCriterion targetChainCriterion = criterionMap.get(absoluteAccessPath); - if (targetChainCriterion != null) { - EntityExample targetEntityExample = targetChainCriterion.getEntityExample(); - if (targetEntityExample.isEmptyQuery()) { - entityExample.setEmptyQuery(true); - break; - } - } } } @@ -115,32 +117,30 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo log.debug("The data queried is: {}", entities); } - for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { - if (!bindingDefinition.isFromContext()) { - String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); - ChainCriterion targetChainCriterion = criterionMap.get(absoluteAccessPath); - if (targetChainCriterion != null) { - EntityExample targetEntityExample = targetChainCriterion.getEntityExample(); - if (entities.isEmpty()) { - targetEntityExample.setEmptyQuery(true); - continue; - } - - List fieldValues = collectFieldValues(entities, bindingDefinition.getFieldAttribute()); - if (fieldValues.isEmpty()) { - targetEntityExample.setEmptyQuery(true); - continue; - } - - String boundFieldName = bindingDefinition.getBoundFieldName(); - Object fieldValue = fieldValues.size() == 1 ? fieldValues.get(0) : fieldValues; - - ConfiguredRepository targetQueryRepository = targetChainCriterion.getQueryRepository(); - EntityMapper targetEntityMapper = targetQueryRepository.getEntityMapper(); - - EntityCriterion entityCriterion = targetEntityMapper.newEqualCriterion(boundFieldName, fieldValue); - targetEntityExample.addCriterion(entityCriterion); + for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { + String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); + ChainCriterion targetChainCriterion = criterionMap.get(absoluteAccessPath); + if (targetChainCriterion != null) { + EntityExample targetEntityExample = targetChainCriterion.getEntityExample(); + if (entities.isEmpty()) { + targetEntityExample.setEmptyQuery(true); + continue; } + + List fieldValues = collectFieldValues(entities, bindingDefinition.getFieldAttribute()); + if (fieldValues.isEmpty()) { + targetEntityExample.setEmptyQuery(true); + continue; + } + + String boundFieldName = bindingDefinition.getBoundFieldName(); + Object fieldValue = fieldValues.size() == 1 ? fieldValues.get(0) : fieldValues; + + ConfiguredRepository targetQueryRepository = targetChainCriterion.getQueryRepository(); + EntityMapper targetEntityMapper = targetQueryRepository.getEntityMapper(); + + EntityCriterion entityCriterion = targetEntityMapper.newEqualCriterion(boundFieldName, fieldValue); + targetEntityExample.addCriterion(entityCriterion); } } }); diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java index d0fe7b46..e20b9daa 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java @@ -18,9 +18,9 @@ import com.gitee.spring.domain.core.api.Constants; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import com.gitee.spring.domain.coating.entity.RepositoryLocation; +import com.gitee.spring.domain.core.entity.SceneEntityProperty; import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; -import com.gitee.spring.domain.core.utils.PathUtils; import com.gitee.spring.domain.event.repository.AbstractEventRepository; import lombok.Data; import lombok.EqualsAndHashCode; @@ -184,7 +184,7 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo } Set fieldNames = entityDefinition.getFieldNames(); - List boundEntityPropertyChains = entityDefinition.getBoundEntityPropertyChains(); + List boundSceneEntityProperties = entityDefinition.getBoundSceneEntityProperties(); for (String fieldName : fieldNames) { PropertyDefinition propertyDefinition = fieldPropertyDefinitionMap.get(fieldName); @@ -193,7 +193,7 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo } } - if (!propertyDefinitions.isEmpty() || !boundEntityPropertyChains.isEmpty()) { + if (!propertyDefinitions.isEmpty() || !boundSceneEntityProperties.isEmpty()) { RepositoryLocation repositoryLocation = new RepositoryLocation( finalMultiAccessPath, parentAccessPath, prefixAccessPath, absoluteAccessPath, forwardParent, parentConfiguredRepository, abstractDelegateRepository, configuredRepository, diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index 7054c6e9..6012aa12 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -32,8 +32,11 @@ public class EntityDefinition { private String orderBy; private String sort; private int orderAttribute; - private List bindingDefinitions; + private List allBindingDefinitions; + private List boundBindingDefinitions; + private List contextBindingDefinitions; private BindingDefinition boundIdBindingDefinition; + private Set entityJoinAliases; private List bindingColumns; private Set fieldNames; private Map entityPropertyChainMap; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 7b162830..a8803cb1 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -37,7 +37,7 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo if (entityExample.isDirtyQuery()) { List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); collectFieldValues(boundedContext, fieldValues, configuredRepository, entities); - addEntitiesToContext(boundedContext, repositoryClass, configuredRepository, entities); + buildIndexForEntities(boundedContext, repositoryClass, configuredRepository, entities); } } } @@ -83,9 +83,14 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { + for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { String bindAttribute = bindingDefinition.getBindAttribute(); - List boundValues = fieldValues.get(bindAttribute); + Object boundValues; + if (bindingDefinition.isFromContext()) { + boundValues = boundedContext.get(bindAttribute); + } else { + boundValues = fieldValues.get(bindAttribute); + } if (boundValues != null) { String aliasAttribute = bindingDefinition.getAliasAttribute(); EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); @@ -95,25 +100,23 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return entityExample; } - protected void addEntitiesToContext(BoundedContext boundedContext, - Class repositoryClass, - ConfiguredRepository configuredRepository, - List entities) { + protected void buildIndexForEntities(BoundedContext boundedContext, + Class repositoryClass, + ConfiguredRepository configuredRepository, + List entities) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityCaches entityCaches = boundedContext.getEntityCaches(); Map> entitiesMap = entityCaches.getOrCreateCache(repositoryClass, entityDefinition.getAccessPath()); - List bindingDefinitions = entityDefinition.getBindingDefinitions(); + List bindingDefinitions = entityDefinition.getBoundBindingDefinitions(); for (Object entity : entities) { StringBuilder builder = new StringBuilder(); for (BindingDefinition bindingDefinition : bindingDefinitions) { - if (!bindingDefinition.isFromContext()) { - String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityPropertyChain entityPropertyChain = bindingDefinition.getFieldEntityPropertyChain(); - Object boundValue = entityPropertyChain.getValue(entity); - builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); - } + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityPropertyChain entityPropertyChain = bindingDefinition.getFieldEntityPropertyChain(); + Object boundValue = entityPropertyChain.getValue(entity); + builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); } if (builder.length() > 0) { builder.delete(builder.length() - 2, builder.length()); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 6a7b2d67..a8c642f3 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -215,8 +215,12 @@ public abstract class AbstractContextRepository extends AbstractRepositor Object repository = repositoryClass != DefaultRepository.class ? applicationContext.getBean(repositoryClass) : null; List bindingDefinitions = new ArrayList<>(); + List boundBindingDefinitions = new ArrayList<>(); + List contextBindingDefinitions = new ArrayList<>(); BindingDefinition boundIdBindingDefinition = null; + Set entityJoinAliases = new LinkedHashSet<>(); List bindingColumns = new ArrayList<>(); + for (Binding bindingAnnotation : bindingAnnotations) { AnnotationAttributes bindingAttributes = AnnotationUtils.getAnnotationAttributes( bindingAnnotation, false, false); @@ -253,6 +257,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor boundEntityPropertyChain.initialize(); + entityJoinAliases.add(aliasAttribute); bindingColumns.add(StrUtil.toUnderlineCase(aliasAttribute)); EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); @@ -277,7 +282,13 @@ public abstract class AbstractContextRepository extends AbstractRepositor bindingAttributes, fieldAttribute, aliasAttribute, bindAttribute, isFromContext, isBoundId, belongAccessPath, belongConfiguredRepository, boundFieldName, boundEntityPropertyChain, null); + bindingDefinitions.add(bindingDefinition); + if (!isFromContext) { + boundBindingDefinitions.add(bindingDefinition); + } else { + contextBindingDefinitions.add(bindingDefinition); + } if (isBoundId) { boundIdBindingDefinition = bindingDefinition; @@ -292,9 +303,9 @@ public abstract class AbstractContextRepository extends AbstractRepositor isRoot, accessPath, annotatedElement, entityClass, isCollection, genericEntityClass, fieldName, attributes, sceneAttributeSet, mapper, pojoClass, sameType, mappedClass, - useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, - orderAttribute, bindingDefinitions, boundIdBindingDefinition, bindingColumns, - new LinkedHashSet<>(), new LinkedHashMap<>(), new ArrayList<>()); + useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, + bindingDefinitions, boundBindingDefinitions, contextBindingDefinitions, boundIdBindingDefinition, + entityJoinAliases, bindingColumns, new LinkedHashSet<>(), new LinkedHashMap<>(), new ArrayList<>()); EntityMapper entityMapper = newEntityMapper(entityDefinition); if (mapAsExample) { @@ -337,7 +348,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor entityPropertyChainMap.put(accessPath, relativeEntityPropertyChain); } - for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { + for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { String accessPath = prefixAccessPath + bindingDefinition.getFieldAttribute(); EntityPropertyChain entityPropertyChain = entityPropertyChainMap.get(accessPath); Assert.notNull(entityPropertyChain, "The binding field does not exist!"); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index ab7bf97d..c4a7b297 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -64,7 +64,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { + for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { Object boundValue = getBoundValue(boundedContext, bindingDefinition, rootEntity); if (boundValue != null) { String aliasAttribute = bindingDefinition.getAliasAttribute(); @@ -145,7 +145,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR protected void setBoundValueByContext(ConfiguredRepository configuredRepository, BoundedContext boundedContext, Object rootEntity, Object entity) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - for (BindingDefinition bindingDefinition : entityDefinition.getBindingDefinitions()) { + for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { if (!bindingDefinition.isBoundId()) { Object boundValue = getBoundValue(boundedContext, bindingDefinition, rootEntity); if (boundValue != null) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java index 199175b1..edef815b 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java @@ -8,6 +8,7 @@ import com.gitee.spring.domain.core.entity.EntityExample; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; public class BatchRepository extends ConfiguredRepository { @@ -26,12 +27,15 @@ public class BatchRepository extends ConfiguredRepository { if (entitiesMap.isEmpty()) { return Collections.emptyList(); } + Set entityJoinAliases = entityDefinition.getEntityJoinAliases(); EntityExample entityExample = (EntityExample) example; StringBuilder builder = new StringBuilder(); for (EntityCriterion entityCriterion : entityExample.getEntityCriteria()) { String fieldName = entityCriterion.getFieldName(); - Object fieldValue = entityCriterion.getFieldValue(); - builder.append(fieldName).append(": ").append(fieldValue).append(", "); + if (entityJoinAliases.contains(fieldName)) { + Object fieldValue = entityCriterion.getFieldValue(); + builder.append(fieldName).append(": ").append(fieldValue).append(", "); + } } if (builder.length() > 0) { builder.delete(builder.length() - 2, builder.length()); -- Gitee From 120d4c9b2e23c9971674381e491af5ab222d1c3d Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Tue, 14 Jun 2022 21:46:53 +0800 Subject: [PATCH 19/55] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=BB=A7=E6=89=BF?= =?UTF-8?q?=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/event/repository/AbstractEventRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-domain-event/src/main/java/com/gitee/spring/domain/event/repository/AbstractEventRepository.java b/spring-domain-event/src/main/java/com/gitee/spring/domain/event/repository/AbstractEventRepository.java index f2a7f5f3..34155887 100644 --- a/spring-domain-event/src/main/java/com/gitee/spring/domain/event/repository/AbstractEventRepository.java +++ b/spring-domain-event/src/main/java/com/gitee/spring/domain/event/repository/AbstractEventRepository.java @@ -1,11 +1,11 @@ package com.gitee.spring.domain.event.repository; -import com.gitee.spring.domain.core.repository.AbstractGenericRepository; +import com.gitee.spring.domain.core.repository.AbstractBatchRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import com.gitee.spring.domain.event.annotation.EnableEvent; import org.springframework.core.annotation.AnnotationUtils; -public abstract class AbstractEventRepository extends AbstractGenericRepository { +public abstract class AbstractEventRepository extends AbstractBatchRepository { protected boolean enableEvent; -- Gitee From 5e0e425c8ad30f31b6e115e4ea6242f94bbefe4e Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Wed, 15 Jun 2022 14:59:14 +0800 Subject: [PATCH 20/55] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/repository/AbstractBatchRepository.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index a8803cb1..d3d6093f 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -17,6 +17,11 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo @Override protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { + if (rootEntities.size() == 1) { + super.handleRootEntity(boundedContext, rootEntities.get(0)); + return; + } + if (boundedContext.getEntityCaches() == null) { boundedContext.setEntityCaches(new DefaultEntityCaches()); } -- Gitee From 7e0568f570426c08ee8c6cbedcbfba80a35b9877 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 16 Jun 2022 10:36:17 +0800 Subject: [PATCH 21/55] =?UTF-8?q?=E4=BC=98=E5=8C=96EntityExample=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/repository/ConfiguredRepository.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java index 92413ac7..e1fcdac2 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java @@ -47,13 +47,17 @@ public class ConfiguredRepository extends ProxyRepository { @Override public List selectByExample(BoundedContext boundedContext, Object example) { - example = example instanceof EntityExample ? ((EntityExample) example).buildExample() : example; + if (!entityDefinition.isUseEntityExample() && example instanceof EntityExample) { + example = ((EntityExample) example).buildExample(); + } return super.selectByExample(boundedContext, example); } @Override public T selectPageByExample(BoundedContext boundedContext, Object example, Object page) { - example = example instanceof EntityExample ? ((EntityExample) example).buildExample() : example; + if (!entityDefinition.isUseEntityExample() && example instanceof EntityExample) { + example = ((EntityExample) example).buildExample(); + } return super.selectPageByExample(boundedContext, example, page); } -- Gitee From bd8f984251163932aca73cc51ec0d2c725c6c8eb Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 16 Jun 2022 10:44:40 +0800 Subject: [PATCH 22/55] =?UTF-8?q?=E4=BC=98=E5=8C=96EntityExample=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/repository/ConfiguredRepository.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java index e1fcdac2..84d21cdc 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java @@ -61,4 +61,20 @@ public class ConfiguredRepository extends ProxyRepository { return super.selectPageByExample(boundedContext, example, page); } + @Override + public int updateByExample(Object entity, Object example) { + if (!entityDefinition.isUseEntityExample() && example instanceof EntityExample) { + example = ((EntityExample) example).buildExample(); + } + return super.updateByExample(entity, example); + } + + @Override + public int deleteByExample(Object example) { + if (!entityDefinition.isUseEntityExample() && example instanceof EntityExample) { + example = ((EntityExample) example).buildExample(); + } + return super.deleteByExample(example); + } + } -- Gitee From bc602866c1e74973a2349ebcedaaab973dbf0ec9 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 16 Jun 2022 12:39:25 +0800 Subject: [PATCH 23/55] =?UTF-8?q?=E7=AE=80=E5=8C=96EntityMapper=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain}/api/EntityCriterionBuilder.java | 5 +- .../builder/EQEntityCriterionBuilder.java | 31 +++++++ .../builder/GEEntityCriterionBuilder.java | 25 ++++++ .../builder/GTEntityCriterionBuilder.java | 25 ++++++ .../builder/LEEntityCriterionBuilder.java | 25 ++++++ .../builder/LTEntityCriterionBuilder.java | 25 ++++++ .../repository/MybatisPlusEntityMapper.java | 82 ++++--------------- .../builder/EqualEntityCriterionBuilder.java | 14 ---- .../GreaterThanEntityCriterionBuilder.java | 14 ---- ...aterThanOrEqualEntityCriterionBuilder.java | 14 ---- .../LessThanEntityCriterionBuilder.java | 14 ---- ...LessThanOrEqualEntityCriterionBuilder.java | 14 ---- .../config/DomainCoatingConfiguration.java | 37 --------- .../coating/entity/PropertyDefinition.java | 2 - .../repository/AbstractChainRepository.java | 13 +-- .../repository/AbstractCoatingRepository.java | 36 ++------ .../main/resources/META-INF/spring.factories | 1 - .../domain/core/api/EntityCriterion.java | 2 + .../spring/domain/core/api/EntityMapper.java | 10 +-- .../Attribute.java} | 4 +- .../domain/core/constants/Operator.java | 9 ++ .../core/entity/AbstractEntityCriterion.java | 1 + .../repository/AbstractBatchRepository.java | 3 +- .../repository/AbstractContextRepository.java | 28 +++---- .../repository/AbstractGenericRepository.java | 3 +- .../core/repository/DefaultRepository.java | 3 +- 26 files changed, 200 insertions(+), 240 deletions(-) rename {spring-domain-coating/src/main/java/com/gitee/spring/domain/coating => spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain}/api/EntityCriterionBuilder.java (34%) create mode 100644 spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/EQEntityCriterionBuilder.java create mode 100644 spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/GEEntityCriterionBuilder.java create mode 100644 spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/GTEntityCriterionBuilder.java create mode 100644 spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/LEEntityCriterionBuilder.java create mode 100644 spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/LTEntityCriterionBuilder.java delete mode 100644 spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/EqualEntityCriterionBuilder.java delete mode 100644 spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/GreaterThanEntityCriterionBuilder.java delete mode 100644 spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/GreaterThanOrEqualEntityCriterionBuilder.java delete mode 100644 spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/LessThanEntityCriterionBuilder.java delete mode 100644 spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/LessThanOrEqualEntityCriterionBuilder.java delete mode 100644 spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/config/DomainCoatingConfiguration.java delete mode 100644 spring-domain-coating/src/main/resources/META-INF/spring.factories rename spring-domain-core/src/main/java/com/gitee/spring/domain/core/{api/Constants.java => constants/Attribute.java} (89%) create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/constants/Operator.java diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/api/EntityCriterionBuilder.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/api/EntityCriterionBuilder.java similarity index 34% rename from spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/api/EntityCriterionBuilder.java rename to spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/api/EntityCriterionBuilder.java index c5d6980f..ab2e6917 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/api/EntityCriterionBuilder.java +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/api/EntityCriterionBuilder.java @@ -1,10 +1,9 @@ -package com.gitee.spring.domain.coating.api; +package com.gitee.spring.boot.starter.domain.api; import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityMapper; public interface EntityCriterionBuilder { - EntityCriterion newCriterion(EntityMapper entityMapper, String fieldName, Object fieldValue); + EntityCriterion newCriterion(String fieldName, Object fieldValue); } diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/EQEntityCriterionBuilder.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/EQEntityCriterionBuilder.java new file mode 100644 index 00000000..c25e486f --- /dev/null +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/EQEntityCriterionBuilder.java @@ -0,0 +1,31 @@ +package com.gitee.spring.boot.starter.domain.builder; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gitee.spring.boot.starter.domain.api.EntityCriterionBuilder; +import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.constants.Operator; +import com.gitee.spring.domain.core.entity.AbstractEntityCriterion; +import com.gitee.spring.domain.core.entity.EntityExample; + +import java.util.Collection; + +public class EQEntityCriterionBuilder implements EntityCriterionBuilder { + + @Override + public EntityCriterion newCriterion(String fieldName, Object fieldValue) { + return new AbstractEntityCriterion(fieldName, Operator.EQ, fieldValue) { + @Override + public void appendTo(EntityExample entityExample) { + QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); + String fieldName = StrUtil.toUnderlineCase(this.fieldName); + if (fieldValue instanceof Collection) { + queryWrapper.in(fieldName, (Collection) fieldValue); + } else { + queryWrapper.eq(fieldName, fieldValue); + } + } + }; + } + +} diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/GEEntityCriterionBuilder.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/GEEntityCriterionBuilder.java new file mode 100644 index 00000000..1e276183 --- /dev/null +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/GEEntityCriterionBuilder.java @@ -0,0 +1,25 @@ +package com.gitee.spring.boot.starter.domain.builder; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gitee.spring.boot.starter.domain.api.EntityCriterionBuilder; +import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.constants.Operator; +import com.gitee.spring.domain.core.entity.AbstractEntityCriterion; +import com.gitee.spring.domain.core.entity.EntityExample; + +public class GEEntityCriterionBuilder implements EntityCriterionBuilder { + + @Override + public EntityCriterion newCriterion(String fieldName, Object fieldValue) { + return new AbstractEntityCriterion(fieldName, Operator.GE, fieldValue) { + @Override + public void appendTo(EntityExample entityExample) { + QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); + String fieldName = StrUtil.toUnderlineCase(this.fieldName); + queryWrapper.ge(fieldName, fieldValue); + } + }; + } + +} diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/GTEntityCriterionBuilder.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/GTEntityCriterionBuilder.java new file mode 100644 index 00000000..9dd568c9 --- /dev/null +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/GTEntityCriterionBuilder.java @@ -0,0 +1,25 @@ +package com.gitee.spring.boot.starter.domain.builder; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gitee.spring.boot.starter.domain.api.EntityCriterionBuilder; +import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.constants.Operator; +import com.gitee.spring.domain.core.entity.AbstractEntityCriterion; +import com.gitee.spring.domain.core.entity.EntityExample; + +public class GTEntityCriterionBuilder implements EntityCriterionBuilder { + + @Override + public EntityCriterion newCriterion(String fieldName, Object fieldValue) { + return new AbstractEntityCriterion(fieldName, Operator.GT, fieldValue) { + @Override + public void appendTo(EntityExample entityExample) { + QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); + String fieldName = StrUtil.toUnderlineCase(this.fieldName); + queryWrapper.gt(fieldName, fieldValue); + } + }; + } + +} diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/LEEntityCriterionBuilder.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/LEEntityCriterionBuilder.java new file mode 100644 index 00000000..39edf59d --- /dev/null +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/LEEntityCriterionBuilder.java @@ -0,0 +1,25 @@ +package com.gitee.spring.boot.starter.domain.builder; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gitee.spring.boot.starter.domain.api.EntityCriterionBuilder; +import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.constants.Operator; +import com.gitee.spring.domain.core.entity.AbstractEntityCriterion; +import com.gitee.spring.domain.core.entity.EntityExample; + +public class LEEntityCriterionBuilder implements EntityCriterionBuilder { + + @Override + public EntityCriterion newCriterion(String fieldName, Object fieldValue) { + return new AbstractEntityCriterion(fieldName, Operator.LE, fieldValue) { + @Override + public void appendTo(EntityExample entityExample) { + QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); + String fieldName = StrUtil.toUnderlineCase(this.fieldName); + queryWrapper.le(fieldName, fieldValue); + } + }; + } + +} diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/LTEntityCriterionBuilder.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/LTEntityCriterionBuilder.java new file mode 100644 index 00000000..eade336c --- /dev/null +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/builder/LTEntityCriterionBuilder.java @@ -0,0 +1,25 @@ +package com.gitee.spring.boot.starter.domain.builder; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gitee.spring.boot.starter.domain.api.EntityCriterionBuilder; +import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.constants.Operator; +import com.gitee.spring.domain.core.entity.AbstractEntityCriterion; +import com.gitee.spring.domain.core.entity.EntityExample; + +public class LTEntityCriterionBuilder implements EntityCriterionBuilder { + + @Override + public EntityCriterion newCriterion(String fieldName, Object fieldValue) { + return new AbstractEntityCriterion(fieldName, Operator.LT, fieldValue) { + @Override + public void appendTo(EntityExample entityExample) { + QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); + String fieldName = StrUtil.toUnderlineCase(this.fieldName); + queryWrapper.lt(fieldName, fieldValue); + } + }; + } + +} diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java index cc38eb01..bab81db1 100644 --- a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java @@ -1,21 +1,33 @@ package com.gitee.spring.boot.starter.domain.repository; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.gitee.spring.boot.starter.domain.api.EntityCriterionBuilder; +import com.gitee.spring.boot.starter.domain.builder.*; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; -import com.gitee.spring.domain.core.entity.AbstractEntityCriterion; +import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.BoundedContext; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityExample; -import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class MybatisPlusEntityMapper implements EntityMapper { + public static Map operatorEntityCriterionBuilderMap = new ConcurrentHashMap<>(); + + static { + operatorEntityCriterionBuilderMap.put(Operator.EQ, new EQEntityCriterionBuilder()); + operatorEntityCriterionBuilderMap.put(Operator.GT, new GTEntityCriterionBuilder()); + operatorEntityCriterionBuilderMap.put(Operator.GE, new GEEntityCriterionBuilder()); + operatorEntityCriterionBuilderMap.put(Operator.LT, new LTEntityCriterionBuilder()); + operatorEntityCriterionBuilderMap.put(Operator.LE, new LEEntityCriterionBuilder()); + } + @Override public Object newPage(Integer pageNum, Integer pageSize) { return new Page<>(pageNum, pageSize); @@ -66,67 +78,9 @@ public class MybatisPlusEntityMapper implements EntityMapper { } @Override - public EntityCriterion newEqualCriterion(String fieldName, Object fieldValue) { - return new AbstractEntityCriterion(fieldName, fieldValue) { - @Override - public void appendTo(EntityExample entityExample) { - QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); - String fieldName = StrUtil.toUnderlineCase(this.fieldName); - if (fieldValue instanceof Collection) { - queryWrapper.in(fieldName, (Collection) fieldValue); - } else { - queryWrapper.eq(fieldName, fieldValue); - } - } - }; - } - - @Override - public EntityCriterion newGreaterThanCriterion(String fieldName, Object fieldValue) { - return new AbstractEntityCriterion(fieldName, fieldValue) { - @Override - public void appendTo(EntityExample entityExample) { - QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); - String fieldName = StrUtil.toUnderlineCase(this.fieldName); - queryWrapper.gt(fieldName, fieldValue); - } - }; - } - - @Override - public EntityCriterion newGreaterThanOrEqualCriterion(String fieldName, Object fieldValue) { - return new AbstractEntityCriterion(fieldName, fieldValue) { - @Override - public void appendTo(EntityExample entityExample) { - QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); - String fieldName = StrUtil.toUnderlineCase(this.fieldName); - queryWrapper.ge(fieldName, fieldValue); - } - }; - } - - @Override - public EntityCriterion newLessThanCriterion(String fieldName, Object fieldValue) { - return new AbstractEntityCriterion(fieldName, fieldValue) { - @Override - public void appendTo(EntityExample entityExample) { - QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); - String fieldName = StrUtil.toUnderlineCase(this.fieldName); - queryWrapper.lt(fieldName, fieldValue); - } - }; - } - - @Override - public EntityCriterion newLessThanOrEqualCriterion(String fieldName, Object fieldValue) { - return new AbstractEntityCriterion(fieldName, fieldValue) { - @Override - public void appendTo(EntityExample entityExample) { - QueryWrapper queryWrapper = (QueryWrapper) entityExample.getExample(); - String fieldName = StrUtil.toUnderlineCase(this.fieldName); - queryWrapper.le(fieldName, fieldValue); - } - }; + public EntityCriterion newCriterion(String fieldName, String operator, Object fieldValue) { + EntityCriterionBuilder entityCriterionBuilder = operatorEntityCriterionBuilderMap.get(operator); + return entityCriterionBuilder.newCriterion(fieldName, fieldValue); } } diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/EqualEntityCriterionBuilder.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/EqualEntityCriterionBuilder.java deleted file mode 100644 index df9d307e..00000000 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/EqualEntityCriterionBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.gitee.spring.domain.coating.builder; - -import com.gitee.spring.domain.coating.api.EntityCriterionBuilder; -import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityMapper; - -public class EqualEntityCriterionBuilder implements EntityCriterionBuilder { - - @Override - public EntityCriterion newCriterion(EntityMapper entityMapper, String fieldName, Object fieldValue) { - return entityMapper.newEqualCriterion(fieldName, fieldValue); - } - -} diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/GreaterThanEntityCriterionBuilder.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/GreaterThanEntityCriterionBuilder.java deleted file mode 100644 index be3866b4..00000000 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/GreaterThanEntityCriterionBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.gitee.spring.domain.coating.builder; - -import com.gitee.spring.domain.coating.api.EntityCriterionBuilder; -import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityMapper; - -public class GreaterThanEntityCriterionBuilder implements EntityCriterionBuilder { - - @Override - public EntityCriterion newCriterion(EntityMapper entityMapper, String fieldName, Object fieldValue) { - return entityMapper.newGreaterThanCriterion(fieldName, fieldValue); - } - -} diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/GreaterThanOrEqualEntityCriterionBuilder.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/GreaterThanOrEqualEntityCriterionBuilder.java deleted file mode 100644 index 0c0f1204..00000000 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/GreaterThanOrEqualEntityCriterionBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.gitee.spring.domain.coating.builder; - -import com.gitee.spring.domain.coating.api.EntityCriterionBuilder; -import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityMapper; - -public class GreaterThanOrEqualEntityCriterionBuilder implements EntityCriterionBuilder { - - @Override - public EntityCriterion newCriterion(EntityMapper entityMapper, String fieldName, Object fieldValue) { - return entityMapper.newGreaterThanOrEqualCriterion(fieldName, fieldValue); - } - -} diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/LessThanEntityCriterionBuilder.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/LessThanEntityCriterionBuilder.java deleted file mode 100644 index e94d01be..00000000 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/LessThanEntityCriterionBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.gitee.spring.domain.coating.builder; - -import com.gitee.spring.domain.coating.api.EntityCriterionBuilder; -import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityMapper; - -public class LessThanEntityCriterionBuilder implements EntityCriterionBuilder { - - @Override - public EntityCriterion newCriterion(EntityMapper entityMapper, String fieldName, Object fieldValue) { - return entityMapper.newLessThanCriterion(fieldName, fieldValue); - } - -} diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/LessThanOrEqualEntityCriterionBuilder.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/LessThanOrEqualEntityCriterionBuilder.java deleted file mode 100644 index 164c388e..00000000 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/builder/LessThanOrEqualEntityCriterionBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.gitee.spring.domain.coating.builder; - -import com.gitee.spring.domain.coating.api.EntityCriterionBuilder; -import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityMapper; - -public class LessThanOrEqualEntityCriterionBuilder implements EntityCriterionBuilder { - - @Override - public EntityCriterion newCriterion(EntityMapper entityMapper, String fieldName, Object fieldValue) { - return entityMapper.newLessThanOrEqualCriterion(fieldName, fieldValue); - } - -} diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/config/DomainCoatingConfiguration.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/config/DomainCoatingConfiguration.java deleted file mode 100644 index ada4aeb1..00000000 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/config/DomainCoatingConfiguration.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.gitee.spring.domain.coating.config; - -import com.gitee.spring.domain.coating.builder.*; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.Order; - -@Order(-100) -@Configuration -public class DomainCoatingConfiguration { - - @Bean - public EqualEntityCriterionBuilder equalCriterionBuilder() { - return new EqualEntityCriterionBuilder(); - } - - @Bean - public GreaterThanEntityCriterionBuilder greaterThanCriterionBuilder() { - return new GreaterThanEntityCriterionBuilder(); - } - - @Bean - public GreaterThanOrEqualEntityCriterionBuilder greaterThanOrEqualCriterionBuilder() { - return new GreaterThanOrEqualEntityCriterionBuilder(); - } - - @Bean - public LessThanEntityCriterionBuilder lessThanCriterionBuilder() { - return new LessThanEntityCriterionBuilder(); - } - - @Bean - public LessThanOrEqualEntityCriterionBuilder lessThanOrEqualCriterionBuilder() { - return new LessThanOrEqualEntityCriterionBuilder(); - } - -} diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/PropertyDefinition.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/PropertyDefinition.java index 7870f36a..3f2f9529 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/PropertyDefinition.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/PropertyDefinition.java @@ -1,6 +1,5 @@ package com.gitee.spring.domain.coating.entity; -import com.gitee.spring.domain.coating.api.EntityCriterionBuilder; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import lombok.AllArgsConstructor; import lombok.Data; @@ -21,6 +20,5 @@ public class PropertyDefinition { private String aliasAttribute; private String operatorAttribute; private boolean boundLocation; - private EntityCriterionBuilder entityCriterionBuilder; private EntityPropertyChain entityPropertyChain; } diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java index 37d58988..22b40d3d 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java @@ -3,13 +3,13 @@ package com.gitee.spring.domain.coating.repository; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ReflectUtil; -import com.gitee.spring.domain.coating.api.EntityCriterionBuilder; import com.gitee.spring.domain.coating.entity.ChainCriterion; import com.gitee.spring.domain.coating.entity.PropertyDefinition; import com.gitee.spring.domain.coating.entity.RepositoryLocation; import com.gitee.spring.domain.coating.impl.DefaultCoatingAssembler; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; +import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.extern.slf4j.Slf4j; @@ -63,10 +63,12 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo for (PropertyDefinition propertyDefinition : repositoryLocation.getCollectedPropertyDefinitions()) { Object fieldValue = ReflectUtil.getFieldValue(coating, propertyDefinition.getDeclaredField()); if (fieldValue != null) { - EntityCriterionBuilder entityCriterionBuilder = propertyDefinition.getEntityCriterionBuilder(); + String aliasAttribute = propertyDefinition.getAliasAttribute(); + String operatorAttribute = propertyDefinition.getOperatorAttribute(); + ConfiguredRepository queryRepository = chainCriterion.getQueryRepository(); EntityMapper entityMapper = queryRepository.getEntityMapper(); - EntityCriterion entityCriterion = entityCriterionBuilder.newCriterion(entityMapper, propertyDefinition.getAliasAttribute(), fieldValue); + EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, operatorAttribute, fieldValue); entityExample.addCriterion(entityCriterion); } } @@ -100,7 +102,8 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo for (BindingDefinition bindingDefinition : entityDefinition.getContextBindingDefinitions()) { Object boundValue = boundedContext.get(bindingDefinition.getBindAttribute()); if (boundValue != null) { - EntityCriterion entityCriterion = entityMapper.newEqualCriterion(bindingDefinition.getAliasAttribute(), boundValue); + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, boundValue); entityExample.addCriterion(entityCriterion); } } @@ -139,7 +142,7 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo ConfiguredRepository targetQueryRepository = targetChainCriterion.getQueryRepository(); EntityMapper targetEntityMapper = targetQueryRepository.getEntityMapper(); - EntityCriterion entityCriterion = targetEntityMapper.newEqualCriterion(boundFieldName, fieldValue); + EntityCriterion entityCriterion = targetEntityMapper.newCriterion(boundFieldName, Operator.EQ, fieldValue); targetEntityExample.addCriterion(entityCriterion); } } diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java index e20b9daa..9247c104 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java @@ -7,14 +7,12 @@ import com.gitee.spring.domain.coating.annotation.CoatingScan; import com.gitee.spring.domain.coating.annotation.IgnoreProperty; import com.gitee.spring.domain.coating.annotation.Property; import com.gitee.spring.domain.coating.api.CoatingAssembler; -import com.gitee.spring.domain.coating.api.EntityCriterionBuilder; import com.gitee.spring.domain.coating.api.CustomAssembler; -import com.gitee.spring.domain.coating.builder.*; import com.gitee.spring.domain.coating.entity.CoatingDefinition; import com.gitee.spring.domain.coating.impl.DefaultCoatingAssembler; import com.gitee.spring.domain.coating.entity.PropertyDefinition; import com.gitee.spring.domain.coating.utils.ResourceUtils; -import com.gitee.spring.domain.core.api.Constants; +import com.gitee.spring.domain.core.constants.Attribute; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import com.gitee.spring.domain.coating.entity.RepositoryLocation; @@ -81,24 +79,21 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo boolean isBoundLocation = false; if (attributes != null) { - locationAttribute = attributes.getString(Constants.LOCATION_ATTRIBUTE); - aliasAttribute = attributes.getString(Constants.ALIAS_ATTRIBUTE); - operatorAttribute = attributes.getString(Constants.OPERATOR_ATTRIBUTE); + locationAttribute = attributes.getString(Attribute.LOCATION_ATTRIBUTE); + aliasAttribute = attributes.getString(Attribute.ALIAS_ATTRIBUTE); + operatorAttribute = attributes.getString(Attribute.OPERATOR_ATTRIBUTE); isBoundLocation = locationAttribute.startsWith("/"); } if (StringUtils.isBlank(aliasAttribute)) { aliasAttribute = fieldName; } - EntityCriterionBuilder entityCriterionBuilder = getEntityCriterionBuilder(operatorAttribute); - Assert.notNull(entityCriterionBuilder, "The builder of criterion cannot be null!"); - EntityPropertyChain entityPropertyChain = fieldEntityPropertyChainMap.get(fieldName); PropertyDefinition propertyDefinition = new PropertyDefinition( declaredField, fieldClass, isCollection, genericFieldClass, fieldName, attributes, locationAttribute, aliasAttribute, operatorAttribute, - isBoundLocation, entityCriterionBuilder, entityPropertyChain); + isBoundLocation, entityPropertyChain); allPropertyDefinitionMap.put(fieldName, propertyDefinition); @@ -125,7 +120,7 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(coatingClass, Coating.class); String name = null; if (attributes != null) { - name = attributes.getString(Constants.NAME_ATTRIBUTE); + name = attributes.getString(Attribute.NAME_ATTRIBUTE); } if (StringUtils.isBlank(name)) { name = StrUtil.lowerFirst(coatingClass.getSimpleName()); @@ -142,25 +137,6 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo } } - protected EntityCriterionBuilder getEntityCriterionBuilder(String operatorAttribute) { - if ("=".equals(operatorAttribute)) { - return applicationContext.getBean(EqualEntityCriterionBuilder.class); - - } else if (">".equals(operatorAttribute)) { - return applicationContext.getBean(GreaterThanEntityCriterionBuilder.class); - - } else if (">=".equals(operatorAttribute)) { - return applicationContext.getBean(GreaterThanOrEqualEntityCriterionBuilder.class); - - } else if ("<".equals(operatorAttribute)) { - return applicationContext.getBean(LessThanEntityCriterionBuilder.class); - - } else if ("<=".equals(operatorAttribute)) { - return applicationContext.getBean(LessThanOrEqualEntityCriterionBuilder.class); - } - return null; - } - protected void collectRepositoryLocationMap(Map repositoryLocationMap, List multiAccessPath, ConfiguredRepository parentConfiguredRepository, diff --git a/spring-domain-coating/src/main/resources/META-INF/spring.factories b/spring-domain-coating/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 706563c4..00000000 --- a/spring-domain-coating/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.gitee.spring.domain.coating.config.DomainCoatingConfiguration \ No newline at end of file diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCriterion.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCriterion.java index c27593af..271ede65 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCriterion.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCriterion.java @@ -6,6 +6,8 @@ public interface EntityCriterion { String getFieldName(); + String getOperator(); + Object getFieldValue(); void appendTo(EntityExample entityExample); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java index 3194535a..5687132a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java @@ -16,14 +16,6 @@ public interface EntityMapper { EntityExample newExample(EntityDefinition entityDefinition, BoundedContext boundedContext); - EntityCriterion newEqualCriterion(String fieldName, Object fieldValue); - - EntityCriterion newGreaterThanCriterion(String fieldName, Object fieldValue); - - EntityCriterion newGreaterThanOrEqualCriterion(String fieldName, Object fieldValue); - - EntityCriterion newLessThanCriterion(String fieldName, Object fieldValue); - - EntityCriterion newLessThanOrEqualCriterion(String fieldName, Object fieldValue); + EntityCriterion newCriterion(String fieldName, String operator, Object fieldValue); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/Constants.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/constants/Attribute.java similarity index 89% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/Constants.java rename to spring-domain-core/src/main/java/com/gitee/spring/domain/core/constants/Attribute.java index 7c762b3a..b70f3379 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/Constants.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/constants/Attribute.java @@ -1,6 +1,6 @@ -package com.gitee.spring.domain.core.api; +package com.gitee.spring.domain.core.constants; -public interface Constants { +public interface Attribute { String NAME_ATTRIBUTE = "name"; String SCENE_ATTRIBUTE = "scene"; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/constants/Operator.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/constants/Operator.java new file mode 100644 index 00000000..590e4368 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/constants/Operator.java @@ -0,0 +1,9 @@ +package com.gitee.spring.domain.core.constants; + +public interface Operator { + String EQ = "="; + String GT = ">"; + String GE = ">="; + String LT = "<"; + String LE = "<="; +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/AbstractEntityCriterion.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/AbstractEntityCriterion.java index 6c7c201b..7eac6bda 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/AbstractEntityCriterion.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/AbstractEntityCriterion.java @@ -8,5 +8,6 @@ import lombok.Data; @AllArgsConstructor public abstract class AbstractEntityCriterion implements EntityCriterion { protected String fieldName; + protected String Operator; protected Object fieldValue; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index d3d6093f..39f1498d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -3,6 +3,7 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; import com.gitee.spring.domain.core.api.EntityCaches; +import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; import com.gitee.spring.domain.core.impl.DefaultEntityCaches; @@ -98,7 +99,7 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo } if (boundValues != null) { String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValues); + EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, boundValues); entityExample.addCriterion(entityCriterion); } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index a8c642f3..99a9d8f2 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -9,7 +9,7 @@ import com.gitee.spring.domain.core.annotation.Repository; import com.gitee.spring.domain.core.api.EntityAssembler; import com.gitee.spring.domain.core.api.EntityMapper; import com.gitee.spring.domain.core.entity.BindingDefinition; -import com.gitee.spring.domain.core.api.Constants; +import com.gitee.spring.domain.core.constants.Attribute; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import com.gitee.spring.domain.core.entity.SceneEntityProperty; @@ -71,7 +71,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(this.getClass(), Repository.class); if (attributes != null) { - name = attributes.getString(Constants.NAME_ATTRIBUTE); + name = attributes.getString(Attribute.NAME_ATTRIBUTE); } if (StringUtils.isBlank(name)) { name = StrUtil.lowerFirst(entityClass.getSimpleName()); @@ -169,10 +169,10 @@ public abstract class AbstractContextRepository extends AbstractRepositor AnnotationAttributes attributes, Set bindingAnnotations) { - String[] sceneAttributeStrs = attributes.getStringArray(Constants.SCENE_ATTRIBUTE); + String[] sceneAttributeStrs = attributes.getStringArray(Attribute.SCENE_ATTRIBUTE); Set sceneAttributeSet = new LinkedHashSet<>(Arrays.asList(sceneAttributeStrs)); - Class mapperClass = attributes.getClass(Constants.MAPPER_ATTRIBUTE); + Class mapperClass = attributes.getClass(Attribute.MAPPER_ATTRIBUTE); Object mapper = null; Class pojoClass = null; if (mapperClass != Object.class) { @@ -190,11 +190,11 @@ public abstract class AbstractContextRepository extends AbstractRepositor boolean sameType = genericEntityClass == pojoClass; Class mappedClass = pojoClass != null ? pojoClass : genericEntityClass; - boolean useEntityExample = attributes.getBoolean(Constants.USE_ENTITY_EXAMPLE_ATTRIBUTE); - boolean mapAsExample = attributes.getBoolean(Constants.MAP_AS_EXAMPLE_ATTRIBUTE); + boolean useEntityExample = attributes.getBoolean(Attribute.USE_ENTITY_EXAMPLE_ATTRIBUTE); + boolean mapAsExample = attributes.getBoolean(Attribute.MAP_AS_EXAMPLE_ATTRIBUTE); - String orderByAsc = attributes.getString(Constants.ORDER_BY_ASC_ATTRIBUTE); - String orderByDesc = attributes.getString(Constants.ORDER_BY_DESC_ATTRIBUTE); + String orderByAsc = attributes.getString(Attribute.ORDER_BY_ASC_ATTRIBUTE); + String orderByDesc = attributes.getString(Attribute.ORDER_BY_DESC_ATTRIBUTE); String orderBy = null; String sort = null; if (StringUtils.isNotBlank(orderByAsc)) { @@ -206,12 +206,12 @@ public abstract class AbstractContextRepository extends AbstractRepositor sort = "desc"; } - int orderAttribute = attributes.getNumber(Constants.ORDER_ATTRIBUTE).intValue(); + int orderAttribute = attributes.getNumber(Attribute.ORDER_ATTRIBUTE).intValue(); - Class assemblerClass = attributes.getClass(Constants.ASSEMBLER_ATTRIBUTE); + Class assemblerClass = attributes.getClass(Attribute.ASSEMBLER_ATTRIBUTE); EntityAssembler entityAssembler = (EntityAssembler) applicationContext.getBean(assemblerClass); - Class repositoryClass = attributes.getClass(Constants.REPOSITORY_ATTRIBUTE); + Class repositoryClass = attributes.getClass(Attribute.REPOSITORY_ATTRIBUTE); Object repository = repositoryClass != DefaultRepository.class ? applicationContext.getBean(repositoryClass) : null; List bindingDefinitions = new ArrayList<>(); @@ -225,9 +225,9 @@ public abstract class AbstractContextRepository extends AbstractRepositor AnnotationAttributes bindingAttributes = AnnotationUtils.getAnnotationAttributes( bindingAnnotation, false, false); - String fieldAttribute = bindingAttributes.getString(Constants.FIELD_ATTRIBUTE); - String aliasAttribute = bindingAttributes.getString(Constants.ALIAS_ATTRIBUTE); - String bindAttribute = bindingAttributes.getString(Constants.BIND_ATTRIBUTE); + String fieldAttribute = bindingAttributes.getString(Attribute.FIELD_ATTRIBUTE); + String aliasAttribute = bindingAttributes.getString(Attribute.ALIAS_ATTRIBUTE); + String bindAttribute = bindingAttributes.getString(Attribute.BIND_ATTRIBUTE); if (StringUtils.isBlank(aliasAttribute)) { aliasAttribute = fieldAttribute; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index c4a7b297..05759c33 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; import com.gitee.spring.domain.core.api.EntityProperty; +import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; import java.util.Collection; @@ -68,7 +69,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR Object boundValue = getBoundValue(boundedContext, bindingDefinition, rootEntity); if (boundValue != null) { String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityCriterion entityCriterion = entityMapper.newEqualCriterion(aliasAttribute, boundValue); + EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, boundValue); entityExample.addCriterion(entityCriterion); } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java index 6791b603..02a74bdc 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert; import com.gitee.spring.domain.core.api.EntityAssembler; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; +import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.BoundedContext; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityExample; @@ -95,7 +96,7 @@ public class DefaultRepository extends ProxyRepository { Object persistentObject = entityAssembler.disassemble(entityDefinition, boundedContext, entity); if (persistentObject != null) { EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - EntityCriterion entityCriterion = entityMapper.newEqualCriterion("id", primaryKey); + EntityCriterion entityCriterion = entityMapper.newCriterion("id", Operator.EQ, primaryKey); entityExample.addCriterion(entityCriterion); return super.updateByExample(persistentObject, entityExample.buildExample()); } -- Gitee From 7f3358e2d376b43d739d18afbcc01fa87e9e78db Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 16 Jun 2022 13:03:37 +0800 Subject: [PATCH 24/55] =?UTF-8?q?=E7=AE=80=E5=8C=96EntityMapper=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/mapper/MapEntityMapper.java | 24 ++---------------- .../core/mapper/NoBuiltEntityMapper.java | 25 ------------------- .../domain/core/mapper/ProxyEntityMapper.java | 24 ++---------------- .../repository/AbstractBatchRepository.java | 2 +- .../repository/AbstractContextRepository.java | 6 +---- 5 files changed, 6 insertions(+), 75 deletions(-) delete mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/NoBuiltEntityMapper.java diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/MapEntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/MapEntityMapper.java index 685fd2e4..7317c476 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/MapEntityMapper.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/MapEntityMapper.java @@ -24,8 +24,8 @@ public class MapEntityMapper extends ProxyEntityMapper { } @Override - public EntityCriterion newEqualCriterion(String fieldName, Object fieldValue) { - return new AbstractEntityCriterion(fieldName, fieldValue) { + public EntityCriterion newCriterion(String fieldName, String operator, Object fieldValue) { + return new AbstractEntityCriterion(fieldName, operator, fieldValue) { @Override @SuppressWarnings("unchecked") public void appendTo(EntityExample entityExample) { @@ -43,24 +43,4 @@ public class MapEntityMapper extends ProxyEntityMapper { }; } - @Override - public EntityCriterion newGreaterThanCriterion(String fieldName, Object fieldValue) { - return newEqualCriterion(fieldName + "::GreaterThan", fieldValue); - } - - @Override - public EntityCriterion newGreaterThanOrEqualCriterion(String fieldName, Object fieldValue) { - return newEqualCriterion(fieldName + "::GreaterThanOrEqual", fieldValue); - } - - @Override - public EntityCriterion newLessThanCriterion(String fieldName, Object fieldValue) { - return newEqualCriterion(fieldName + "::LessThan", fieldValue); - } - - @Override - public EntityCriterion newLessThanOrEqualCriterion(String fieldName, Object fieldValue) { - return newEqualCriterion(fieldName + "::LessThanOrEqual", fieldValue); - } - } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/NoBuiltEntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/NoBuiltEntityMapper.java deleted file mode 100644 index 64cd49da..00000000 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/NoBuiltEntityMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.gitee.spring.domain.core.mapper; - -import com.gitee.spring.domain.core.api.EntityMapper; -import com.gitee.spring.domain.core.entity.BoundedContext; -import com.gitee.spring.domain.core.entity.EntityDefinition; -import com.gitee.spring.domain.core.entity.EntityExample; - -public class NoBuiltEntityMapper extends ProxyEntityMapper { - - public NoBuiltEntityMapper(EntityMapper entityMapper) { - super(entityMapper); - } - - @Override - public EntityExample newExample(EntityDefinition entityDefinition, BoundedContext boundedContext) { - EntityExample entityExample = super.newExample(entityDefinition, boundedContext); - return new EntityExample(entityExample) { - @Override - public Object buildExample() { - return example; - } - }; - } - -} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java index e14c9f70..1ac6d244 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java @@ -37,28 +37,8 @@ public class ProxyEntityMapper implements EntityMapper { } @Override - public EntityCriterion newEqualCriterion(String fieldName, Object fieldValue) { - return entityMapper.newEqualCriterion(fieldName, fieldValue); - } - - @Override - public EntityCriterion newGreaterThanCriterion(String fieldName, Object fieldValue) { - return entityMapper.newGreaterThanCriterion(fieldName, fieldValue); - } - - @Override - public EntityCriterion newGreaterThanOrEqualCriterion(String fieldName, Object fieldValue) { - return entityMapper.newGreaterThanOrEqualCriterion(fieldName, fieldValue); - } - - @Override - public EntityCriterion newLessThanCriterion(String fieldName, Object fieldValue) { - return entityMapper.newLessThanCriterion(fieldName, fieldValue); - } - - @Override - public EntityCriterion newLessThanOrEqualCriterion(String fieldName, Object fieldValue) { - return entityMapper.newLessThanOrEqualCriterion(fieldName, fieldValue); + public EntityCriterion newCriterion(String fieldName, String operator, Object fieldValue) { + return entityMapper.newCriterion(fieldName, operator, fieldValue); } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 39f1498d..de81f7c6 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -41,7 +41,7 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo if (isMatchScenes(boundedContext, configuredRepository)) { EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); if (entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(boundedContext, entityExample.buildExample()); + List entities = configuredRepository.selectByExample(boundedContext, entityExample); collectFieldValues(boundedContext, fieldValues, configuredRepository, entities); buildIndexForEntities(boundedContext, repositoryClass, configuredRepository, entities); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 99a9d8f2..a8fd218e 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -14,7 +14,6 @@ import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import com.gitee.spring.domain.core.entity.SceneEntityProperty; import com.gitee.spring.domain.core.mapper.MapEntityMapper; -import com.gitee.spring.domain.core.mapper.NoBuiltEntityMapper; import com.gitee.spring.domain.core.utils.PathUtils; import com.gitee.spring.domain.core.utils.ReflectUtils; import lombok.Data; @@ -311,10 +310,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor if (mapAsExample) { entityMapper = new MapEntityMapper(entityMapper); } - if (useEntityExample) { - entityMapper = new NoBuiltEntityMapper(entityMapper); - } - + if (repository == null) { Assert.isTrue(mapper != Object.class, "The mapper cannot be object class!"); repository = new DefaultRepository(entityDefinition, entityMapper, entityAssembler, newRepository(entityDefinition)); -- Gitee From bc5677d4ca5366495075584cb330308685d680cd Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 16 Jun 2022 14:09:30 +0800 Subject: [PATCH 25/55] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=89=E7=85=A7?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E5=AD=97=E6=AE=B5=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/spring/domain/core/entity/EntityDefinition.java | 2 +- .../gitee/spring/domain/core/entity/EntityExample.java | 2 +- .../domain/core/repository/AbstractContextRepository.java | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index 6012aa12..6b1e153b 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -29,7 +29,7 @@ public class EntityDefinition { private boolean mapAsExample; private String orderByAsc; private String orderByDesc; - private String orderBy; + private String[] orderBy; private String sort; private int orderAttribute; private List allBindingDefinitions; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityExample.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityExample.java index 4044b3c7..9be0e2c6 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityExample.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityExample.java @@ -13,7 +13,7 @@ public class EntityExample { protected Object example; protected List columns; protected List entityCriteria = new ArrayList<>(); - protected String orderBy; + protected String[] orderBy; protected String sort; public EntityExample(Object example) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index a8fd218e..0a27ea78 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -194,14 +194,14 @@ public abstract class AbstractContextRepository extends AbstractRepositor String orderByAsc = attributes.getString(Attribute.ORDER_BY_ASC_ATTRIBUTE); String orderByDesc = attributes.getString(Attribute.ORDER_BY_DESC_ATTRIBUTE); - String orderBy = null; + String[] orderBy = null; String sort = null; if (StringUtils.isNotBlank(orderByAsc)) { - orderBy = orderByAsc; + orderBy = StrUtil.splitTrim(orderByAsc, ",").toArray(new String[0]); sort = "asc"; } if (StringUtils.isNotBlank(orderByDesc)) { - orderBy = orderByAsc; + orderBy = StrUtil.splitTrim(orderByDesc, ",").toArray(new String[0]); sort = "desc"; } @@ -310,7 +310,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor if (mapAsExample) { entityMapper = new MapEntityMapper(entityMapper); } - + if (repository == null) { Assert.isTrue(mapper != Object.class, "The mapper cannot be object class!"); repository = new DefaultRepository(entityDefinition, entityMapper, entityAssembler, newRepository(entityDefinition)); -- Gitee From c8debd67a8f48cd037f855db559f9d9490be7806 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 16 Jun 2022 15:56:30 +0800 Subject: [PATCH 26/55] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=8D=E5=90=91?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=92=8C=E6=AD=A3=E5=90=91=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=97=B6=E5=88=A9=E7=94=A8=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/coating/entity/ChainCriterion.java | 2 ++ .../repository/AbstractChainRepository.java | 17 ++++++++++++++--- .../repository/AbstractBatchRepository.java | 17 +++++++++++------ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/ChainCriterion.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/ChainCriterion.java index 66b131f2..4674ab56 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/ChainCriterion.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/ChainCriterion.java @@ -1,6 +1,7 @@ package com.gitee.spring.domain.coating.entity; import com.gitee.spring.domain.core.entity.EntityExample; +import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.AllArgsConstructor; import lombok.Data; @@ -10,6 +11,7 @@ import lombok.Data; public class ChainCriterion { private String definitionAccessPath; private ConfiguredRepository definitionRepository; + private AbstractDelegateRepository abstractDelegateRepository; private ConfiguredRepository queryRepository; private EntityExample entityExample; } diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java index 22b40d3d..d082be2c 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java @@ -11,6 +11,8 @@ import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; +import com.gitee.spring.domain.core.impl.DefaultEntityCaches; +import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.extern.slf4j.Slf4j; @@ -50,12 +52,13 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo definitionRepository = repositoryLocation.getParentConfiguredRepository(); } + AbstractDelegateRepository abstractDelegateRepository = repositoryLocation.getAbstractDelegateRepository(); ConfiguredRepository queryRepository = repositoryLocation.getBelongConfiguredRepository(); EntityDefinition entityDefinition = queryRepository.getEntityDefinition(); EntityMapper entityMapper = queryRepository.getEntityMapper(); EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - return new ChainCriterion(definitionAccessPath, definitionRepository, queryRepository, entityExample); + return new ChainCriterion(definitionAccessPath, definitionRepository, abstractDelegateRepository, queryRepository, entityExample); } protected void addToExampleOfCriterion(RepositoryLocation repositoryLocation, Object coating, ChainCriterion chainCriterion) { @@ -75,14 +78,21 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo } protected void executeChainQuery(BoundedContext boundedContext, Map criterionMap) { + + if (boundedContext.getEntityCaches() == null) { + boundedContext.setEntityCaches(new DefaultEntityCaches()); + } + criterionMap.forEach((accessPath, chainCriterion) -> { if ("/".equals(accessPath)) return; String definitionAccessPath = chainCriterion.getDefinitionAccessPath(); ConfiguredRepository definitionRepository = chainCriterion.getDefinitionRepository(); + AbstractDelegateRepository abstractDelegateRepository = chainCriterion.getAbstractDelegateRepository(); ConfiguredRepository queryRepository = chainCriterion.getQueryRepository(); EntityExample entityExample = chainCriterion.getEntityExample(); + Class repositoryClass = abstractDelegateRepository.getRepositoryClass(); EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); EntityMapper entityMapper = queryRepository.getEntityMapper(); @@ -115,11 +125,12 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo List entities = Collections.emptyList(); if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { - entityExample.setColumns(entityDefinition.getBindingColumns()); - entities = queryRepository.selectByExample(boundedContext, entityExample.buildExample()); + entities = queryRepository.selectByExample(boundedContext, entityExample); log.debug("The data queried is: {}", entities); } + buildIndexForEntities(boundedContext, repositoryClass, definitionRepository, entities); + for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); ChainCriterion targetChainCriterion = criterionMap.get(absoluteAccessPath); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index de81f7c6..a95f8587 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -26,6 +26,7 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo if (boundedContext.getEntityCaches() == null) { boundedContext.setEntityCaches(new DefaultEntityCaches()); } + EntityCaches entityCaches = boundedContext.getEntityCaches(); Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); repositoryEntitiesMap.forEach((abstractDelegateRepository, eachRootEntities) -> { @@ -38,12 +39,16 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo collectFieldValues(boundedContext, fieldValues, rootRepository, eachRootEntities); for (ConfiguredRepository configuredRepository : subRepositories) { - if (isMatchScenes(boundedContext, configuredRepository)) { - EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); - if (entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(boundedContext, entityExample); - collectFieldValues(boundedContext, fieldValues, configuredRepository, entities); - buildIndexForEntities(boundedContext, repositoryClass, configuredRepository, entities); + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + Map> entitiesMap = entityCaches.getCache(repositoryClass, entityDefinition.getAccessPath()); + if (entitiesMap == null) { + if (isMatchScenes(boundedContext, configuredRepository)) { + EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); + if (entityExample.isDirtyQuery()) { + List entities = configuredRepository.selectByExample(boundedContext, entityExample); + collectFieldValues(boundedContext, fieldValues, configuredRepository, entities); + buildIndexForEntities(boundedContext, repositoryClass, configuredRepository, entities); + } } } } -- Gitee From 6027476ec6453d03d9a43db32a0977a4dfa62740 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Fri, 17 Jun 2022 20:38:10 +0800 Subject: [PATCH 27/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractChainRepository.java | 1 - .../spring/domain/core/api/EntityCaches.java | 12 --- .../domain/core/entity/BoundedContext.java | 5 +- .../core/entity/RepositoryLocation.java | 31 +++++++ .../domain/core/impl/DefaultEntityCaches.java | 25 ------ .../repository/AbstractAwareRepository.java | 68 ++++++++++++++ .../repository/AbstractBatchRepository.java | 88 ++++++++++++++----- .../repository/AbstractContextRepository.java | 4 - .../AbstractDelegateRepository.java | 8 +- .../repository/AbstractGenericRepository.java | 2 +- .../core/repository/BatchRepository.java | 1 - 11 files changed, 175 insertions(+), 70 deletions(-) delete mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCaches.java create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryLocation.java delete mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCaches.java create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java index d082be2c..61e5564d 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java @@ -11,7 +11,6 @@ import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; -import com.gitee.spring.domain.core.impl.DefaultEntityCaches; import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.extern.slf4j.Slf4j; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCaches.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCaches.java deleted file mode 100644 index 7b305be6..00000000 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityCaches.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.gitee.spring.domain.core.api; - -import java.util.List; -import java.util.Map; - -public interface EntityCaches { - - Map> getOrCreateCache(Class repositoryClass, String accessPath); - - Map> getCache(Class repositoryClass, String accessPath); - -} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java index 3d3294b0..cfdd3c3f 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java @@ -1,17 +1,18 @@ package com.gitee.spring.domain.core.entity; -import com.gitee.spring.domain.core.api.EntityCaches; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) public class BoundedContext extends LinkedHashMap { - private EntityCaches entityCaches; + private Map> entitiesCache = new LinkedHashMap<>(); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryLocation.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryLocation.java new file mode 100644 index 00000000..fb182a81 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryLocation.java @@ -0,0 +1,31 @@ +package com.gitee.spring.domain.core.entity; + +import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; +import com.gitee.spring.domain.core.repository.ConfiguredRepository; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +@Data +@AllArgsConstructor +public class RepositoryLocation { + + private List multiAccessPath; + private String parentAccessPath; + private String prefixAccessPath; + private String absoluteAccessPath; + private boolean forwardParent; + private ConfiguredRepository parentConfiguredRepository; + private AbstractDelegateRepository abstractDelegateRepository; + private ConfiguredRepository configuredRepository; + + public String getDefinitionAccessPath() { + return forwardParent ? parentAccessPath : prefixAccessPath; + } + + public ConfiguredRepository getDefinitionRepository() { + return forwardParent ? parentConfiguredRepository : configuredRepository; + } + +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCaches.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCaches.java deleted file mode 100644 index db9c5915..00000000 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityCaches.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.gitee.spring.domain.core.impl; - -import com.gitee.spring.domain.core.api.EntityCaches; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public class DefaultEntityCaches implements EntityCaches { - - protected Map, Map>>> entitiesCache = new ConcurrentHashMap<>(); - - @Override - public Map> getOrCreateCache(Class repositoryClass, String accessPath) { - Map>> entitiesMap = entitiesCache.computeIfAbsent(repositoryClass, key -> new ConcurrentHashMap<>()); - return entitiesMap.computeIfAbsent(accessPath, key -> new ConcurrentHashMap<>()); - } - - @Override - public Map> getCache(Class repositoryClass, String accessPath) { - Map>> entitiesMap = entitiesCache.get(repositoryClass); - return entitiesMap != null ? entitiesMap.get(accessPath) : null; - } - -} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java new file mode 100644 index 00000000..437575f7 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java @@ -0,0 +1,68 @@ +package com.gitee.spring.domain.core.repository; + +import cn.hutool.core.util.StrUtil; +import com.gitee.spring.domain.core.entity.EntityDefinition; +import com.gitee.spring.domain.core.entity.RepositoryLocation; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.*; + +@Data +@EqualsAndHashCode(callSuper = false) +public abstract class AbstractAwareRepository extends AbstractDelegateRepository { + + protected Map repositoryLocationMap = new LinkedHashMap<>(); + protected List repositoryLocations = new ArrayList<>(); + protected List reversedRepositoryLocations = new ArrayList<>(); + + @Override + public void afterPropertiesSet() throws Exception { + super.afterPropertiesSet(); + resolveRepositoryLocationMap(new ArrayList<>(), null, this); + repositoryLocations.addAll(repositoryLocationMap.values()); + reversedRepositoryLocations.addAll(repositoryLocationMap.values()); + Collections.reverse(reversedRepositoryLocations); + } + + protected void resolveRepositoryLocationMap(List multiAccessPath, + ConfiguredRepository parentConfiguredRepository, + AbstractDelegateRepository abstractDelegateRepository) { + + List finalMultiAccessPath = multiAccessPath; + String parentAccessPath = multiAccessPath.size() > 1 ? StrUtil.join("", multiAccessPath.subList(0, multiAccessPath.size() - 1)) : ""; + String prefixAccessPath = StrUtil.join("", multiAccessPath); + + Map allConfiguredRepositoryMap = abstractDelegateRepository.getAllConfiguredRepositoryMap(); + allConfiguredRepositoryMap.forEach((accessPath, configuredRepository) -> { + + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + String absoluteAccessPath = prefixAccessPath + entityDefinition.getAccessPath(); + boolean forwardParent = entityDefinition.isRoot() && parentConfiguredRepository != null; + + RepositoryLocation repositoryLocation = new RepositoryLocation( + finalMultiAccessPath, + parentAccessPath, + prefixAccessPath, + absoluteAccessPath, + forwardParent, + parentConfiguredRepository, + abstractDelegateRepository, + configuredRepository); + repositoryLocationMap.put(absoluteAccessPath, repositoryLocation); + }); + + for (ConfiguredRepository configuredRepository : delegateConfiguredRepositories) { + multiAccessPath = new ArrayList<>(multiAccessPath); + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + multiAccessPath.add(entityDefinition.getAccessPath()); + AbstractDelegateRepository delegateRepository = (AbstractDelegateRepository) configuredRepository.getRepository(); + resolveRepositoryLocationMap(multiAccessPath, configuredRepository, delegateRepository); + } + } + + protected AbstractAwareRepository adaptiveRepository(Object rootEntity) { + return this; + } + +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index a95f8587..41ff2e7a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -2,10 +2,8 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; -import com.gitee.spring.domain.core.api.EntityCaches; import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; -import com.gitee.spring.domain.core.impl.DefaultEntityCaches; import java.util.*; @@ -18,25 +16,21 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo @Override protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { + + executeChainQuery(boundedContext, repositoryLocations.get(0)); + if (rootEntities.size() == 1) { super.handleRootEntity(boundedContext, rootEntities.get(0)); return; } - if (boundedContext.getEntityCaches() == null) { - boundedContext.setEntityCaches(new DefaultEntityCaches()); - } - EntityCaches entityCaches = boundedContext.getEntityCaches(); - - Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); - repositoryEntitiesMap.forEach((abstractDelegateRepository, eachRootEntities) -> { - - Class repositoryClass = abstractDelegateRepository.getRepositoryClass(); - ConfiguredRepository rootRepository = abstractDelegateRepository.getRootRepository(); - List subRepositories = abstractDelegateRepository.getSubRepositories(); - - Map> fieldValues = new LinkedHashMap<>(); - collectFieldValues(boundedContext, fieldValues, rootRepository, eachRootEntities); + Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); + repositoryEntitiesMap.forEach((abstractAwareRepository, eachRootEntities) -> { + List repositoryLocations = abstractAwareRepository.getRepositoryLocations(); + for (int index = 1; index < repositoryLocations.size(); index++) { + RepositoryLocation repositoryLocation = repositoryLocations.get(index); + executeChainQuery(boundedContext, repositoryLocation); + } for (ConfiguredRepository configuredRepository : subRepositories) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); @@ -57,11 +51,65 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo }); } - protected Map, List> adaptiveRepositoryEntities(List rootEntities) { - Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); + protected void executeChainQuery(BoundedContext boundedContext, RepositoryLocation repositoryLocation) { + Map> entitiesCache = boundedContext.getEntitiesCache(); + String absoluteAccessPath = repositoryLocation.getAbsoluteAccessPath(); + List entities = entitiesCache.get(absoluteAccessPath); + if (entities == null) { + ConfiguredRepository definitionRepository = repositoryLocation.getDefinitionRepository(); + ConfiguredRepository configuredRepository = repositoryLocation.getConfiguredRepository(); + + EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); + if (isMatchScenes(boundedContext, entityDefinition.getSceneAttribute())) { + EntityExample entityExample = newExampleByCache(boundedContext, repositoryLocation); + if (entityExample.isDirtyQuery()) { + entities = configuredRepository.selectByExample(entityExample); + entitiesCache.put(absoluteAccessPath, entities); + } + } + } + } + + protected EntityExample newExampleByCache(BoundedContext boundedContext, RepositoryLocation repositoryLocation) { + Map> entitiesCache = boundedContext.getEntitiesCache(); + + String definitionAccessPath = repositoryLocation.getDefinitionAccessPath(); + ConfiguredRepository definitionRepository = repositoryLocation.getDefinitionRepository(); + ConfiguredRepository configuredRepository = repositoryLocation.getConfiguredRepository(); + + EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); + EntityDefinition queryEntityDefinition = configuredRepository.getEntityDefinition(); + EntityMapper entityMapper = configuredRepository.getEntityMapper(); + EntityExample entityExample = entityMapper.newExample(queryEntityDefinition, boundedContext); + + for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { + String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBindAttribute(); + List fieldValues = entitiesCache.get(absoluteAccessPath); + if (fieldValues == null) { + fieldValues = collectFieldValues(boundedContext, definitionAccessPath, bindingDefinition); + } + if (fieldValues != null && !fieldValues.isEmpty()) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, fieldValues); + entityExample.addCriterion(entityCriterion); + } + } + return entityExample; + } + + protected List collectFieldValues(BoundedContext boundedContext, String definitionAccessPath, BindingDefinition bindingDefinition) { + Map> entitiesCache = boundedContext.getEntitiesCache(); + String belongAccessPath = bindingDefinition.getBelongAccessPath(); + String absoluteAccessPath = definitionAccessPath + belongAccessPath; + + return null; + } + + protected Map, List> adaptiveRepositoryEntities(List rootEntities) { + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); for (Object rootEntity : rootEntities) { - AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); - List entities = repositoryEntitiesMap.computeIfAbsent(abstractDelegateRepository, key -> new ArrayList<>()); + AbstractAwareRepository abstractAwareRepository = adaptiveRepository(rootEntity); + List entities = repositoryEntitiesMap.computeIfAbsent(abstractAwareRepository, key -> new ArrayList<>()); entities.add(rootEntity); } return repositoryEntitiesMap; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 0a27ea78..78224956 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -36,8 +36,6 @@ import java.util.stream.Collectors; @EqualsAndHashCode(callSuper = false) public abstract class AbstractContextRepository extends AbstractRepository implements ApplicationContextAware, InitializingBean { - protected Class repositoryClass; - protected Class entityClass; protected Constructor entityCtor; @@ -60,8 +58,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor @Override public void afterPropertiesSet() throws Exception { - repositoryClass = this.getClass(); - Type genericSuperclass = this.getClass().getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0]; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java index 5a168f4a..5cef9dc5 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java @@ -1,9 +1,13 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.entity.EntityPropertyChain; +import lombok.Data; +import lombok.EqualsAndHashCode; import java.util.*; +@Data +@EqualsAndHashCode(callSuper = false) public abstract class AbstractDelegateRepository extends AbstractContextRepository { protected Map fieldEntityPropertyChainMap = new LinkedHashMap<>(); @@ -24,8 +28,4 @@ public abstract class AbstractDelegateRepository extends AbstractContextR return super.processConfiguredRepository(configuredRepository); } - protected AbstractDelegateRepository adaptiveRepository(Object rootEntity) { - return this; - } - } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index 05759c33..bbe129c1 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -12,7 +12,7 @@ import java.util.Collection; import java.util.List; import java.util.Set; -public abstract class AbstractGenericRepository extends AbstractDelegateRepository { +public abstract class AbstractGenericRepository extends AbstractAwareRepository { @Override @SuppressWarnings("unchecked") diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java index edef815b..89b85a9f 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java @@ -1,7 +1,6 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityCaches; import com.gitee.spring.domain.core.entity.BoundedContext; import com.gitee.spring.domain.core.entity.EntityExample; -- Gitee From e13ff8769205326ed556ffc891df9dacfb13a674 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 18 Jun 2022 00:00:05 +0800 Subject: [PATCH 28/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/entity/BindingDefinition.java | 1 + .../domain/core/entity/EntityDefinition.java | 2 - .../repository/AbstractBatchRepository.java | 134 +++++------------- .../repository/AbstractContextRepository.java | 35 ++--- 4 files changed, 48 insertions(+), 124 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java index 01c83fd6..2b3e56f4 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java @@ -18,5 +18,6 @@ public class BindingDefinition { private ConfiguredRepository belongConfiguredRepository; private String boundFieldName; private EntityPropertyChain boundEntityPropertyChain; + private EntityPropertyChain relativeEntityPropertyChain; private EntityPropertyChain fieldEntityPropertyChain; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index 6b1e153b..8a9348a2 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -37,8 +37,6 @@ public class EntityDefinition { private List contextBindingDefinitions; private BindingDefinition boundIdBindingDefinition; private Set entityJoinAliases; - private List bindingColumns; private Set fieldNames; private Map entityPropertyChainMap; - private List boundSceneEntityProperties; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 41ff2e7a..b5ed7b75 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -16,58 +16,48 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo @Override protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { - - executeChainQuery(boundedContext, repositoryLocations.get(0)); - if (rootEntities.size() == 1) { super.handleRootEntity(boundedContext, rootEntities.get(0)); - return; - } - - Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); - repositoryEntitiesMap.forEach((abstractAwareRepository, eachRootEntities) -> { - List repositoryLocations = abstractAwareRepository.getRepositoryLocations(); - for (int index = 1; index < repositoryLocations.size(); index++) { - RepositoryLocation repositoryLocation = repositoryLocations.get(index); - executeChainQuery(boundedContext, repositoryLocation); - } - - for (ConfiguredRepository configuredRepository : subRepositories) { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - Map> entitiesMap = entityCaches.getCache(repositoryClass, entityDefinition.getAccessPath()); - if (entitiesMap == null) { - if (isMatchScenes(boundedContext, configuredRepository)) { - EntityExample entityExample = newExampleByFieldValues(boundedContext, fieldValues, configuredRepository); - if (entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(boundedContext, entityExample); - collectFieldValues(boundedContext, fieldValues, configuredRepository, entities); - buildIndexForEntities(boundedContext, repositoryClass, configuredRepository, entities); - } - } + } else { + Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); + repositoryEntitiesMap.forEach((abstractAwareRepository, eachRootEntities) -> { + List repositoryLocations = abstractAwareRepository.getRepositoryLocations(); + for (int index = 1; index < repositoryLocations.size(); index++) { + RepositoryLocation repositoryLocation = repositoryLocations.get(index); + List entities = executeChainQuery(boundedContext, repositoryLocation); + buildIndexForEntities(boundedContext, repositoryLocation, entities); } - } + }); + } + } - super.handleRootEntities(boundedContext, eachRootEntities); - }); + protected Map, List> adaptiveRepositoryEntities(List rootEntities) { + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); + for (Object rootEntity : rootEntities) { + AbstractAwareRepository abstractAwareRepository = adaptiveRepository(rootEntity); + List entities = repositoryEntitiesMap.computeIfAbsent(abstractAwareRepository, key -> new ArrayList<>()); + entities.add(rootEntity); + } + return repositoryEntitiesMap; } - protected void executeChainQuery(BoundedContext boundedContext, RepositoryLocation repositoryLocation) { + protected List executeChainQuery(BoundedContext boundedContext, RepositoryLocation repositoryLocation) { Map> entitiesCache = boundedContext.getEntitiesCache(); String absoluteAccessPath = repositoryLocation.getAbsoluteAccessPath(); List entities = entitiesCache.get(absoluteAccessPath); if (entities == null) { ConfiguredRepository definitionRepository = repositoryLocation.getDefinitionRepository(); - ConfiguredRepository configuredRepository = repositoryLocation.getConfiguredRepository(); - EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); if (isMatchScenes(boundedContext, entityDefinition.getSceneAttribute())) { EntityExample entityExample = newExampleByCache(boundedContext, repositoryLocation); if (entityExample.isDirtyQuery()) { + ConfiguredRepository configuredRepository = repositoryLocation.getConfiguredRepository(); entities = configuredRepository.selectByExample(entityExample); entitiesCache.put(absoluteAccessPath, entities); } } } + return entities; } protected EntityExample newExampleByCache(BoundedContext boundedContext, RepositoryLocation repositoryLocation) { @@ -99,75 +89,25 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo protected List collectFieldValues(BoundedContext boundedContext, String definitionAccessPath, BindingDefinition bindingDefinition) { Map> entitiesCache = boundedContext.getEntitiesCache(); - String belongAccessPath = bindingDefinition.getBelongAccessPath(); - String absoluteAccessPath = definitionAccessPath + belongAccessPath; - - return null; - } - - protected Map, List> adaptiveRepositoryEntities(List rootEntities) { - Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); - for (Object rootEntity : rootEntities) { - AbstractAwareRepository abstractAwareRepository = adaptiveRepository(rootEntity); - List entities = repositoryEntitiesMap.computeIfAbsent(abstractAwareRepository, key -> new ArrayList<>()); - entities.add(rootEntity); - } - return repositoryEntitiesMap; - } - - protected void collectFieldValues(BoundedContext boundedContext, - Map> fieldValues, - ConfiguredRepository configuredRepository, - List entities) { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - List boundSceneEntityProperties = entityDefinition.getBoundSceneEntityProperties(); - for (SceneEntityProperty sceneEntityProperty : boundSceneEntityProperties) { - if (isMatchScenes(boundedContext, sceneEntityProperty.getSceneAttribute())) { - EntityPropertyChain entityPropertyChain = sceneEntityProperty.getEntityPropertyChain(); - String accessPath = entityPropertyChain.getAccessPath(); - for (Object entity : entities) { - Object boundValue = entityPropertyChain.getValue(entity); - if (boundValue != null) { - List boundValues = fieldValues.computeIfAbsent(accessPath, key -> new ArrayList<>()); - boundValues.add(boundValue); - } + String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); + List entities = entitiesCache.get(absoluteAccessPath); + if (entities != null && !entities.isEmpty()) { + EntityPropertyChain relativeEntityPropertyChain = bindingDefinition.getRelativeEntityPropertyChain(); + List fieldValues = new ArrayList<>(); + for (Object entity : entities) { + Object fieldValue = relativeEntityPropertyChain.getValue(entity); + if (fieldValue != null) { + fieldValues.add(fieldValue); } } + return fieldValues; } + return null; } - protected EntityExample newExampleByFieldValues(BoundedContext boundedContext, - Map> fieldValues, - ConfiguredRepository configuredRepository) { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - EntityMapper entityMapper = configuredRepository.getEntityMapper(); - EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { - String bindAttribute = bindingDefinition.getBindAttribute(); - Object boundValues; - if (bindingDefinition.isFromContext()) { - boundValues = boundedContext.get(bindAttribute); - } else { - boundValues = fieldValues.get(bindAttribute); - } - if (boundValues != null) { - String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, boundValues); - entityExample.addCriterion(entityCriterion); - } - } - return entityExample; - } - - protected void buildIndexForEntities(BoundedContext boundedContext, - Class repositoryClass, - ConfiguredRepository configuredRepository, - List entities) { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - - EntityCaches entityCaches = boundedContext.getEntityCaches(); - Map> entitiesMap = entityCaches.getOrCreateCache(repositoryClass, entityDefinition.getAccessPath()); - + protected void buildIndexForEntities(BoundedContext boundedContext, RepositoryLocation repositoryLocation, List entities) { + ConfiguredRepository definitionRepository = repositoryLocation.getDefinitionRepository(); + EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); List bindingDefinitions = entityDefinition.getBoundBindingDefinitions(); for (Object entity : entities) { StringBuilder builder = new StringBuilder(); @@ -180,8 +120,6 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo if (builder.length() > 0) { builder.delete(builder.length() - 2, builder.length()); } - List existEntities = entitiesMap.computeIfAbsent(builder.toString(), key -> new ArrayList<>()); - existEntities.add(entity); } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 78224956..a9bc7234 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -214,7 +214,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor List contextBindingDefinitions = new ArrayList<>(); BindingDefinition boundIdBindingDefinition = null; Set entityJoinAliases = new LinkedHashSet<>(); - List bindingColumns = new ArrayList<>(); for (Binding bindingAnnotation : bindingAnnotations) { AnnotationAttributes bindingAttributes = AnnotationUtils.getAnnotationAttributes( @@ -240,43 +239,31 @@ public abstract class AbstractContextRepository extends AbstractRepositor ConfiguredRepository belongConfiguredRepository = null; String boundFieldName = null; EntityPropertyChain boundEntityPropertyChain = null; + EntityPropertyChain relativeEntityPropertyChain = null; if (!isFromContext) { belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), bindAttribute); belongConfiguredRepository = allConfiguredRepositoryMap.get(belongAccessPath); - Assert.notNull(belongConfiguredRepository, "No belong repository found!"); + Assert.notNull(belongConfiguredRepository, "The belong repository cannot be null!"); boundFieldName = PathUtils.getFieldName(bindAttribute); boundEntityPropertyChain = allEntityPropertyChainMap.get(bindAttribute); - Assert.notNull(boundEntityPropertyChain, "Bound path not available!"); - + Assert.notNull(boundEntityPropertyChain, "The bound entity property cannot be null!"); boundEntityPropertyChain.initialize(); - entityJoinAliases.add(aliasAttribute); - bindingColumns.add(StrUtil.toUnderlineCase(aliasAttribute)); - EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); - List boundSceneEntityProperties = entityDefinition.getBoundSceneEntityProperties(); - - EntityPropertyChain relativeEntityPropertyChain = entityPropertyChainMap.get(bindAttribute); - SceneEntityProperty sceneEntityProperty = CollUtil.findOne(boundSceneEntityProperties, item -> - item.getEntityPropertyChain() == relativeEntityPropertyChain); - if (sceneEntityProperty != null) { - Set sceneAttribute = sceneEntityProperty.getSceneAttribute(); - sceneAttribute.addAll(sceneAttributeSet); - } else { - relativeEntityPropertyChain.initialize(); - SceneEntityProperty newSceneEntityProperty = new SceneEntityProperty( - new LinkedHashSet<>(sceneAttributeSet), relativeEntityPropertyChain); - boundSceneEntityProperties.add(newSceneEntityProperty); - } + relativeEntityPropertyChain = entityPropertyChainMap.get(bindAttribute); + Assert.notNull(relativeEntityPropertyChain, "The relative entity property cannot be null!"); + relativeEntityPropertyChain.initialize(); + + entityJoinAliases.add(aliasAttribute); } BindingDefinition bindingDefinition = new BindingDefinition( bindingAttributes, fieldAttribute, aliasAttribute, bindAttribute, isFromContext, isBoundId, belongAccessPath, belongConfiguredRepository, - boundFieldName, boundEntityPropertyChain, null); + boundFieldName, boundEntityPropertyChain, relativeEntityPropertyChain, null); bindingDefinitions.add(bindingDefinition); if (!isFromContext) { @@ -300,7 +287,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor attributes, sceneAttributeSet, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, bindingDefinitions, boundBindingDefinitions, contextBindingDefinitions, boundIdBindingDefinition, - entityJoinAliases, bindingColumns, new LinkedHashSet<>(), new LinkedHashMap<>(), new ArrayList<>()); + entityJoinAliases, new LinkedHashSet<>(), new LinkedHashMap<>()); EntityMapper entityMapper = newEntityMapper(entityDefinition); if (mapAsExample) { @@ -343,7 +330,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { String accessPath = prefixAccessPath + bindingDefinition.getFieldAttribute(); EntityPropertyChain entityPropertyChain = entityPropertyChainMap.get(accessPath); - Assert.notNull(entityPropertyChain, "The binding field does not exist!"); + Assert.notNull(entityPropertyChain, "The field entity property cannot be null!"); entityPropertyChain.initialize(); bindingDefinition.setFieldEntityPropertyChain(entityPropertyChain); } -- Gitee From ec2927395dd28487dd9b4ae32c11fd84b0243ea9 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Mon, 20 Jun 2022 00:01:55 +0800 Subject: [PATCH 29/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/MybatisPlusEntityMapper.java | 5 +- .../repository/AbstractCoatingRepository.java | 3 +- .../spring/domain/core/api/EntityIndex.java | 9 ++ .../spring/domain/core/api/EntityMapper.java | 2 +- .../domain/core/entity/BoundedContext.java | 3 - ...ocation.java => RepositoryDefinition.java} | 5 +- .../domain/core/entity/RepositoryGroup.java | 13 +++ .../core/entity/SceneEntityProperty.java | 26 ------ .../domain/core/impl/DefaultEntityIndex.java | 45 ++++++++++ .../domain/core/mapper/ProxyEntityMapper.java | 2 +- .../repository/AbstractAwareRepository.java | 79 ++++++++++------- .../repository/AbstractBatchRepository.java | 84 +++++++++---------- .../repository/AbstractContextRepository.java | 28 +++++-- .../AbstractDelegateRepository.java | 11 +-- .../repository/AbstractGenericRepository.java | 6 +- .../core/repository/BatchRepository.java | 55 ++++++------ .../core/repository/ConfiguredRepository.java | 1 - 17 files changed, 216 insertions(+), 161 deletions(-) create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java rename spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/{RepositoryLocation.java => RepositoryDefinition.java} (83%) create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java delete mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/SceneEntityProperty.java create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java index bab81db1..912c757f 100644 --- a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java @@ -34,8 +34,9 @@ public class MybatisPlusEntityMapper implements EntityMapper { } @Override - public List getDataFromPage(Object dataPage) { - return ((IPage) dataPage).getRecords(); + @SuppressWarnings("unchecked") + public List getDataFromPage(Object dataPage) { + return ((IPage) dataPage).getRecords(); } @Override diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java index 9247c104..0c66cc43 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java @@ -16,7 +16,6 @@ import com.gitee.spring.domain.core.constants.Attribute; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import com.gitee.spring.domain.coating.entity.RepositoryLocation; -import com.gitee.spring.domain.core.entity.SceneEntityProperty; import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import com.gitee.spring.domain.event.repository.AbstractEventRepository; @@ -178,7 +177,7 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo } }); - for (ConfiguredRepository configuredRepository : delegateConfiguredRepositories) { + for (ConfiguredRepository configuredRepository : delegateRepositories) { multiAccessPath = new ArrayList<>(multiAccessPath); EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); multiAccessPath.add(entityDefinition.getAccessPath()); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java new file mode 100644 index 00000000..4f4c3b96 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java @@ -0,0 +1,9 @@ +package com.gitee.spring.domain.core.api; + +import java.util.List; + +public interface EntityIndex { + + List selectList(String foreignKey); + +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java index 5687132a..68d99e8e 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java @@ -10,7 +10,7 @@ public interface EntityMapper { Object newPage(Integer pageNum, Integer pageSize); - List getDataFromPage(Object dataPage); + List getDataFromPage(Object dataPage); Object newPageOfEntities(Object dataPage, List entities); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java index cfdd3c3f..f9b9b3df 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BoundedContext.java @@ -6,13 +6,10 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) public class BoundedContext extends LinkedHashMap { - private Map> entitiesCache = new LinkedHashMap<>(); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryLocation.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java similarity index 83% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryLocation.java rename to spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java index fb182a81..0b7c37e8 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryLocation.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java @@ -1,5 +1,6 @@ package com.gitee.spring.domain.core.entity; +import com.gitee.spring.domain.core.repository.AbstractAwareRepository; import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.AllArgsConstructor; @@ -9,7 +10,7 @@ import java.util.List; @Data @AllArgsConstructor -public class RepositoryLocation { +public class RepositoryDefinition { private List multiAccessPath; private String parentAccessPath; @@ -17,7 +18,7 @@ public class RepositoryLocation { private String absoluteAccessPath; private boolean forwardParent; private ConfiguredRepository parentConfiguredRepository; - private AbstractDelegateRepository abstractDelegateRepository; + private AbstractAwareRepository abstractAwareRepository; private ConfiguredRepository configuredRepository; public String getDefinitionAccessPath() { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java new file mode 100644 index 00000000..be82db6f --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java @@ -0,0 +1,13 @@ +package com.gitee.spring.domain.core.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +@Data +@AllArgsConstructor +public class RepositoryGroup { + private String accessPath; + private List repositoryDefinitions; +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/SceneEntityProperty.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/SceneEntityProperty.java deleted file mode 100644 index b5ef3661..00000000 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/SceneEntityProperty.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.gitee.spring.domain.core.entity; - -import com.gitee.spring.domain.core.api.EntityProperty; -import lombok.AllArgsConstructor; -import lombok.Data; - -import java.util.Set; - -@Data -@AllArgsConstructor -public class SceneEntityProperty implements EntityProperty { - - private Set sceneAttribute; - private EntityPropertyChain entityPropertyChain; - - @Override - public Object getValue(Object entity) { - return entityPropertyChain.getValue(entity); - } - - @Override - public void setValue(Object entity, Object property) { - entityPropertyChain.setValue(entity, property); - } - -} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java new file mode 100644 index 00000000..e395e152 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java @@ -0,0 +1,45 @@ +package com.gitee.spring.domain.core.impl; + +import com.gitee.spring.domain.core.api.EntityIndex; +import com.gitee.spring.domain.core.entity.BindingDefinition; +import com.gitee.spring.domain.core.entity.EntityDefinition; +import com.gitee.spring.domain.core.entity.EntityPropertyChain; +import com.gitee.spring.domain.core.entity.RepositoryDefinition; +import com.gitee.spring.domain.core.repository.ConfiguredRepository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class DefaultEntityIndex implements EntityIndex { + + private final Map> entitiesMap = new ConcurrentHashMap<>(); + + public DefaultEntityIndex(RepositoryDefinition repositoryDefinition, List entities) { + ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); + EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); + List bindingDefinitions = entityDefinition.getBoundBindingDefinitions(); + for (Object entity : entities) { + StringBuilder builder = new StringBuilder(); + for (BindingDefinition bindingDefinition : bindingDefinitions) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityPropertyChain entityPropertyChain = bindingDefinition.getFieldEntityPropertyChain(); + Object boundValue = entityPropertyChain.getValue(entity); + builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); + } + if (builder.length() > 0) { + builder.delete(builder.length() - 2, builder.length()); + } + String foreignKey = builder.toString(); + List existEntities = entitiesMap.computeIfAbsent(foreignKey, key -> new ArrayList<>()); + existEntities.add(entity); + } + } + + @Override + public List selectList(String foreignKey) { + return entitiesMap.get(foreignKey); + } + +} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java index 1ac6d244..d1f114a5 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java @@ -22,7 +22,7 @@ public class ProxyEntityMapper implements EntityMapper { } @Override - public List getDataFromPage(Object dataPage) { + public List getDataFromPage(Object dataPage) { return entityMapper.getDataFromPage(dataPage); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java index 437575f7..9f3a1649 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java @@ -2,9 +2,11 @@ package com.gitee.spring.domain.core.repository; import cn.hutool.core.util.StrUtil; import com.gitee.spring.domain.core.entity.EntityDefinition; -import com.gitee.spring.domain.core.entity.RepositoryLocation; +import com.gitee.spring.domain.core.entity.RepositoryGroup; +import com.gitee.spring.domain.core.entity.RepositoryDefinition; import lombok.Data; import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.StringUtils; import java.util.*; @@ -12,52 +14,67 @@ import java.util.*; @EqualsAndHashCode(callSuper = false) public abstract class AbstractAwareRepository extends AbstractDelegateRepository { - protected Map repositoryLocationMap = new LinkedHashMap<>(); - protected List repositoryLocations = new ArrayList<>(); - protected List reversedRepositoryLocations = new ArrayList<>(); + protected Map repositoryGroupMap = new LinkedHashMap<>(); + protected List repositoryGroups = new ArrayList<>(); + protected List reversedRepositoryGroups = new ArrayList<>(); @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); - resolveRepositoryLocationMap(new ArrayList<>(), null, this); - repositoryLocations.addAll(repositoryLocationMap.values()); - reversedRepositoryLocations.addAll(repositoryLocationMap.values()); - Collections.reverse(reversedRepositoryLocations); + resolveRepositoryGroups(new ArrayList<>(), null, this); + repositoryGroups.addAll(repositoryGroupMap.values()); + reversedRepositoryGroups.addAll(repositoryGroupMap.values()); + Collections.reverse(reversedRepositoryGroups); } - protected void resolveRepositoryLocationMap(List multiAccessPath, - ConfiguredRepository parentConfiguredRepository, - AbstractDelegateRepository abstractDelegateRepository) { + protected void resolveRepositoryGroups(List multiAccessPath, + ConfiguredRepository parentConfiguredRepository, + AbstractAwareRepository abstractAwareRepository) { List finalMultiAccessPath = multiAccessPath; String parentAccessPath = multiAccessPath.size() > 1 ? StrUtil.join("", multiAccessPath.subList(0, multiAccessPath.size() - 1)) : ""; String prefixAccessPath = StrUtil.join("", multiAccessPath); - Map allConfiguredRepositoryMap = abstractDelegateRepository.getAllConfiguredRepositoryMap(); - allConfiguredRepositoryMap.forEach((accessPath, configuredRepository) -> { + String groupAccessPath = StringUtils.isNotBlank(prefixAccessPath) ? prefixAccessPath : "/"; + RepositoryGroup repositoryGroup = new RepositoryGroup(groupAccessPath, new ArrayList<>()); + repositoryGroupMap.put(groupAccessPath, repositoryGroup); + List repositoryDefinitions = repositoryGroup.getRepositoryDefinitions(); + List subRepositories = abstractAwareRepository.getSubRepositories(); + for (ConfiguredRepository configuredRepository : subRepositories) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); String absoluteAccessPath = prefixAccessPath + entityDefinition.getAccessPath(); - boolean forwardParent = entityDefinition.isRoot() && parentConfiguredRepository != null; - RepositoryLocation repositoryLocation = new RepositoryLocation( - finalMultiAccessPath, - parentAccessPath, - prefixAccessPath, - absoluteAccessPath, - forwardParent, - parentConfiguredRepository, - abstractDelegateRepository, - configuredRepository); - repositoryLocationMap.put(absoluteAccessPath, repositoryLocation); - }); + AbstractRepository abstractRepository = configuredRepository.getRepository(); + if (abstractRepository instanceof AbstractAwareRepository) { + AbstractAwareRepository repository = (AbstractAwareRepository) abstractRepository; - for (ConfiguredRepository configuredRepository : delegateConfiguredRepositories) { - multiAccessPath = new ArrayList<>(multiAccessPath); - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - multiAccessPath.add(entityDefinition.getAccessPath()); - AbstractDelegateRepository delegateRepository = (AbstractDelegateRepository) configuredRepository.getRepository(); - resolveRepositoryLocationMap(multiAccessPath, configuredRepository, delegateRepository); + RepositoryDefinition repositoryDefinition = new RepositoryDefinition( + finalMultiAccessPath, + parentAccessPath, + prefixAccessPath, + absoluteAccessPath, + true, + configuredRepository, + repository, + repository.getRootRepository()); + repositoryDefinitions.add(repositoryDefinition); + + multiAccessPath = new ArrayList<>(multiAccessPath); + multiAccessPath.add(entityDefinition.getAccessPath()); + resolveRepositoryGroups(multiAccessPath, configuredRepository, repository); + } else { + RepositoryDefinition repositoryDefinition = new RepositoryDefinition( + finalMultiAccessPath, + parentAccessPath, + prefixAccessPath, + absoluteAccessPath, + false, + parentConfiguredRepository, + abstractAwareRepository, + configuredRepository); + repositoryDefinitions.add(repositoryDefinition); + } } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index b5ed7b75..f409cf2b 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -4,28 +4,36 @@ import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; +import lombok.extern.slf4j.Slf4j; import java.util.*; +@Slf4j public abstract class AbstractBatchRepository extends AbstractGenericRepository { - @Override - protected ConfiguredRepository processConfiguredRepository(ConfiguredRepository configuredRepository) { - return new BatchRepository(configuredRepository); - } +// @Override +// protected ConfiguredRepository processConfiguredRepository(ConfiguredRepository configuredRepository) { +// return new BatchRepository(configuredRepository); +// } @Override - protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { + protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { if (rootEntities.size() == 1) { super.handleRootEntity(boundedContext, rootEntities.get(0)); } else { + Map> entitiesCache = new LinkedHashMap<>(); + entitiesCache.put("/", rootEntities); + Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); repositoryEntitiesMap.forEach((abstractAwareRepository, eachRootEntities) -> { - List repositoryLocations = abstractAwareRepository.getRepositoryLocations(); - for (int index = 1; index < repositoryLocations.size(); index++) { - RepositoryLocation repositoryLocation = repositoryLocations.get(index); - List entities = executeChainQuery(boundedContext, repositoryLocation); - buildIndexForEntities(boundedContext, repositoryLocation, entities); + List repositoryGroups = abstractAwareRepository.getRepositoryGroups(); + for (RepositoryGroup repositoryGroup : repositoryGroups) { + List repositoryDefinitions = repositoryGroup.getRepositoryDefinitions(); + for (RepositoryDefinition repositoryDefinition : repositoryDefinitions) { + List entities = executeQuery(boundedContext, entitiesCache, repositoryDefinition); + log.debug("The data queried is: {}", entities); + + } } }); } @@ -41,17 +49,18 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return repositoryEntitiesMap; } - protected List executeChainQuery(BoundedContext boundedContext, RepositoryLocation repositoryLocation) { - Map> entitiesCache = boundedContext.getEntitiesCache(); - String absoluteAccessPath = repositoryLocation.getAbsoluteAccessPath(); + protected List executeQuery(BoundedContext boundedContext, + Map> entitiesCache, + RepositoryDefinition repositoryDefinition) { + String absoluteAccessPath = repositoryDefinition.getAbsoluteAccessPath(); List entities = entitiesCache.get(absoluteAccessPath); if (entities == null) { - ConfiguredRepository definitionRepository = repositoryLocation.getDefinitionRepository(); + ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); if (isMatchScenes(boundedContext, entityDefinition.getSceneAttribute())) { - EntityExample entityExample = newExampleByCache(boundedContext, repositoryLocation); - if (entityExample.isDirtyQuery()) { - ConfiguredRepository configuredRepository = repositoryLocation.getConfiguredRepository(); + EntityExample entityExample = newExampleByCache(boundedContext, entitiesCache, repositoryDefinition); + if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { + ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); entities = configuredRepository.selectByExample(entityExample); entitiesCache.put(absoluteAccessPath, entities); } @@ -60,12 +69,12 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return entities; } - protected EntityExample newExampleByCache(BoundedContext boundedContext, RepositoryLocation repositoryLocation) { - Map> entitiesCache = boundedContext.getEntitiesCache(); - - String definitionAccessPath = repositoryLocation.getDefinitionAccessPath(); - ConfiguredRepository definitionRepository = repositoryLocation.getDefinitionRepository(); - ConfiguredRepository configuredRepository = repositoryLocation.getConfiguredRepository(); + protected EntityExample newExampleByCache(BoundedContext boundedContext, + Map> entitiesCache, + RepositoryDefinition repositoryDefinition) { + String definitionAccessPath = repositoryDefinition.getDefinitionAccessPath(); + ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); + ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); EntityDefinition queryEntityDefinition = configuredRepository.getEntityDefinition(); @@ -76,19 +85,24 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBindAttribute(); List fieldValues = entitiesCache.get(absoluteAccessPath); if (fieldValues == null) { - fieldValues = collectFieldValues(boundedContext, definitionAccessPath, bindingDefinition); + fieldValues = collectFieldValues(boundedContext, entitiesCache, definitionAccessPath, bindingDefinition); } if (fieldValues != null && !fieldValues.isEmpty()) { String aliasAttribute = bindingDefinition.getAliasAttribute(); EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, fieldValues); entityExample.addCriterion(entityCriterion); + } else { + entityExample.setEmptyQuery(true); + break; } } return entityExample; } - protected List collectFieldValues(BoundedContext boundedContext, String definitionAccessPath, BindingDefinition bindingDefinition) { - Map> entitiesCache = boundedContext.getEntitiesCache(); + protected List collectFieldValues(BoundedContext boundedContext, + Map> entitiesCache, + String definitionAccessPath, + BindingDefinition bindingDefinition) { String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); List entities = entitiesCache.get(absoluteAccessPath); if (entities != null && !entities.isEmpty()) { @@ -105,22 +119,4 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return null; } - protected void buildIndexForEntities(BoundedContext boundedContext, RepositoryLocation repositoryLocation, List entities) { - ConfiguredRepository definitionRepository = repositoryLocation.getDefinitionRepository(); - EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); - List bindingDefinitions = entityDefinition.getBoundBindingDefinitions(); - for (Object entity : entities) { - StringBuilder builder = new StringBuilder(); - for (BindingDefinition bindingDefinition : bindingDefinitions) { - String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityPropertyChain entityPropertyChain = bindingDefinition.getFieldEntityPropertyChain(); - Object boundValue = entityPropertyChain.getValue(entity); - builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); - } - if (builder.length() > 0) { - builder.delete(builder.length() - 2, builder.length()); - } - } - } - } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index a9bc7234..8becae0e 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -1,6 +1,5 @@ package com.gitee.spring.domain.core.repository; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.gitee.spring.domain.core.annotation.Binding; @@ -12,7 +11,6 @@ import com.gitee.spring.domain.core.entity.BindingDefinition; import com.gitee.spring.domain.core.constants.Attribute; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; -import com.gitee.spring.domain.core.entity.SceneEntityProperty; import com.gitee.spring.domain.core.mapper.MapEntityMapper; import com.gitee.spring.domain.core.utils.PathUtils; import com.gitee.spring.domain.core.utils.ReflectUtils; @@ -127,9 +125,16 @@ public abstract class AbstractContextRepository extends AbstractRepositor boolean isRoot = "/".equals(accessPath); if (isRoot) { configuredRepository = newConfiguredRepository( - true, "/", annotatedElement, null, - entityClass, false, entityClass, null, - attributes, bindingAnnotations); + true, + "/", + annotatedElement, + null, + entityClass, + false, + entityClass, + null, + attributes, + bindingAnnotations); rootRepository = configuredRepository; } else { @@ -142,9 +147,16 @@ public abstract class AbstractContextRepository extends AbstractRepositor entityPropertyChain.initialize(); configuredRepository = newConfiguredRepository( - false, accessPath, annotatedElement, entityPropertyChain, - entityClass, isCollection, genericEntityClass, fieldName, - attributes, bindingAnnotations); + false, + accessPath, + annotatedElement, + entityPropertyChain, + entityClass, + isCollection, + genericEntityClass, + fieldName, + attributes, + bindingAnnotations); subRepositories.add(configuredRepository); } allConfiguredRepositoryMap.put(accessPath, configuredRepository); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java index 5cef9dc5..5650c300 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java @@ -11,8 +11,7 @@ import java.util.*; public abstract class AbstractDelegateRepository extends AbstractContextRepository { protected Map fieldEntityPropertyChainMap = new LinkedHashMap<>(); - protected List delegateConfiguredRepositories = new ArrayList<>(); - + @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); @@ -20,12 +19,4 @@ public abstract class AbstractDelegateRepository extends AbstractContextR fieldEntityPropertyChainMap.putIfAbsent(entityPropertyChain.getFieldName(), entityPropertyChain)); } - @Override - protected ConfiguredRepository processConfiguredRepository(ConfiguredRepository configuredRepository) { - if (configuredRepository.getRepository() instanceof AbstractDelegateRepository) { - delegateConfiguredRepositories.add(configuredRepository); - } - return super.processConfiguredRepository(configuredRepository); - } - } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index bbe129c1..eb0c8e8c 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -101,7 +101,7 @@ public abstract class AbstractGenericRepository extends AbstractAwareRepo @Override @SuppressWarnings("unchecked") public List selectByExample(BoundedContext boundedContext, Object example) { - List rootEntities = rootRepository.selectByExample(boundedContext, example); + List rootEntities = rootRepository.selectByExample(boundedContext, example); handleRootEntities(boundedContext, rootEntities); return (List) rootEntities; } @@ -110,12 +110,12 @@ public abstract class AbstractGenericRepository extends AbstractAwareRepo public T selectPageByExample(BoundedContext boundedContext, Object example, Object page) { T dataPage = rootRepository.selectPageByExample(boundedContext, example, page); EntityMapper entityMapper = rootRepository.getEntityMapper(); - List rootEntities = entityMapper.getDataFromPage(dataPage); + List rootEntities = entityMapper.getDataFromPage(dataPage); handleRootEntities(boundedContext, rootEntities); return dataPage; } - protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { + protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { rootEntities.forEach(rootEntity -> handleRootEntity(boundedContext, rootEntity)); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java index 89b85a9f..826f739a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java @@ -17,33 +17,34 @@ public class BatchRepository extends ConfiguredRepository { @Override public List selectByExample(BoundedContext boundedContext, Object example) { - EntityCaches entityCaches = boundedContext.getEntityCaches(); - if (entityCaches != null && example instanceof EntityExample) { - Class repositoryClass = abstractContextRepository.getRepositoryClass(); - String accessPath = entityDefinition.getAccessPath(); - Map> entitiesMap = entityCaches.getCache(repositoryClass, accessPath); - if (entitiesMap != null) { - if (entitiesMap.isEmpty()) { - return Collections.emptyList(); - } - Set entityJoinAliases = entityDefinition.getEntityJoinAliases(); - EntityExample entityExample = (EntityExample) example; - StringBuilder builder = new StringBuilder(); - for (EntityCriterion entityCriterion : entityExample.getEntityCriteria()) { - String fieldName = entityCriterion.getFieldName(); - if (entityJoinAliases.contains(fieldName)) { - Object fieldValue = entityCriterion.getFieldValue(); - builder.append(fieldName).append(": ").append(fieldValue).append(", "); - } - } - if (builder.length() > 0) { - builder.delete(builder.length() - 2, builder.length()); - } - List entities = entitiesMap.get(builder.toString()); - return entities != null ? entities : Collections.emptyList(); - } - } - return super.selectByExample(boundedContext, example); +// EntityCaches entityCaches = boundedContext.getEntityCaches(); +// if (entityCaches != null && example instanceof EntityExample) { +// Class repositoryClass = abstractContextRepository.getRepositoryClass(); +// String accessPath = entityDefinition.getAccessPath(); +// Map> entitiesMap = entityCaches.getCache(repositoryClass, accessPath); +// if (entitiesMap != null) { +// if (entitiesMap.isEmpty()) { +// return Collections.emptyList(); +// } +// Set entityJoinAliases = entityDefinition.getEntityJoinAliases(); +// EntityExample entityExample = (EntityExample) example; +// StringBuilder builder = new StringBuilder(); +// for (EntityCriterion entityCriterion : entityExample.getEntityCriteria()) { +// String fieldName = entityCriterion.getFieldName(); +// if (entityJoinAliases.contains(fieldName)) { +// Object fieldValue = entityCriterion.getFieldValue(); +// builder.append(fieldName).append(": ").append(fieldValue).append(", "); +// } +// } +// if (builder.length() > 0) { +// builder.delete(builder.length() - 2, builder.length()); +// } +// List entities = entitiesMap.get(builder.toString()); +// return entities != null ? entities : Collections.emptyList(); +// } +// } +// return super.selectByExample(boundedContext, example); + return null; } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java index 84d21cdc..67160d1b 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java @@ -9,7 +9,6 @@ import com.gitee.spring.domain.core.entity.EntityPropertyChain; import lombok.Getter; import lombok.Setter; -import java.util.ArrayList; import java.util.List; @Getter -- Gitee From 01329d95b39383a0a77a168b0e788a29cbd2474f Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 20 Jun 2022 15:27:02 +0800 Subject: [PATCH 30/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coating/entity/RepositoryLocation.java | 12 +- .../repository/AbstractCoatingRepository.java | 79 +++++-------- .../domain/core/entity/EntityDefinition.java | 2 +- .../core/entity/RepositoryDefinition.java | 21 +--- .../domain/core/entity/RepositoryGroup.java | 2 + .../repository/AbstractAwareRepository.java | 22 +--- .../repository/AbstractBatchRepository.java | 111 ++++++++++++------ .../repository/AbstractContextRepository.java | 6 +- .../core/repository/BatchRepository.java | 50 -------- 9 files changed, 115 insertions(+), 190 deletions(-) delete mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryLocation.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryLocation.java index 189ab976..91cdee61 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryLocation.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryLocation.java @@ -1,7 +1,6 @@ package com.gitee.spring.domain.coating.entity; -import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; -import com.gitee.spring.domain.core.repository.ConfiguredRepository; +import com.gitee.spring.domain.core.entity.RepositoryDefinition; import lombok.AllArgsConstructor; import lombok.Data; @@ -10,13 +9,6 @@ import java.util.List; @Data @AllArgsConstructor public class RepositoryLocation { - private List multiAccessPath; - private String parentAccessPath; - private String prefixAccessPath; - private String absoluteAccessPath; - private boolean forwardParent; - private ConfiguredRepository parentConfiguredRepository; - private AbstractDelegateRepository abstractDelegateRepository; - private ConfiguredRepository belongConfiguredRepository; + private RepositoryDefinition repositoryDefinition; private List collectedPropertyDefinitions; } diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java index 0c66cc43..0b29d9d7 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java @@ -16,6 +16,8 @@ import com.gitee.spring.domain.core.constants.Attribute; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import com.gitee.spring.domain.coating.entity.RepositoryLocation; +import com.gitee.spring.domain.core.entity.RepositoryDefinition; +import com.gitee.spring.domain.core.entity.RepositoryGroup; import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import com.gitee.spring.domain.event.repository.AbstractEventRepository; @@ -108,13 +110,9 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo } }); - Map repositoryLocationMap = new LinkedHashMap<>(); - collectRepositoryLocationMap(repositoryLocationMap, new ArrayList<>(), null, this, + List reversedRepositoryLocations = collectReversedRepositoryLocations( locationPropertyDefinitionsMap, fieldPropertyDefinitionMap); - - List repositoryLocations = new ArrayList<>(repositoryLocationMap.values()); - checkFieldNames(coatingClass, allPropertyDefinitionMap.keySet(), repositoryLocations); - Collections.reverse(repositoryLocations); + checkFieldNames(coatingClass, allPropertyDefinitionMap.keySet(), reversedRepositoryLocations); AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(coatingClass, Coating.class); String name = null; @@ -127,7 +125,7 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo CoatingDefinition coatingDefinition = new CoatingDefinition(entityClass, coatingClass, attributes, name, allPropertyDefinitionMap); CoatingAssembler coatingAssembler = new DefaultCoatingAssembler( - coatingDefinition, availablePropertyDefinitions, repositoryLocations); + coatingDefinition, availablePropertyDefinitions, reversedRepositoryLocations); classCoatingAssemblerMap.put(coatingClass, coatingAssembler); Assert.isTrue(!nameCoatingAssemblerMap.containsKey(name), "The same coating name cannot exist!"); @@ -136,55 +134,34 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo } } - protected void collectRepositoryLocationMap(Map repositoryLocationMap, - List multiAccessPath, - ConfiguredRepository parentConfiguredRepository, - AbstractDelegateRepository abstractDelegateRepository, - Map> locationPropertyDefinitionsMap, - Map fieldPropertyDefinitionMap) { - - String parentAccessPath = multiAccessPath.size() > 1 ? StrUtil.join("", multiAccessPath.subList(0, multiAccessPath.size() - 1)) : ""; - String prefixAccessPath = StrUtil.join("", multiAccessPath); - - List finalMultiAccessPath = multiAccessPath; - allConfiguredRepositoryMap.forEach((accessPath, configuredRepository) -> { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - - String absoluteAccessPath = prefixAccessPath + entityDefinition.getAccessPath(); - boolean forwardParent = entityDefinition.isRoot() && parentConfiguredRepository != null; - - List propertyDefinitions = new ArrayList<>(); - if (locationPropertyDefinitionsMap.containsKey(absoluteAccessPath)) { - propertyDefinitions.addAll(locationPropertyDefinitionsMap.get(absoluteAccessPath)); - } - - Set fieldNames = entityDefinition.getFieldNames(); - List boundSceneEntityProperties = entityDefinition.getBoundSceneEntityProperties(); + private List collectReversedRepositoryLocations(Map> locationPropertyDefinitionsMap, + Map fieldPropertyDefinitionMap) { + List reversedRepositoryLocations = new ArrayList<>(); + for (RepositoryGroup repositoryGroup : reversedRepositoryGroups) { + for (RepositoryDefinition repositoryDefinition : repositoryGroup.getRepositoryDefinitions()) { + String absoluteAccessPath = repositoryDefinition.getAbsoluteAccessPath(); + ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); + EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); + + List propertyDefinitions = new ArrayList<>(); + if (locationPropertyDefinitionsMap.containsKey(absoluteAccessPath)) { + propertyDefinitions.addAll(locationPropertyDefinitionsMap.get(absoluteAccessPath)); + } - for (String fieldName : fieldNames) { - PropertyDefinition propertyDefinition = fieldPropertyDefinitionMap.get(fieldName); - if (propertyDefinition != null) { - propertyDefinitions.add(propertyDefinition); + for (String fieldName : entityDefinition.getFieldNames()) { + PropertyDefinition propertyDefinition = fieldPropertyDefinitionMap.get(fieldName); + if (propertyDefinition != null) { + propertyDefinitions.add(propertyDefinition); + } } - } - if (!propertyDefinitions.isEmpty() || !boundSceneEntityProperties.isEmpty()) { - RepositoryLocation repositoryLocation = new RepositoryLocation( - finalMultiAccessPath, parentAccessPath, prefixAccessPath, absoluteAccessPath, - forwardParent, parentConfiguredRepository, abstractDelegateRepository, configuredRepository, - propertyDefinitions); - repositoryLocationMap.put(absoluteAccessPath, repositoryLocation); + if (!propertyDefinitions.isEmpty() || entityDefinition.isBoundEntity()) { + RepositoryLocation repositoryLocation = new RepositoryLocation(repositoryDefinition, propertyDefinitions); + reversedRepositoryLocations.add(repositoryLocation); + } } - }); - - for (ConfiguredRepository configuredRepository : delegateRepositories) { - multiAccessPath = new ArrayList<>(multiAccessPath); - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - multiAccessPath.add(entityDefinition.getAccessPath()); - AbstractDelegateRepository delegateRepository = (AbstractDelegateRepository) configuredRepository.getRepository(); - collectRepositoryLocationMap(repositoryLocationMap, multiAccessPath, configuredRepository, delegateRepository, - locationPropertyDefinitionsMap, fieldPropertyDefinitionMap); } + return reversedRepositoryLocations; } protected void checkFieldNames(Class coatingClass, Set fieldNames, List repositoryLocations) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index 8a9348a2..709c7441 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -36,7 +36,7 @@ public class EntityDefinition { private List boundBindingDefinitions; private List contextBindingDefinitions; private BindingDefinition boundIdBindingDefinition; - private Set entityJoinAliases; + private boolean boundEntity; private Set fieldNames; private Map entityPropertyChainMap; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java index 0b7c37e8..cf577a5e 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java @@ -1,32 +1,15 @@ package com.gitee.spring.domain.core.entity; -import com.gitee.spring.domain.core.repository.AbstractAwareRepository; -import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.AllArgsConstructor; import lombok.Data; -import java.util.List; - @Data @AllArgsConstructor public class RepositoryDefinition { - - private List multiAccessPath; - private String parentAccessPath; private String prefixAccessPath; private String absoluteAccessPath; - private boolean forwardParent; - private ConfiguredRepository parentConfiguredRepository; - private AbstractAwareRepository abstractAwareRepository; + private boolean aggregateRoot; + private ConfiguredRepository definitionRepository; private ConfiguredRepository configuredRepository; - - public String getDefinitionAccessPath() { - return forwardParent ? parentAccessPath : prefixAccessPath; - } - - public ConfiguredRepository getDefinitionRepository() { - return forwardParent ? parentConfiguredRepository : configuredRepository; - } - } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java index be82db6f..8fb4f1a0 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java @@ -1,5 +1,6 @@ package com.gitee.spring.domain.core.entity; +import com.gitee.spring.domain.core.repository.AbstractAwareRepository; import lombok.AllArgsConstructor; import lombok.Data; @@ -9,5 +10,6 @@ import java.util.List; @AllArgsConstructor public class RepositoryGroup { private String accessPath; + private AbstractAwareRepository abstractAwareRepository; private List repositoryDefinitions; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java index 9f3a1649..25586c95 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java @@ -21,22 +21,17 @@ public abstract class AbstractAwareRepository extends AbstractDelegateRep @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); - resolveRepositoryGroups(new ArrayList<>(), null, this); + resolveRepositoryGroups(new ArrayList<>(), this); repositoryGroups.addAll(repositoryGroupMap.values()); reversedRepositoryGroups.addAll(repositoryGroupMap.values()); Collections.reverse(reversedRepositoryGroups); } - protected void resolveRepositoryGroups(List multiAccessPath, - ConfiguredRepository parentConfiguredRepository, - AbstractAwareRepository abstractAwareRepository) { - - List finalMultiAccessPath = multiAccessPath; - String parentAccessPath = multiAccessPath.size() > 1 ? StrUtil.join("", multiAccessPath.subList(0, multiAccessPath.size() - 1)) : ""; + protected void resolveRepositoryGroups(List multiAccessPath, AbstractAwareRepository abstractAwareRepository) { String prefixAccessPath = StrUtil.join("", multiAccessPath); String groupAccessPath = StringUtils.isNotBlank(prefixAccessPath) ? prefixAccessPath : "/"; - RepositoryGroup repositoryGroup = new RepositoryGroup(groupAccessPath, new ArrayList<>()); + RepositoryGroup repositoryGroup = new RepositoryGroup(groupAccessPath, abstractAwareRepository, new ArrayList<>()); repositoryGroupMap.put(groupAccessPath, repositoryGroup); List repositoryDefinitions = repositoryGroup.getRepositoryDefinitions(); @@ -50,28 +45,23 @@ public abstract class AbstractAwareRepository extends AbstractDelegateRep AbstractAwareRepository repository = (AbstractAwareRepository) abstractRepository; RepositoryDefinition repositoryDefinition = new RepositoryDefinition( - finalMultiAccessPath, - parentAccessPath, prefixAccessPath, absoluteAccessPath, true, configuredRepository, - repository, repository.getRootRepository()); repositoryDefinitions.add(repositoryDefinition); multiAccessPath = new ArrayList<>(multiAccessPath); multiAccessPath.add(entityDefinition.getAccessPath()); - resolveRepositoryGroups(multiAccessPath, configuredRepository, repository); + resolveRepositoryGroups(multiAccessPath, repository); + } else { RepositoryDefinition repositoryDefinition = new RepositoryDefinition( - finalMultiAccessPath, - parentAccessPath, prefixAccessPath, absoluteAccessPath, false, - parentConfiguredRepository, - abstractAwareRepository, + configuredRepository, configuredRepository); repositoryDefinitions.add(repositoryDefinition); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index f409cf2b..377eb413 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -1,9 +1,12 @@ package com.gitee.spring.domain.core.repository; import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.api.EntityIndex; import com.gitee.spring.domain.core.api.EntityMapper; +import com.gitee.spring.domain.core.api.EntityProperty; import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; +import com.gitee.spring.domain.core.impl.DefaultEntityIndex; import lombok.extern.slf4j.Slf4j; import java.util.*; @@ -11,68 +14,58 @@ import java.util.*; @Slf4j public abstract class AbstractBatchRepository extends AbstractGenericRepository { -// @Override -// protected ConfiguredRepository processConfiguredRepository(ConfiguredRepository configuredRepository) { -// return new BatchRepository(configuredRepository); -// } - @Override protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { if (rootEntities.size() == 1) { super.handleRootEntity(boundedContext, rootEntities.get(0)); } else { Map> entitiesCache = new LinkedHashMap<>(); + Map entitiesIndex = new LinkedHashMap<>(); entitiesCache.put("/", rootEntities); - Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); - repositoryEntitiesMap.forEach((abstractAwareRepository, eachRootEntities) -> { - List repositoryGroups = abstractAwareRepository.getRepositoryGroups(); - for (RepositoryGroup repositoryGroup : repositoryGroups) { - List repositoryDefinitions = repositoryGroup.getRepositoryDefinitions(); - for (RepositoryDefinition repositoryDefinition : repositoryDefinitions) { - List entities = executeQuery(boundedContext, entitiesCache, repositoryDefinition); - log.debug("The data queried is: {}", entities); - - } + for (RepositoryGroup repositoryGroup : repositoryGroups) { + List repositoryDefinitions = repositoryGroup.getRepositoryDefinitions(); + for (RepositoryDefinition repositoryDefinition : repositoryDefinitions) { + executeQuery(boundedContext, entitiesCache, entitiesIndex, repositoryDefinition); } - }); - } - } + } - protected Map, List> adaptiveRepositoryEntities(List rootEntities) { - Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); - for (Object rootEntity : rootEntities) { - AbstractAwareRepository abstractAwareRepository = adaptiveRepository(rootEntity); - List entities = repositoryEntitiesMap.computeIfAbsent(abstractAwareRepository, key -> new ArrayList<>()); - entities.add(rootEntity); + for (RepositoryGroup repositoryGroup : repositoryGroups) { + List targetRootEntities = entitiesCache.get(repositoryGroup.getAccessPath()); + if (targetRootEntities != null && !targetRootEntities.isEmpty()) { + assembleRootEntities(boundedContext, entitiesIndex, repositoryGroup, targetRootEntities); + } + } } - return repositoryEntitiesMap; } - protected List executeQuery(BoundedContext boundedContext, - Map> entitiesCache, - RepositoryDefinition repositoryDefinition) { + protected void executeQuery(BoundedContext boundedContext, + Map> entitiesCache, + Map entitiesIndex, + RepositoryDefinition repositoryDefinition) { String absoluteAccessPath = repositoryDefinition.getAbsoluteAccessPath(); List entities = entitiesCache.get(absoluteAccessPath); if (entities == null) { ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); - EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); - if (isMatchScenes(boundedContext, entityDefinition.getSceneAttribute())) { + if (isMatchScenes(boundedContext, definitionRepository)) { EntityExample entityExample = newExampleByCache(boundedContext, entitiesCache, repositoryDefinition); if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); entities = configuredRepository.selectByExample(entityExample); - entitiesCache.put(absoluteAccessPath, entities); + log.debug("The data queried is: {}", entities); + if (entities != null && !entities.isEmpty()) { + entitiesCache.put(absoluteAccessPath, entities); + entitiesIndex.put(absoluteAccessPath, new DefaultEntityIndex(repositoryDefinition, entities)); + } } } } - return entities; } protected EntityExample newExampleByCache(BoundedContext boundedContext, Map> entitiesCache, RepositoryDefinition repositoryDefinition) { - String definitionAccessPath = repositoryDefinition.getDefinitionAccessPath(); + String prefixAccessPath = repositoryDefinition.getPrefixAccessPath(); ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); @@ -82,10 +75,10 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo EntityExample entityExample = entityMapper.newExample(queryEntityDefinition, boundedContext); for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { - String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBindAttribute(); + String absoluteAccessPath = prefixAccessPath + bindingDefinition.getBindAttribute(); List fieldValues = entitiesCache.get(absoluteAccessPath); if (fieldValues == null) { - fieldValues = collectFieldValues(boundedContext, entitiesCache, definitionAccessPath, bindingDefinition); + fieldValues = collectFieldValues(entitiesCache, prefixAccessPath, bindingDefinition); } if (fieldValues != null && !fieldValues.isEmpty()) { String aliasAttribute = bindingDefinition.getAliasAttribute(); @@ -99,11 +92,10 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return entityExample; } - protected List collectFieldValues(BoundedContext boundedContext, - Map> entitiesCache, - String definitionAccessPath, + protected List collectFieldValues(Map> entitiesCache, + String prefixAccessPath, BindingDefinition bindingDefinition) { - String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); + String absoluteAccessPath = prefixAccessPath + bindingDefinition.getBelongAccessPath(); List entities = entitiesCache.get(absoluteAccessPath); if (entities != null && !entities.isEmpty()) { EntityPropertyChain relativeEntityPropertyChain = bindingDefinition.getRelativeEntityPropertyChain(); @@ -119,4 +111,45 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return null; } + protected void assembleRootEntities(BoundedContext boundedContext, + Map entitiesIndex, + RepositoryGroup repositoryGroup, + List rootEntities) { + for (Object rootEntity : rootEntities) { + for (RepositoryDefinition repositoryDefinition : repositoryGroup.getRepositoryDefinitions()) { + ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); + EntityPropertyChain entityPropertyChain = definitionRepository.getEntityPropertyChain(); + EntityPropertyChain lastEntityPropertyChain = entityPropertyChain.getLastEntityPropertyChain(); + Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); + if (lastEntity != null && isMatchScenes(boundedContext, definitionRepository)) { + EntityIndex entityIndex = entitiesIndex.get(repositoryDefinition.getAbsoluteAccessPath()); + String foreignKey = buildForeignKey(definitionRepository, rootEntity); + List entities = entityIndex.selectList(foreignKey); + if (entities != null) { + Object entity = convertManyToOneEntity(definitionRepository, entities); + if (entity != null) { + EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); + entityProperty.setValue(lastEntity, entity); + } + } + } + } + } + } + + protected String buildForeignKey(ConfiguredRepository definitionRepository, Object rootEntity) { + StringBuilder builder = new StringBuilder(); + EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); + for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); + Object boundValue = boundEntityPropertyChain.getValue(rootEntity); + builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); + } + if (builder.length() > 0) { + builder.delete(builder.length() - 2, builder.length()); + } + return builder.toString(); + } + } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 8becae0e..ca96a7b5 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -225,7 +225,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor List boundBindingDefinitions = new ArrayList<>(); List contextBindingDefinitions = new ArrayList<>(); BindingDefinition boundIdBindingDefinition = null; - Set entityJoinAliases = new LinkedHashSet<>(); for (Binding bindingAnnotation : bindingAnnotations) { AnnotationAttributes bindingAttributes = AnnotationUtils.getAnnotationAttributes( @@ -264,12 +263,11 @@ public abstract class AbstractContextRepository extends AbstractRepositor boundEntityPropertyChain.initialize(); EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); + entityDefinition.setBoundEntity(true); Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); relativeEntityPropertyChain = entityPropertyChainMap.get(bindAttribute); Assert.notNull(relativeEntityPropertyChain, "The relative entity property cannot be null!"); relativeEntityPropertyChain.initialize(); - - entityJoinAliases.add(aliasAttribute); } BindingDefinition bindingDefinition = new BindingDefinition( @@ -299,7 +297,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor attributes, sceneAttributeSet, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, bindingDefinitions, boundBindingDefinitions, contextBindingDefinitions, boundIdBindingDefinition, - entityJoinAliases, new LinkedHashSet<>(), new LinkedHashMap<>()); + false, new LinkedHashSet<>(), new LinkedHashMap<>()); EntityMapper entityMapper = newEntityMapper(entityDefinition); if (mapAsExample) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java deleted file mode 100644 index 826f739a..00000000 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/BatchRepository.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.gitee.spring.domain.core.repository; - -import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.entity.BoundedContext; -import com.gitee.spring.domain.core.entity.EntityExample; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class BatchRepository extends ConfiguredRepository { - - public BatchRepository(ConfiguredRepository configuredRepository) { - super(configuredRepository); - } - - @Override - public List selectByExample(BoundedContext boundedContext, Object example) { -// EntityCaches entityCaches = boundedContext.getEntityCaches(); -// if (entityCaches != null && example instanceof EntityExample) { -// Class repositoryClass = abstractContextRepository.getRepositoryClass(); -// String accessPath = entityDefinition.getAccessPath(); -// Map> entitiesMap = entityCaches.getCache(repositoryClass, accessPath); -// if (entitiesMap != null) { -// if (entitiesMap.isEmpty()) { -// return Collections.emptyList(); -// } -// Set entityJoinAliases = entityDefinition.getEntityJoinAliases(); -// EntityExample entityExample = (EntityExample) example; -// StringBuilder builder = new StringBuilder(); -// for (EntityCriterion entityCriterion : entityExample.getEntityCriteria()) { -// String fieldName = entityCriterion.getFieldName(); -// if (entityJoinAliases.contains(fieldName)) { -// Object fieldValue = entityCriterion.getFieldValue(); -// builder.append(fieldName).append(": ").append(fieldValue).append(", "); -// } -// } -// if (builder.length() > 0) { -// builder.delete(builder.length() - 2, builder.length()); -// } -// List entities = entitiesMap.get(builder.toString()); -// return entities != null ? entities : Collections.emptyList(); -// } -// } -// return super.selectByExample(boundedContext, example); - return null; - } - -} -- Gitee From 78c6f2f166df628107b8e731aa57836537028ed6 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 20 Jun 2022 16:04:20 +0800 Subject: [PATCH 31/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/coating/entity/ChainCriterion.java | 7 +- .../repository/AbstractChainRepository.java | 66 ++++++++----------- 2 files changed, 30 insertions(+), 43 deletions(-) diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/ChainCriterion.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/ChainCriterion.java index 4674ab56..467869d2 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/ChainCriterion.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/ChainCriterion.java @@ -1,17 +1,12 @@ package com.gitee.spring.domain.coating.entity; import com.gitee.spring.domain.core.entity.EntityExample; -import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; -import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class ChainCriterion { - private String definitionAccessPath; - private ConfiguredRepository definitionRepository; - private AbstractDelegateRepository abstractDelegateRepository; - private ConfiguredRepository queryRepository; + private RepositoryLocation repositoryLocation; private EntityExample entityExample; } diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java index 61e5564d..caed1b90 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java @@ -26,13 +26,16 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo Map criterionMap = new LinkedHashMap<>(); for (RepositoryLocation repositoryLocation : defaultCoatingAssembler.getReversedRepositoryLocations()) { - String absoluteAccessPath = repositoryLocation.getAbsoluteAccessPath(); + RepositoryDefinition repositoryDefinition = repositoryLocation.getRepositoryDefinition(); + String absoluteAccessPath = repositoryDefinition.getAbsoluteAccessPath(); + if (!criterionMap.containsKey(absoluteAccessPath)) { ChainCriterion chainCriterion = buildCriterion(boundedContext, repositoryLocation); criterionMap.put(absoluteAccessPath, chainCriterion); } + ChainCriterion chainCriterion = criterionMap.get(absoluteAccessPath); - addToExampleOfCriterion(repositoryLocation, coating, chainCriterion); + addToExampleOfCriterion(chainCriterion, coating); } executeChainQuery(boundedContext, criterionMap); @@ -43,24 +46,16 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo } protected ChainCriterion buildCriterion(BoundedContext boundedContext, RepositoryLocation repositoryLocation) { - String definitionAccessPath = repositoryLocation.getPrefixAccessPath(); - ConfiguredRepository definitionRepository = repositoryLocation.getBelongConfiguredRepository(); - - if (repositoryLocation.isForwardParent()) { - definitionAccessPath = repositoryLocation.getParentAccessPath(); - definitionRepository = repositoryLocation.getParentConfiguredRepository(); - } - - AbstractDelegateRepository abstractDelegateRepository = repositoryLocation.getAbstractDelegateRepository(); - ConfiguredRepository queryRepository = repositoryLocation.getBelongConfiguredRepository(); - EntityDefinition entityDefinition = queryRepository.getEntityDefinition(); - EntityMapper entityMapper = queryRepository.getEntityMapper(); + RepositoryDefinition repositoryDefinition = repositoryLocation.getRepositoryDefinition(); + ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + EntityMapper entityMapper = configuredRepository.getEntityMapper(); EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - - return new ChainCriterion(definitionAccessPath, definitionRepository, abstractDelegateRepository, queryRepository, entityExample); + return new ChainCriterion(repositoryLocation, entityExample); } - protected void addToExampleOfCriterion(RepositoryLocation repositoryLocation, Object coating, ChainCriterion chainCriterion) { + protected void addToExampleOfCriterion(ChainCriterion chainCriterion, Object coating) { + RepositoryLocation repositoryLocation = chainCriterion.getRepositoryLocation(); EntityExample entityExample = chainCriterion.getEntityExample(); for (PropertyDefinition propertyDefinition : repositoryLocation.getCollectedPropertyDefinitions()) { Object fieldValue = ReflectUtil.getFieldValue(coating, propertyDefinition.getDeclaredField()); @@ -68,8 +63,9 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo String aliasAttribute = propertyDefinition.getAliasAttribute(); String operatorAttribute = propertyDefinition.getOperatorAttribute(); - ConfiguredRepository queryRepository = chainCriterion.getQueryRepository(); - EntityMapper entityMapper = queryRepository.getEntityMapper(); + RepositoryDefinition repositoryDefinition = repositoryLocation.getRepositoryDefinition(); + ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); + EntityMapper entityMapper = configuredRepository.getEntityMapper(); EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, operatorAttribute, fieldValue); entityExample.addCriterion(entityCriterion); } @@ -77,26 +73,22 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo } protected void executeChainQuery(BoundedContext boundedContext, Map criterionMap) { - - if (boundedContext.getEntityCaches() == null) { - boundedContext.setEntityCaches(new DefaultEntityCaches()); - } - criterionMap.forEach((accessPath, chainCriterion) -> { if ("/".equals(accessPath)) return; - String definitionAccessPath = chainCriterion.getDefinitionAccessPath(); - ConfiguredRepository definitionRepository = chainCriterion.getDefinitionRepository(); - AbstractDelegateRepository abstractDelegateRepository = chainCriterion.getAbstractDelegateRepository(); - ConfiguredRepository queryRepository = chainCriterion.getQueryRepository(); + RepositoryLocation repositoryLocation = chainCriterion.getRepositoryLocation(); EntityExample entityExample = chainCriterion.getEntityExample(); - Class repositoryClass = abstractDelegateRepository.getRepositoryClass(); + RepositoryDefinition repositoryDefinition = repositoryLocation.getRepositoryDefinition(); + String prefixAccessPath = repositoryDefinition.getPrefixAccessPath(); + ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); + ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); + EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); - EntityMapper entityMapper = queryRepository.getEntityMapper(); + EntityMapper entityMapper = configuredRepository.getEntityMapper(); for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { - String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); + String absoluteAccessPath = prefixAccessPath + bindingDefinition.getBelongAccessPath(); ChainCriterion targetChainCriterion = criterionMap.get(absoluteAccessPath); if (targetChainCriterion != null) { EntityExample targetEntityExample = targetChainCriterion.getEntityExample(); @@ -124,14 +116,12 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo List entities = Collections.emptyList(); if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { - entities = queryRepository.selectByExample(boundedContext, entityExample); + entities = configuredRepository.selectByExample(boundedContext, entityExample); log.debug("The data queried is: {}", entities); } - buildIndexForEntities(boundedContext, repositoryClass, definitionRepository, entities); - for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { - String absoluteAccessPath = definitionAccessPath + bindingDefinition.getBelongAccessPath(); + String absoluteAccessPath = prefixAccessPath + bindingDefinition.getBelongAccessPath(); ChainCriterion targetChainCriterion = criterionMap.get(absoluteAccessPath); if (targetChainCriterion != null) { EntityExample targetEntityExample = targetChainCriterion.getEntityExample(); @@ -149,8 +139,10 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo String boundFieldName = bindingDefinition.getBoundFieldName(); Object fieldValue = fieldValues.size() == 1 ? fieldValues.get(0) : fieldValues; - ConfiguredRepository targetQueryRepository = targetChainCriterion.getQueryRepository(); - EntityMapper targetEntityMapper = targetQueryRepository.getEntityMapper(); + RepositoryLocation targetRepositoryLocation = targetChainCriterion.getRepositoryLocation(); + RepositoryDefinition targetRepositoryDefinition = targetRepositoryLocation.getRepositoryDefinition(); + ConfiguredRepository targetConfiguredRepository = targetRepositoryDefinition.getConfiguredRepository(); + EntityMapper targetEntityMapper = targetConfiguredRepository.getEntityMapper(); EntityCriterion entityCriterion = targetEntityMapper.newCriterion(boundFieldName, Operator.EQ, fieldValue); targetEntityExample.addCriterion(entityCriterion); -- Gitee From cc70124b5e9ea812ed472c07d9c4f45c9eef7ff1 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 27 Jun 2022 16:54:10 +0800 Subject: [PATCH 32/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/repository/AbstractContextRepository.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index ca96a7b5..5e81493f 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -122,8 +122,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor Set bindingAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(annotatedElement, Binding.class); if (attributes != null) { ConfiguredRepository configuredRepository; - boolean isRoot = "/".equals(accessPath); - if (isRoot) { + if ("/".equals(accessPath)) { configuredRepository = newConfiguredRepository( true, "/", @@ -139,13 +138,13 @@ public abstract class AbstractContextRepository extends AbstractRepositor } else { EntityPropertyChain entityPropertyChain = allEntityPropertyChainMap.get(accessPath); + entityPropertyChain.initialize(); + Class entityClass = entityPropertyChain.getEntityClass(); boolean isCollection = entityPropertyChain.isCollection(); Class genericEntityClass = entityPropertyChain.getGenericEntityClass(); String fieldName = entityPropertyChain.getFieldName(); - entityPropertyChain.initialize(); - configuredRepository = newConfiguredRepository( false, accessPath, -- Gitee From 06c2a6fd1b7b71bbc9f766b0e3a99270eb40feea Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 28 Jun 2022 10:38:04 +0800 Subject: [PATCH 33/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=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 | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 5e81493f..769c94a8 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -121,9 +121,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(annotatedElement, Entity.class); Set bindingAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(annotatedElement, Binding.class); if (attributes != null) { - ConfiguredRepository configuredRepository; if ("/".equals(accessPath)) { - configuredRepository = newConfiguredRepository( + ConfiguredRepository configuredRepository = newConfiguredRepository( true, "/", annotatedElement, @@ -135,6 +134,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor attributes, bindingAnnotations); rootRepository = configuredRepository; + allConfiguredRepositoryMap.put(accessPath, configuredRepository); + orderedRepositories.add(configuredRepository); } else { EntityPropertyChain entityPropertyChain = allEntityPropertyChainMap.get(accessPath); @@ -145,7 +146,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor Class genericEntityClass = entityPropertyChain.getGenericEntityClass(); String fieldName = entityPropertyChain.getFieldName(); - configuredRepository = newConfiguredRepository( + ConfiguredRepository configuredRepository = newConfiguredRepository( false, accessPath, annotatedElement, @@ -157,9 +158,9 @@ public abstract class AbstractContextRepository extends AbstractRepositor attributes, bindingAnnotations); subRepositories.add(configuredRepository); + allConfiguredRepositoryMap.put(accessPath, configuredRepository); + orderedRepositories.add(configuredRepository); } - allConfiguredRepositoryMap.put(accessPath, configuredRepository); - orderedRepositories.add(configuredRepository); } } -- Gitee From 74a8f66ee6d692c1fa6128f5b11144dbf6e7bbdd Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 28 Jun 2022 10:41:34 +0800 Subject: [PATCH 34/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=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 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 769c94a8..c91ca2ba 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -102,8 +102,15 @@ public abstract class AbstractContextRepository extends AbstractRepositor String fieldAccessPath = accessPath + "/" + fieldName; EntityPropertyChain entityPropertyChain = new EntityPropertyChain( - lastEntityPropertyChain, entityClass, fieldAccessPath, declaredField, - fieldEntityClass, isCollection, fieldGenericEntityClass, fieldName, null); + lastEntityPropertyChain, + entityClass, + fieldAccessPath, + declaredField, + fieldEntityClass, + isCollection, + fieldGenericEntityClass, + fieldName, + null); allEntityPropertyChainMap.put(fieldAccessPath, entityPropertyChain); if (!filterEntityClass(fieldEntityClass)) { -- Gitee From 5940a12ad40f3cd94466f9782d153f877524d18e Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 28 Jun 2022 17:40:50 +0800 Subject: [PATCH 35/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractBatchRepositoryV2.java | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java new file mode 100644 index 00000000..dfc97441 --- /dev/null +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java @@ -0,0 +1,107 @@ +package com.gitee.spring.domain.core.repository; + +import com.gitee.spring.domain.core.api.EntityCriterion; +import com.gitee.spring.domain.core.api.EntityIndex; +import com.gitee.spring.domain.core.api.EntityMapper; +import com.gitee.spring.domain.core.api.EntityProperty; +import com.gitee.spring.domain.core.constants.Operator; +import com.gitee.spring.domain.core.entity.*; +import com.gitee.spring.domain.core.impl.DefaultEntityIndex; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +public abstract class AbstractBatchRepositoryV2 extends AbstractGenericRepository { + + @Override + protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { + Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); + repositoryEntitiesMap.forEach((abstractAwareRepository, eachRootEntities) -> { + for (ConfiguredRepository configuredRepository : abstractAwareRepository.getSubRepositories()) { + if (isMatchScenes(boundedContext, configuredRepository)) { + EntityExample entityExample = newExampleByRootEntities(boundedContext, configuredRepository, eachRootEntities); + if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { + List entities = configuredRepository.selectByExample(entityExample); + log.debug("The data queried is: {}", entities); + assembleRootEntities(boundedContext, eachRootEntities, configuredRepository, entities); + } + } + } + }); + } + + protected Map, List> adaptiveRepositoryEntities(List rootEntities) { + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); + for (Object rootEntity : rootEntities) { + AbstractAwareRepository abstractAwareRepository = adaptiveRepository(rootEntity); + List entities = repositoryEntitiesMap.computeIfAbsent(abstractAwareRepository, key -> new ArrayList<>()); + entities.add(rootEntity); + } + return repositoryEntitiesMap; + } + + protected EntityExample newExampleByRootEntities(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List rootEntities) { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + EntityMapper entityMapper = configuredRepository.getEntityMapper(); + EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); + for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { + EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); + List fieldValues = new ArrayList<>(); + for (Object rootEntity : rootEntities) { + Object fieldValue = boundEntityPropertyChain.getValue(rootEntity); + if (fieldValue != null) { + fieldValues.add(fieldValue); + } + } + if (!fieldValues.isEmpty()) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, fieldValues); + entityExample.addCriterion(entityCriterion); + } else { + entityExample.setEmptyQuery(true); + break; + } + } + return entityExample; + } + + protected void assembleRootEntities(BoundedContext boundedContext, List rootEntities, ConfiguredRepository configuredRepository, List entities) { + EntityIndex entityIndex = new DefaultEntityIndex(null, entities); + for (Object rootEntity : rootEntities) { + EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); + EntityPropertyChain lastEntityPropertyChain = entityPropertyChain.getLastEntityPropertyChain(); + Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); + if (lastEntity != null && isMatchScenes(boundedContext, configuredRepository)) { + String foreignKey = buildForeignKey(configuredRepository, rootEntity); + List eachEntities = entityIndex.selectList(foreignKey); + if (eachEntities != null) { + Object entity = convertManyToOneEntity(configuredRepository, eachEntities); + if (entity != null) { + EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); + entityProperty.setValue(lastEntity, entity); + } + } + } + } + } + + protected String buildForeignKey(ConfiguredRepository configuredRepository, Object rootEntity) { + StringBuilder builder = new StringBuilder(); + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); + Object boundValue = boundEntityPropertyChain.getValue(rootEntity); + builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); + } + if (builder.length() > 0) { + builder.delete(builder.length() - 2, builder.length()); + } + return builder.toString(); + } + +} -- Gitee From 92c7b0220b06b4aeb8caf9707bfc2646cad686e8 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 28 Jun 2022 18:31:52 +0800 Subject: [PATCH 36/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/repository/AbstractBatchRepositoryV2.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java index dfc97441..dffb741a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java @@ -25,7 +25,7 @@ public abstract class AbstractBatchRepositoryV2 extends AbstractGenericRe if (isMatchScenes(boundedContext, configuredRepository)) { EntityExample entityExample = newExampleByRootEntities(boundedContext, configuredRepository, eachRootEntities); if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(entityExample); + List entities = configuredRepository.selectByExample(boundedContext, entityExample); log.debug("The data queried is: {}", entities); assembleRootEntities(boundedContext, eachRootEntities, configuredRepository, entities); } -- Gitee From a6afeb86b2a390c604099235c9303848f9b52d04 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 30 Jun 2022 16:43:21 +0800 Subject: [PATCH 37/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractAwareRepository.java | 4 --- .../repository/AbstractBatchRepositoryV2.java | 14 ++++---- .../repository/AbstractContextRepository.java | 6 ++-- .../AbstractDelegateRepository.java | 33 ++++++++++++++++--- 4 files changed, 39 insertions(+), 18 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java index 25586c95..05719c90 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java @@ -68,8 +68,4 @@ public abstract class AbstractAwareRepository extends AbstractDelegateRep } } - protected AbstractAwareRepository adaptiveRepository(Object rootEntity) { - return this; - } - } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java index dffb741a..0531a3f0 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java @@ -19,9 +19,9 @@ public abstract class AbstractBatchRepositoryV2 extends AbstractGenericRe @Override protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { - Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); - repositoryEntitiesMap.forEach((abstractAwareRepository, eachRootEntities) -> { - for (ConfiguredRepository configuredRepository : abstractAwareRepository.getSubRepositories()) { + Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); + repositoryEntitiesMap.forEach((abstractDelegateRepository, eachRootEntities) -> { + for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { if (isMatchScenes(boundedContext, configuredRepository)) { EntityExample entityExample = newExampleByRootEntities(boundedContext, configuredRepository, eachRootEntities); if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { @@ -34,11 +34,11 @@ public abstract class AbstractBatchRepositoryV2 extends AbstractGenericRe }); } - protected Map, List> adaptiveRepositoryEntities(List rootEntities) { - Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); + protected Map, List> adaptiveRepositoryEntities(List rootEntities) { + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); for (Object rootEntity : rootEntities) { - AbstractAwareRepository abstractAwareRepository = adaptiveRepository(rootEntity); - List entities = repositoryEntitiesMap.computeIfAbsent(abstractAwareRepository, key -> new ArrayList<>()); + AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); + List entities = repositoryEntitiesMap.computeIfAbsent(abstractDelegateRepository, key -> new ArrayList<>()); entities.add(rootEntity); } return repositoryEntitiesMap; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index c91ca2ba..1cd29633 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -41,6 +41,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor protected String name; protected Map allEntityPropertyChainMap = new LinkedHashMap<>(); + protected Map fieldEntityPropertyChainMap = new LinkedHashMap<>(); protected Map allConfiguredRepositoryMap = new LinkedHashMap<>(); protected ConfiguredRepository rootRepository; @@ -78,7 +79,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor annotatedElementMap.put("/", entityClass); allEntityPropertyChainMap.values().forEach(entityPropertyChain -> annotatedElementMap.put(entityPropertyChain.getAccessPath(), entityPropertyChain.getDeclaredField())); - annotatedElementMap.forEach(this::resolveRepository); + annotatedElementMap.forEach(this::resolveConfiguredRepository); orderedRepositories.sort(Comparator.comparingInt( configuredRepository -> configuredRepository.getEntityDefinition().getOrderAttribute())); @@ -112,6 +113,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor fieldName, null); allEntityPropertyChainMap.put(fieldAccessPath, entityPropertyChain); + fieldEntityPropertyChainMap.putIfAbsent(fieldName, entityPropertyChain); if (!filterEntityClass(fieldEntityClass)) { resolveEntityPropertyChains(fieldAccessPath, fieldEntityClass); @@ -124,7 +126,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor return className.startsWith("java.lang.") || className.startsWith("java.util."); } - protected void resolveRepository(String accessPath, AnnotatedElement annotatedElement) { + protected void resolveConfiguredRepository(String accessPath, AnnotatedElement annotatedElement) { AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(annotatedElement, Entity.class); Set bindingAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(annotatedElement, Binding.class); if (attributes != null) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java index 5650c300..7056b6e2 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java @@ -1,8 +1,8 @@ package com.gitee.spring.domain.core.repository; -import com.gitee.spring.domain.core.entity.EntityPropertyChain; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.util.ReflectionUtils; import java.util.*; @@ -10,13 +10,36 @@ import java.util.*; @EqualsAndHashCode(callSuper = false) public abstract class AbstractDelegateRepository extends AbstractContextRepository { - protected Map fieldEntityPropertyChainMap = new LinkedHashMap<>(); - + protected Map, AbstractDelegateRepository> delegateRepositoryMap = new LinkedHashMap<>(); + @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); - allEntityPropertyChainMap.values().forEach(entityPropertyChain -> - fieldEntityPropertyChainMap.putIfAbsent(entityPropertyChain.getFieldName(), entityPropertyChain)); + resolveDelegateRepositories(); + } + + protected void resolveDelegateRepositories() { + delegateRepositoryMap.put(entityClass, this); + Class repositoryClass = this.getClass(); + ReflectionUtils.doWithLocalFields(repositoryClass, declaredField -> { + Class fieldClass = declaredField.getType(); + if (AbstractDelegateRepository.class.isAssignableFrom(fieldClass)) { + Object bean = applicationContext.getBean(fieldClass); + AbstractDelegateRepository repository = (AbstractDelegateRepository) bean; + Class fieldEntityClass = repository.getEntityClass(); + if (entityClass.isAssignableFrom(fieldEntityClass)) { + delegateRepositoryMap.put(fieldEntityClass, repository); + } + } + }); + } + + protected AbstractDelegateRepository adaptiveRepository(Class entityClass) { + return delegateRepositoryMap.get(entityClass); + } + + protected AbstractDelegateRepository adaptiveRepository(Object rootEntity) { + return adaptiveRepository(rootEntity.getClass()); } } -- Gitee From 748c614e1368f0b1a93b8f2268cc4d18780f6c3e Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 2 Jul 2022 17:28:54 +0800 Subject: [PATCH 38/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/spring/domain/core/entity/EntityDefinition.java | 1 + .../domain/core/repository/AbstractContextRepository.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java index 709c7441..5b313a96 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/EntityDefinition.java @@ -14,6 +14,7 @@ import java.util.Set; public class EntityDefinition { private boolean root; private String accessPath; + private String uniqueKey; private AnnotatedElement annotatedElement; private Class entityClass; private boolean collection; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 1cd29633..ac294263 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -185,6 +185,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor AnnotationAttributes attributes, Set bindingAnnotations) { + String uniqueKey = name + ":" + accessPath; + String[] sceneAttributeStrs = attributes.getStringArray(Attribute.SCENE_ATTRIBUTE); Set sceneAttributeSet = new LinkedHashSet<>(Arrays.asList(sceneAttributeStrs)); @@ -301,7 +303,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor } EntityDefinition entityDefinition = new EntityDefinition( - isRoot, accessPath, annotatedElement, + isRoot, accessPath, uniqueKey, annotatedElement, entityClass, isCollection, genericEntityClass, fieldName, attributes, sceneAttributeSet, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, -- Gitee From 129dc8cbf36c3a7752f5f5e925746134376bd8f5 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 4 Jul 2022 16:30:01 +0800 Subject: [PATCH 39/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractBatchRepository.java | 140 +++++++----------- .../repository/AbstractBatchRepositoryV2.java | 107 ------------- .../repository/AbstractContextRepository.java | 5 +- 3 files changed, 54 insertions(+), 198 deletions(-) delete mode 100644 spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 377eb413..f441a0cf 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -9,7 +9,10 @@ import com.gitee.spring.domain.core.entity.*; import com.gitee.spring.domain.core.impl.DefaultEntityIndex; import lombok.extern.slf4j.Slf4j; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; @Slf4j public abstract class AbstractBatchRepository extends AbstractGenericRepository { @@ -18,69 +21,55 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { if (rootEntities.size() == 1) { super.handleRootEntity(boundedContext, rootEntities.get(0)); - } else { - Map> entitiesCache = new LinkedHashMap<>(); - Map entitiesIndex = new LinkedHashMap<>(); - entitiesCache.put("/", rootEntities); - for (RepositoryGroup repositoryGroup : repositoryGroups) { - List repositoryDefinitions = repositoryGroup.getRepositoryDefinitions(); - for (RepositoryDefinition repositoryDefinition : repositoryDefinitions) { - executeQuery(boundedContext, entitiesCache, entitiesIndex, repositoryDefinition); - } + } else if (rootEntities.size() > 1) { + if (delegateRepositoryMap.size() == 1) { + executeQuery(boundedContext, this, rootEntities); + } else { + Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); + repositoryEntitiesMap.forEach((abstractDelegateRepository, eachRootEntities) -> + executeQuery(boundedContext, abstractDelegateRepository, eachRootEntities)); } + } + } - for (RepositoryGroup repositoryGroup : repositoryGroups) { - List targetRootEntities = entitiesCache.get(repositoryGroup.getAccessPath()); - if (targetRootEntities != null && !targetRootEntities.isEmpty()) { - assembleRootEntities(boundedContext, entitiesIndex, repositoryGroup, targetRootEntities); - } - } + protected Map, List> adaptiveRepositoryEntities(List rootEntities) { + Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); + for (Object rootEntity : rootEntities) { + AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); + List entities = repositoryEntitiesMap.computeIfAbsent(abstractDelegateRepository, key -> new ArrayList<>()); + entities.add(rootEntity); } + return repositoryEntitiesMap; } - protected void executeQuery(BoundedContext boundedContext, - Map> entitiesCache, - Map entitiesIndex, - RepositoryDefinition repositoryDefinition) { - String absoluteAccessPath = repositoryDefinition.getAbsoluteAccessPath(); - List entities = entitiesCache.get(absoluteAccessPath); - if (entities == null) { - ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); - if (isMatchScenes(boundedContext, definitionRepository)) { - EntityExample entityExample = newExampleByCache(boundedContext, entitiesCache, repositoryDefinition); + protected void executeQuery(BoundedContext boundedContext, AbstractDelegateRepository abstractDelegateRepository, List rootEntities) { + for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { + if (isMatchScenes(boundedContext, configuredRepository)) { + EntityExample entityExample = newExampleByRootEntities(boundedContext, rootEntities, configuredRepository); if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { - ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); - entities = configuredRepository.selectByExample(entityExample); + List entities = configuredRepository.selectByExample(boundedContext, entityExample); log.debug("The data queried is: {}", entities); - if (entities != null && !entities.isEmpty()) { - entitiesCache.put(absoluteAccessPath, entities); - entitiesIndex.put(absoluteAccessPath, new DefaultEntityIndex(repositoryDefinition, entities)); - } + assembleRootEntities(boundedContext, rootEntities, configuredRepository, entities); } } } } - protected EntityExample newExampleByCache(BoundedContext boundedContext, - Map> entitiesCache, - RepositoryDefinition repositoryDefinition) { - String prefixAccessPath = repositoryDefinition.getPrefixAccessPath(); - ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); - ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); - - EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); - EntityDefinition queryEntityDefinition = configuredRepository.getEntityDefinition(); + protected EntityExample newExampleByRootEntities(BoundedContext boundedContext, List rootEntities, ConfiguredRepository configuredRepository) { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); - EntityExample entityExample = entityMapper.newExample(queryEntityDefinition, boundedContext); - + EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { - String absoluteAccessPath = prefixAccessPath + bindingDefinition.getBindAttribute(); - List fieldValues = entitiesCache.get(absoluteAccessPath); - if (fieldValues == null) { - fieldValues = collectFieldValues(entitiesCache, prefixAccessPath, bindingDefinition); + EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); + List fieldValues = new ArrayList<>(); + for (Object rootEntity : rootEntities) { + Object fieldValue = boundEntityPropertyChain.getValue(rootEntity); + if (fieldValue != null) { + fieldValues.add(fieldValue); + } } - if (fieldValues != null && !fieldValues.isEmpty()) { + if (!fieldValues.isEmpty()) { String aliasAttribute = bindingDefinition.getAliasAttribute(); EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, fieldValues); entityExample.addCriterion(entityCriterion); @@ -92,54 +81,29 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return entityExample; } - protected List collectFieldValues(Map> entitiesCache, - String prefixAccessPath, - BindingDefinition bindingDefinition) { - String absoluteAccessPath = prefixAccessPath + bindingDefinition.getBelongAccessPath(); - List entities = entitiesCache.get(absoluteAccessPath); - if (entities != null && !entities.isEmpty()) { - EntityPropertyChain relativeEntityPropertyChain = bindingDefinition.getRelativeEntityPropertyChain(); - List fieldValues = new ArrayList<>(); - for (Object entity : entities) { - Object fieldValue = relativeEntityPropertyChain.getValue(entity); - if (fieldValue != null) { - fieldValues.add(fieldValue); - } - } - return fieldValues; - } - return null; - } - - protected void assembleRootEntities(BoundedContext boundedContext, - Map entitiesIndex, - RepositoryGroup repositoryGroup, - List rootEntities) { + protected void assembleRootEntities(BoundedContext boundedContext, List rootEntities, ConfiguredRepository configuredRepository, List entities) { + EntityIndex entityIndex = new DefaultEntityIndex(null, entities); for (Object rootEntity : rootEntities) { - for (RepositoryDefinition repositoryDefinition : repositoryGroup.getRepositoryDefinitions()) { - ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); - EntityPropertyChain entityPropertyChain = definitionRepository.getEntityPropertyChain(); - EntityPropertyChain lastEntityPropertyChain = entityPropertyChain.getLastEntityPropertyChain(); - Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); - if (lastEntity != null && isMatchScenes(boundedContext, definitionRepository)) { - EntityIndex entityIndex = entitiesIndex.get(repositoryDefinition.getAbsoluteAccessPath()); - String foreignKey = buildForeignKey(definitionRepository, rootEntity); - List entities = entityIndex.selectList(foreignKey); - if (entities != null) { - Object entity = convertManyToOneEntity(definitionRepository, entities); - if (entity != null) { - EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); - entityProperty.setValue(lastEntity, entity); - } + EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); + EntityPropertyChain lastEntityPropertyChain = entityPropertyChain.getLastEntityPropertyChain(); + Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); + if (lastEntity != null && isMatchScenes(boundedContext, configuredRepository)) { + String foreignKey = buildForeignKey(configuredRepository, rootEntity); + List eachEntities = entityIndex.selectList(foreignKey); + if (eachEntities != null) { + Object entity = convertManyToOneEntity(configuredRepository, eachEntities); + if (entity != null) { + EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); + entityProperty.setValue(lastEntity, entity); } } } } } - protected String buildForeignKey(ConfiguredRepository definitionRepository, Object rootEntity) { + protected String buildForeignKey(ConfiguredRepository configuredRepository, Object rootEntity) { StringBuilder builder = new StringBuilder(); - EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { String aliasAttribute = bindingDefinition.getAliasAttribute(); EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java deleted file mode 100644 index 0531a3f0..00000000 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepositoryV2.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.gitee.spring.domain.core.repository; - -import com.gitee.spring.domain.core.api.EntityCriterion; -import com.gitee.spring.domain.core.api.EntityIndex; -import com.gitee.spring.domain.core.api.EntityMapper; -import com.gitee.spring.domain.core.api.EntityProperty; -import com.gitee.spring.domain.core.constants.Operator; -import com.gitee.spring.domain.core.entity.*; -import com.gitee.spring.domain.core.impl.DefaultEntityIndex; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -@Slf4j -public abstract class AbstractBatchRepositoryV2 extends AbstractGenericRepository { - - @Override - protected void handleRootEntities(BoundedContext boundedContext, List rootEntities) { - Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); - repositoryEntitiesMap.forEach((abstractDelegateRepository, eachRootEntities) -> { - for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { - if (isMatchScenes(boundedContext, configuredRepository)) { - EntityExample entityExample = newExampleByRootEntities(boundedContext, configuredRepository, eachRootEntities); - if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { - List entities = configuredRepository.selectByExample(boundedContext, entityExample); - log.debug("The data queried is: {}", entities); - assembleRootEntities(boundedContext, eachRootEntities, configuredRepository, entities); - } - } - } - }); - } - - protected Map, List> adaptiveRepositoryEntities(List rootEntities) { - Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); - for (Object rootEntity : rootEntities) { - AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); - List entities = repositoryEntitiesMap.computeIfAbsent(abstractDelegateRepository, key -> new ArrayList<>()); - entities.add(rootEntity); - } - return repositoryEntitiesMap; - } - - protected EntityExample newExampleByRootEntities(BoundedContext boundedContext, ConfiguredRepository configuredRepository, List rootEntities) { - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - EntityMapper entityMapper = configuredRepository.getEntityMapper(); - EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); - for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { - EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); - List fieldValues = new ArrayList<>(); - for (Object rootEntity : rootEntities) { - Object fieldValue = boundEntityPropertyChain.getValue(rootEntity); - if (fieldValue != null) { - fieldValues.add(fieldValue); - } - } - if (!fieldValues.isEmpty()) { - String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, fieldValues); - entityExample.addCriterion(entityCriterion); - } else { - entityExample.setEmptyQuery(true); - break; - } - } - return entityExample; - } - - protected void assembleRootEntities(BoundedContext boundedContext, List rootEntities, ConfiguredRepository configuredRepository, List entities) { - EntityIndex entityIndex = new DefaultEntityIndex(null, entities); - for (Object rootEntity : rootEntities) { - EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); - EntityPropertyChain lastEntityPropertyChain = entityPropertyChain.getLastEntityPropertyChain(); - Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); - if (lastEntity != null && isMatchScenes(boundedContext, configuredRepository)) { - String foreignKey = buildForeignKey(configuredRepository, rootEntity); - List eachEntities = entityIndex.selectList(foreignKey); - if (eachEntities != null) { - Object entity = convertManyToOneEntity(configuredRepository, eachEntities); - if (entity != null) { - EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); - entityProperty.setValue(lastEntity, entity); - } - } - } - } - } - - protected String buildForeignKey(ConfiguredRepository configuredRepository, Object rootEntity) { - StringBuilder builder = new StringBuilder(); - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { - String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); - Object boundValue = boundEntityPropertyChain.getValue(rootEntity); - builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); - } - if (builder.length() > 0) { - builder.delete(builder.length() - 2, builder.length()); - } - return builder.toString(); - } - -} diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index ac294263..085e2acb 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -184,7 +184,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor String fieldName, AnnotationAttributes attributes, Set bindingAnnotations) { - String uniqueKey = name + ":" + accessPath; String[] sceneAttributeStrs = attributes.getStringArray(Attribute.SCENE_ATTRIBUTE); @@ -333,8 +332,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); String prefixAccessPath = entityDefinition.getAccessPath() + "/"; - List accessPaths = allEntityPropertyChainMap.keySet().stream() - .filter(key -> key.startsWith(prefixAccessPath)).collect(Collectors.toList()); + List accessPaths = allEntityPropertyChainMap.keySet().stream().filter(key -> + key.startsWith(prefixAccessPath)).collect(Collectors.toList()); for (String accessPath : accessPaths) { String lastAccessPath = PathUtils.getLastAccessPath(accessPath); -- Gitee From f7272ec5058cefe3ece1a7bf395e6780a0e6b105 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 4 Jul 2022 20:12:47 +0800 Subject: [PATCH 40/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/domain/core/api/EntityIndex.java | 4 ++ .../domain/core/impl/DefaultEntityIndex.java | 21 ++++++++-- .../repository/AbstractBatchRepository.java | 42 +++++++++---------- 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java index 4f4c3b96..48d0e91d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java @@ -1,9 +1,13 @@ package com.gitee.spring.domain.core.api; +import com.gitee.spring.domain.core.repository.ConfiguredRepository; + import java.util.List; public interface EntityIndex { + String buildForeignKey(ConfiguredRepository configuredRepository, Object rootEntity); + List selectList(String foreignKey); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java index e395e152..3bd211f3 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java @@ -16,9 +16,8 @@ public class DefaultEntityIndex implements EntityIndex { private final Map> entitiesMap = new ConcurrentHashMap<>(); - public DefaultEntityIndex(RepositoryDefinition repositoryDefinition, List entities) { - ConfiguredRepository definitionRepository = repositoryDefinition.getDefinitionRepository(); - EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); + public DefaultEntityIndex(ConfiguredRepository configuredRepository, List entities) { + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); List bindingDefinitions = entityDefinition.getBoundBindingDefinitions(); for (Object entity : entities) { StringBuilder builder = new StringBuilder(); @@ -37,6 +36,22 @@ public class DefaultEntityIndex implements EntityIndex { } } + @Override + public String buildForeignKey(ConfiguredRepository configuredRepository, Object rootEntity) { + StringBuilder builder = new StringBuilder(); + EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); + for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); + Object boundValue = boundEntityPropertyChain.getValue(rootEntity); + builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); + } + if (builder.length() > 0) { + builder.delete(builder.length() - 2, builder.length()); + } + return builder.toString(); + } + @Override public List selectList(String foreignKey) { return entitiesMap.get(foreignKey); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index f441a0cf..563077ee 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -50,7 +50,8 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { List entities = configuredRepository.selectByExample(boundedContext, entityExample); log.debug("The data queried is: {}", entities); - assembleRootEntities(boundedContext, rootEntities, configuredRepository, entities); + EntityIndex entityIndex = new DefaultEntityIndex(configuredRepository, entities); + assembleRootEntities(rootEntities, configuredRepository, entityIndex); } } } @@ -78,20 +79,30 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo break; } } + if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { + for (BindingDefinition bindingDefinition : entityDefinition.getContextBindingDefinitions()) { + String bindAttribute = bindingDefinition.getBindAttribute(); + Object boundValue = boundedContext.get(bindAttribute); + if (boundValue != null) { + String aliasAttribute = bindingDefinition.getAliasAttribute(); + EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, boundValue); + entityExample.addCriterion(entityCriterion); + } + } + } return entityExample; } - protected void assembleRootEntities(BoundedContext boundedContext, List rootEntities, ConfiguredRepository configuredRepository, List entities) { - EntityIndex entityIndex = new DefaultEntityIndex(null, entities); + protected void assembleRootEntities(List rootEntities, ConfiguredRepository configuredRepository, EntityIndex entityIndex) { for (Object rootEntity : rootEntities) { EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); EntityPropertyChain lastEntityPropertyChain = entityPropertyChain.getLastEntityPropertyChain(); Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); - if (lastEntity != null && isMatchScenes(boundedContext, configuredRepository)) { - String foreignKey = buildForeignKey(configuredRepository, rootEntity); - List eachEntities = entityIndex.selectList(foreignKey); - if (eachEntities != null) { - Object entity = convertManyToOneEntity(configuredRepository, eachEntities); + if (lastEntity != null) { + String foreignKey = entityIndex.buildForeignKey(configuredRepository, rootEntity); + List entities = entityIndex.selectList(foreignKey); + if (entities != null) { + Object entity = convertManyToOneEntity(configuredRepository, entities); if (entity != null) { EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); entityProperty.setValue(lastEntity, entity); @@ -101,19 +112,4 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo } } - protected String buildForeignKey(ConfiguredRepository configuredRepository, Object rootEntity) { - StringBuilder builder = new StringBuilder(); - EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { - String aliasAttribute = bindingDefinition.getAliasAttribute(); - EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); - Object boundValue = boundEntityPropertyChain.getValue(rootEntity); - builder.append(aliasAttribute).append(": ").append(boundValue).append(", "); - } - if (builder.length() > 0) { - builder.delete(builder.length() - 2, builder.length()); - } - return builder.toString(); - } - } -- Gitee From 64c05076cbf0d75520af7e3a918afc52f48d4937 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 7 Jul 2022 16:50:14 +0800 Subject: [PATCH 41/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/spring/domain/core/api/EntityIndex.java | 4 +--- .../spring/domain/core/impl/DefaultEntityIndex.java | 11 +++++------ .../core/repository/AbstractBatchRepository.java | 9 ++++++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java index 48d0e91d..f7c2299f 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityIndex.java @@ -6,8 +6,6 @@ import java.util.List; public interface EntityIndex { - String buildForeignKey(ConfiguredRepository configuredRepository, Object rootEntity); - - List selectList(String foreignKey); + List selectList(Object rootEntity, ConfiguredRepository configuredRepository); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java index 3bd211f3..b0664eb1 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java @@ -37,7 +37,11 @@ public class DefaultEntityIndex implements EntityIndex { } @Override - public String buildForeignKey(ConfiguredRepository configuredRepository, Object rootEntity) { + public List selectList(Object rootEntity, ConfiguredRepository configuredRepository) { + return entitiesMap.get(buildForeignKey(rootEntity, configuredRepository)); + } + + public String buildForeignKey(Object rootEntity, ConfiguredRepository configuredRepository) { StringBuilder builder = new StringBuilder(); EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { @@ -52,9 +56,4 @@ public class DefaultEntityIndex implements EntityIndex { return builder.toString(); } - @Override - public List selectList(String foreignKey) { - return entitiesMap.get(foreignKey); - } - } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 563077ee..a25c5369 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -50,7 +50,7 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo if (!entityExample.isEmptyQuery() && entityExample.isDirtyQuery()) { List entities = configuredRepository.selectByExample(boundedContext, entityExample); log.debug("The data queried is: {}", entities); - EntityIndex entityIndex = new DefaultEntityIndex(configuredRepository, entities); + EntityIndex entityIndex = buildEntityIndex(configuredRepository, entities); assembleRootEntities(rootEntities, configuredRepository, entityIndex); } } @@ -93,14 +93,17 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return entityExample; } + protected EntityIndex buildEntityIndex(ConfiguredRepository configuredRepository, List entities) { + return new DefaultEntityIndex(configuredRepository, entities); + } + protected void assembleRootEntities(List rootEntities, ConfiguredRepository configuredRepository, EntityIndex entityIndex) { for (Object rootEntity : rootEntities) { EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); EntityPropertyChain lastEntityPropertyChain = entityPropertyChain.getLastEntityPropertyChain(); Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); if (lastEntity != null) { - String foreignKey = entityIndex.buildForeignKey(configuredRepository, rootEntity); - List entities = entityIndex.selectList(foreignKey); + List entities = entityIndex.selectList(rootEntity, configuredRepository); if (entities != null) { Object entity = convertManyToOneEntity(configuredRepository, entities); if (entity != null) { -- Gitee From 078f75479e54f901fd6d3b7ff4c4896a1a0dd9d0 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Thu, 7 Jul 2022 17:22:46 +0800 Subject: [PATCH 42/55] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/repository/AbstractBatchRepository.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index a25c5369..3e1c7afd 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -24,11 +24,11 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo } else if (rootEntities.size() > 1) { if (delegateRepositoryMap.size() == 1) { - executeQuery(boundedContext, this, rootEntities); + executeQuery(boundedContext, rootEntities, this); } else { Map, List> repositoryEntitiesMap = adaptiveRepositoryEntities(rootEntities); repositoryEntitiesMap.forEach((abstractDelegateRepository, eachRootEntities) -> - executeQuery(boundedContext, abstractDelegateRepository, eachRootEntities)); + executeQuery(boundedContext, eachRootEntities, abstractDelegateRepository)); } } } @@ -43,7 +43,7 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo return repositoryEntitiesMap; } - protected void executeQuery(BoundedContext boundedContext, AbstractDelegateRepository abstractDelegateRepository, List rootEntities) { + protected void executeQuery(BoundedContext boundedContext, List rootEntities, AbstractDelegateRepository abstractDelegateRepository) { for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { if (isMatchScenes(boundedContext, configuredRepository)) { EntityExample entityExample = newExampleByRootEntities(boundedContext, rootEntities, configuredRepository); -- Gitee From 7870c37cb3acf1dc4e6ab2d8127fc1f98e6ed57a Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 11 Jul 2022 14:36:08 +0800 Subject: [PATCH 43/55] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E5=86=85=E5=AD=98=E5=8D=A0=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/impl/DefaultEntityIndex.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java index b0664eb1..b0456fb4 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java @@ -8,14 +8,18 @@ import com.gitee.spring.domain.core.entity.RepositoryDefinition; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; public class DefaultEntityIndex implements EntityIndex { - private final Map> entitiesMap = new ConcurrentHashMap<>(); + private final Map entitiesMap = new ConcurrentHashMap<>(); + @SuppressWarnings("unchecked") public DefaultEntityIndex(ConfiguredRepository configuredRepository, List entities) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); List bindingDefinitions = entityDefinition.getBoundBindingDefinitions(); @@ -31,14 +35,35 @@ public class DefaultEntityIndex implements EntityIndex { builder.delete(builder.length() - 2, builder.length()); } String foreignKey = builder.toString(); - List existEntities = entitiesMap.computeIfAbsent(foreignKey, key -> new ArrayList<>()); - existEntities.add(entity); + Object existEntity = entitiesMap.get(foreignKey); + if (existEntity == null) { + entitiesMap.put(foreignKey, entity); + } else { + if (existEntity instanceof Collection) { + ((Collection) existEntity).add(entity); + } else { + List list = new ArrayList<>(); + list.add(existEntity); + list.add(entity); + entitiesMap.put(foreignKey, list); + } + } } } @Override + @SuppressWarnings("unchecked") public List selectList(Object rootEntity, ConfiguredRepository configuredRepository) { - return entitiesMap.get(buildForeignKey(rootEntity, configuredRepository)); + String foreignKey = buildForeignKey(rootEntity, configuredRepository); + Object existEntity = entitiesMap.get(foreignKey); + if (existEntity != null) { + if (existEntity instanceof Collection) { + return (List) existEntity; + } else { + return Collections.singletonList(existEntity); + } + } + return Collections.emptyList(); } public String buildForeignKey(Object rootEntity, ConfiguredRepository configuredRepository) { -- Gitee From 77b2adfb85d13fff5467a43d29acbb04277ba49d Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 11 Jul 2022 16:17:10 +0800 Subject: [PATCH 44/55] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=A7=E6=89=BF?= =?UTF-8?q?=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/spring/domain/core/impl/DefaultEntityIndex.java | 2 -- .../domain/core/repository/AbstractDelegateRepository.java | 4 ++-- .../domain/core/repository/AbstractGenericRepository.java | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java index b0456fb4..cb6bdc1d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityIndex.java @@ -4,7 +4,6 @@ import com.gitee.spring.domain.core.api.EntityIndex; import com.gitee.spring.domain.core.entity.BindingDefinition; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; -import com.gitee.spring.domain.core.entity.RepositoryDefinition; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import java.util.ArrayList; @@ -13,7 +12,6 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; public class DefaultEntityIndex implements EntityIndex { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java index 7056b6e2..9be20338 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java @@ -15,10 +15,10 @@ public abstract class AbstractDelegateRepository extends AbstractContextR @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); - resolveDelegateRepositories(); + resolveDelegateRepositoryMap(); } - protected void resolveDelegateRepositories() { + protected void resolveDelegateRepositoryMap() { delegateRepositoryMap.put(entityClass, this); Class repositoryClass = this.getClass(); ReflectionUtils.doWithLocalFields(repositoryClass, declaredField -> { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index eb0c8e8c..00abe13c 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -12,7 +12,7 @@ import java.util.Collection; import java.util.List; import java.util.Set; -public abstract class AbstractGenericRepository extends AbstractAwareRepository { +public abstract class AbstractGenericRepository extends AbstractDelegateRepository { @Override @SuppressWarnings("unchecked") -- Gitee From 47b699c39885f0a34d004d18584922c4ac9eb3d8 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 11 Jul 2022 19:28:34 +0800 Subject: [PATCH 45/55] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=80=86=E5=90=91?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coating}/entity/RepositoryDefinition.java | 2 +- .../coating}/entity/RepositoryGroup.java | 4 +-- .../coating/entity/RepositoryLocation.java | 1 - .../repository/AbstractAwareRepository.java | 14 +++++---- .../repository/AbstractChainRepository.java | 30 ++++++++----------- .../repository/AbstractCoatingRepository.java | 17 +++++------ 6 files changed, 31 insertions(+), 37 deletions(-) rename {spring-domain-core/src/main/java/com/gitee/spring/domain/core => spring-domain-coating/src/main/java/com/gitee/spring/domain/coating}/entity/RepositoryDefinition.java (89%) rename {spring-domain-core/src/main/java/com/gitee/spring/domain/core => spring-domain-coating/src/main/java/com/gitee/spring/domain/coating}/entity/RepositoryGroup.java (70%) rename {spring-domain-core/src/main/java/com/gitee/spring/domain/core => spring-domain-coating/src/main/java/com/gitee/spring/domain/coating}/repository/AbstractAwareRepository.java (85%) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryDefinition.java similarity index 89% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java rename to spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryDefinition.java index cf577a5e..ee03cdb8 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryDefinition.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryDefinition.java @@ -1,4 +1,4 @@ -package com.gitee.spring.domain.core.entity; +package com.gitee.spring.domain.coating.entity; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.AllArgsConstructor; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryGroup.java similarity index 70% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java rename to spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryGroup.java index 8fb4f1a0..49420967 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/RepositoryGroup.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryGroup.java @@ -1,6 +1,6 @@ -package com.gitee.spring.domain.core.entity; +package com.gitee.spring.domain.coating.entity; -import com.gitee.spring.domain.core.repository.AbstractAwareRepository; +import com.gitee.spring.domain.coating.repository.AbstractAwareRepository; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryLocation.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryLocation.java index 91cdee61..5708bc80 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryLocation.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/entity/RepositoryLocation.java @@ -1,6 +1,5 @@ package com.gitee.spring.domain.coating.entity; -import com.gitee.spring.domain.core.entity.RepositoryDefinition; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractAwareRepository.java similarity index 85% rename from spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java rename to spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractAwareRepository.java index 05719c90..4f5915e1 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractAwareRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractAwareRepository.java @@ -1,9 +1,12 @@ -package com.gitee.spring.domain.core.repository; +package com.gitee.spring.domain.coating.repository; import cn.hutool.core.util.StrUtil; import com.gitee.spring.domain.core.entity.EntityDefinition; -import com.gitee.spring.domain.core.entity.RepositoryGroup; -import com.gitee.spring.domain.core.entity.RepositoryDefinition; +import com.gitee.spring.domain.coating.entity.RepositoryGroup; +import com.gitee.spring.domain.coating.entity.RepositoryDefinition; +import com.gitee.spring.domain.core.repository.AbstractRepository; +import com.gitee.spring.domain.core.repository.ConfiguredRepository; +import com.gitee.spring.domain.event.repository.AbstractEventRepository; import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.commons.lang3.StringUtils; @@ -12,7 +15,7 @@ import java.util.*; @Data @EqualsAndHashCode(callSuper = false) -public abstract class AbstractAwareRepository extends AbstractDelegateRepository { +public abstract class AbstractAwareRepository extends AbstractEventRepository { protected Map repositoryGroupMap = new LinkedHashMap<>(); protected List repositoryGroups = new ArrayList<>(); @@ -35,8 +38,7 @@ public abstract class AbstractAwareRepository extends AbstractDelegateRep repositoryGroupMap.put(groupAccessPath, repositoryGroup); List repositoryDefinitions = repositoryGroup.getRepositoryDefinitions(); - List subRepositories = abstractAwareRepository.getSubRepositories(); - for (ConfiguredRepository configuredRepository : subRepositories) { + for (ConfiguredRepository configuredRepository : abstractAwareRepository.getSubRepositories()) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); String absoluteAccessPath = prefixAccessPath + entityDefinition.getAccessPath(); diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java index caed1b90..2b7f5abf 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java @@ -5,13 +5,13 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ReflectUtil; import com.gitee.spring.domain.coating.entity.ChainCriterion; import com.gitee.spring.domain.coating.entity.PropertyDefinition; +import com.gitee.spring.domain.coating.entity.RepositoryDefinition; import com.gitee.spring.domain.coating.entity.RepositoryLocation; import com.gitee.spring.domain.coating.impl.DefaultCoatingAssembler; import com.gitee.spring.domain.core.api.EntityCriterion; import com.gitee.spring.domain.core.api.EntityMapper; import com.gitee.spring.domain.core.constants.Operator; import com.gitee.spring.domain.core.entity.*; -import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.extern.slf4j.Slf4j; @@ -20,22 +20,19 @@ import java.util.*; @Slf4j public abstract class AbstractChainRepository extends AbstractCoatingRepository { - public EntityExample buildExample(BoundedContext boundedContext, Object coating) { - DefaultCoatingAssembler defaultCoatingAssembler = (DefaultCoatingAssembler) classCoatingAssemblerMap.get(coating.getClass()); + public EntityExample buildExample(BoundedContext boundedContext, Object coatingObject) { + DefaultCoatingAssembler defaultCoatingAssembler = (DefaultCoatingAssembler) classCoatingAssemblerMap.get(coatingObject.getClass()); Assert.notNull(defaultCoatingAssembler, "No coating assembler exists!"); Map criterionMap = new LinkedHashMap<>(); for (RepositoryLocation repositoryLocation : defaultCoatingAssembler.getReversedRepositoryLocations()) { + ChainCriterion chainCriterion = buildCriterion(boundedContext, repositoryLocation); + addToExampleOfCriterion(chainCriterion, coatingObject); + RepositoryDefinition repositoryDefinition = repositoryLocation.getRepositoryDefinition(); String absoluteAccessPath = repositoryDefinition.getAbsoluteAccessPath(); - - if (!criterionMap.containsKey(absoluteAccessPath)) { - ChainCriterion chainCriterion = buildCriterion(boundedContext, repositoryLocation); - criterionMap.put(absoluteAccessPath, chainCriterion); - } - - ChainCriterion chainCriterion = criterionMap.get(absoluteAccessPath); - addToExampleOfCriterion(chainCriterion, coating); + absoluteAccessPath = repositoryDefinition.isAggregateRoot() ? absoluteAccessPath + "/" : absoluteAccessPath; + criterionMap.put(absoluteAccessPath, chainCriterion); } executeChainQuery(boundedContext, criterionMap); @@ -54,15 +51,14 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo return new ChainCriterion(repositoryLocation, entityExample); } - protected void addToExampleOfCriterion(ChainCriterion chainCriterion, Object coating) { + protected void addToExampleOfCriterion(ChainCriterion chainCriterion, Object coatingObject) { RepositoryLocation repositoryLocation = chainCriterion.getRepositoryLocation(); EntityExample entityExample = chainCriterion.getEntityExample(); for (PropertyDefinition propertyDefinition : repositoryLocation.getCollectedPropertyDefinitions()) { - Object fieldValue = ReflectUtil.getFieldValue(coating, propertyDefinition.getDeclaredField()); + String aliasAttribute = propertyDefinition.getAliasAttribute(); + String operatorAttribute = propertyDefinition.getOperatorAttribute(); + Object fieldValue = ReflectUtil.getFieldValue(coatingObject, propertyDefinition.getDeclaredField()); if (fieldValue != null) { - String aliasAttribute = propertyDefinition.getAliasAttribute(); - String operatorAttribute = propertyDefinition.getOperatorAttribute(); - RepositoryDefinition repositoryDefinition = repositoryLocation.getRepositoryDefinition(); ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); @@ -74,8 +70,6 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo protected void executeChainQuery(BoundedContext boundedContext, Map criterionMap) { criterionMap.forEach((accessPath, chainCriterion) -> { - if ("/".equals(accessPath)) return; - RepositoryLocation repositoryLocation = chainCriterion.getRepositoryLocation(); EntityExample entityExample = chainCriterion.getEntityExample(); diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java index 0b29d9d7..179ebd47 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractCoatingRepository.java @@ -16,11 +16,9 @@ import com.gitee.spring.domain.core.constants.Attribute; import com.gitee.spring.domain.core.entity.EntityDefinition; import com.gitee.spring.domain.core.entity.EntityPropertyChain; import com.gitee.spring.domain.coating.entity.RepositoryLocation; -import com.gitee.spring.domain.core.entity.RepositoryDefinition; -import com.gitee.spring.domain.core.entity.RepositoryGroup; -import com.gitee.spring.domain.core.repository.AbstractDelegateRepository; +import com.gitee.spring.domain.coating.entity.RepositoryDefinition; +import com.gitee.spring.domain.coating.entity.RepositoryGroup; import com.gitee.spring.domain.core.repository.ConfiguredRepository; -import com.gitee.spring.domain.event.repository.AbstractEventRepository; import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.commons.lang3.StringUtils; @@ -35,7 +33,7 @@ import java.util.concurrent.ConcurrentHashMap; @Data @EqualsAndHashCode(callSuper = false) -public abstract class AbstractCoatingRepository extends AbstractEventRepository { +public abstract class AbstractCoatingRepository extends AbstractAwareRepository { protected Map, CoatingAssembler> classCoatingAssemblerMap = new ConcurrentHashMap<>(); protected Map nameCoatingAssemblerMap = new ConcurrentHashMap<>(); @@ -134,8 +132,8 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo } } - private List collectReversedRepositoryLocations(Map> locationPropertyDefinitionsMap, - Map fieldPropertyDefinitionMap) { + protected List collectReversedRepositoryLocations(Map> locationPropertyDefinitionsMap, + Map fieldPropertyDefinitionMap) { List reversedRepositoryLocations = new ArrayList<>(); for (RepositoryGroup repositoryGroup : reversedRepositoryGroups) { for (RepositoryDefinition repositoryDefinition : repositoryGroup.getRepositoryDefinitions()) { @@ -144,8 +142,9 @@ public abstract class AbstractCoatingRepository extends AbstractEventRepo EntityDefinition entityDefinition = definitionRepository.getEntityDefinition(); List propertyDefinitions = new ArrayList<>(); - if (locationPropertyDefinitionsMap.containsKey(absoluteAccessPath)) { - propertyDefinitions.addAll(locationPropertyDefinitionsMap.get(absoluteAccessPath)); + List locationPropertyDefinitions = locationPropertyDefinitionsMap.get(absoluteAccessPath); + if (locationPropertyDefinitions != null) { + propertyDefinitions.addAll(locationPropertyDefinitions); } for (String fieldName : entityDefinition.getFieldNames()) { -- Gitee From 1b4006b384d13d6b808edf3394515669ad773474 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 14:33:00 +0800 Subject: [PATCH 46/55] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98=EF=BC=8C=E5=B9=B6=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E4=B8=80=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 --- .../domain/core/entity/BindingDefinition.java | 1 - .../repository/AbstractContextRepository.java | 23 ++++++++----------- .../repository/AbstractEventRepository.java | 4 ++-- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java index 2b3e56f4..01c83fd6 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/entity/BindingDefinition.java @@ -18,6 +18,5 @@ public class BindingDefinition { private ConfiguredRepository belongConfiguredRepository; private String boundFieldName; private EntityPropertyChain boundEntityPropertyChain; - private EntityPropertyChain relativeEntityPropertyChain; private EntityPropertyChain fieldEntityPropertyChain; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java index 085e2acb..284904ec 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractContextRepository.java @@ -73,7 +73,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor List> superClasses = ReflectUtils.getAllSuperClasses(entityClass, Object.class); superClasses.add(entityClass); - superClasses.forEach(clazz -> resolveEntityPropertyChains("", clazz)); + superClasses.forEach(clazz -> resolveAllEntityPropertyChainMap("", clazz)); Map annotatedElementMap = new LinkedHashMap<>(); annotatedElementMap.put("/", entityClass); @@ -85,7 +85,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor configuredRepository -> configuredRepository.getEntityDefinition().getOrderAttribute())); } - protected void resolveEntityPropertyChains(String accessPath, Class entityClass) { + protected void resolveAllEntityPropertyChainMap(String accessPath, Class entityClass) { ReflectionUtils.doWithLocalFields(entityClass, declaredField -> { Class fieldEntityClass = declaredField.getType(); boolean isCollection = false; @@ -116,7 +116,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor fieldEntityPropertyChainMap.putIfAbsent(fieldName, entityPropertyChain); if (!filterEntityClass(fieldEntityClass)) { - resolveEntityPropertyChains(fieldAccessPath, fieldEntityClass); + resolveAllEntityPropertyChainMap(fieldAccessPath, fieldEntityClass); } }); } @@ -187,7 +187,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor String uniqueKey = name + ":" + accessPath; String[] sceneAttributeStrs = attributes.getStringArray(Attribute.SCENE_ATTRIBUTE); - Set sceneAttributeSet = new LinkedHashSet<>(Arrays.asList(sceneAttributeStrs)); + Set sceneAttribute = new LinkedHashSet<>(Arrays.asList(sceneAttributeStrs)); Class mapperClass = attributes.getClass(Attribute.MAPPER_ATTRIBUTE); Object mapper = null; @@ -260,7 +260,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor ConfiguredRepository belongConfiguredRepository = null; String boundFieldName = null; EntityPropertyChain boundEntityPropertyChain = null; - EntityPropertyChain relativeEntityPropertyChain = null; if (!isFromContext) { belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), bindAttribute); @@ -274,16 +273,12 @@ public abstract class AbstractContextRepository extends AbstractRepositor EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); entityDefinition.setBoundEntity(true); - Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); - relativeEntityPropertyChain = entityPropertyChainMap.get(bindAttribute); - Assert.notNull(relativeEntityPropertyChain, "The relative entity property cannot be null!"); - relativeEntityPropertyChain.initialize(); } BindingDefinition bindingDefinition = new BindingDefinition( bindingAttributes, fieldAttribute, aliasAttribute, bindAttribute, isFromContext, isBoundId, belongAccessPath, belongConfiguredRepository, - boundFieldName, boundEntityPropertyChain, relativeEntityPropertyChain, null); + boundFieldName, boundEntityPropertyChain, null); bindingDefinitions.add(bindingDefinition); if (!isFromContext) { @@ -304,7 +299,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor EntityDefinition entityDefinition = new EntityDefinition( isRoot, accessPath, uniqueKey, annotatedElement, entityClass, isCollection, genericEntityClass, fieldName, - attributes, sceneAttributeSet, mapper, pojoClass, sameType, mappedClass, + attributes, sceneAttribute, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, bindingDefinitions, boundBindingDefinitions, contextBindingDefinitions, boundIdBindingDefinition, false, new LinkedHashSet<>(), new LinkedHashMap<>()); @@ -323,10 +318,10 @@ public abstract class AbstractContextRepository extends AbstractRepositor this, entityPropertyChain, entityDefinition, entityMapper, entityAssembler, (AbstractRepository) repository); - return processConfiguredRepository(configuredRepository); + return postProcessRepository(configuredRepository); } - protected ConfiguredRepository processConfiguredRepository(ConfiguredRepository configuredRepository) { + protected ConfiguredRepository postProcessRepository(ConfiguredRepository configuredRepository) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); Set fieldNames = entityDefinition.getFieldNames(); Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); @@ -338,7 +333,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor for (String accessPath : accessPaths) { String lastAccessPath = PathUtils.getLastAccessPath(accessPath); EntityPropertyChain lastEntityPropertyChain = entityPropertyChainMap.get(lastAccessPath); - EntityPropertyChain entityPropertyChain = entityPropertyChainMap.get(accessPath); + EntityPropertyChain entityPropertyChain = allEntityPropertyChainMap.get(accessPath); fieldNames.add(entityPropertyChain.getFieldName()); diff --git a/spring-domain-event/src/main/java/com/gitee/spring/domain/event/repository/AbstractEventRepository.java b/spring-domain-event/src/main/java/com/gitee/spring/domain/event/repository/AbstractEventRepository.java index 34155887..5cf40096 100644 --- a/spring-domain-event/src/main/java/com/gitee/spring/domain/event/repository/AbstractEventRepository.java +++ b/spring-domain-event/src/main/java/com/gitee/spring/domain/event/repository/AbstractEventRepository.java @@ -17,8 +17,8 @@ public abstract class AbstractEventRepository extends AbstractBatchReposi } @Override - protected ConfiguredRepository processConfiguredRepository(ConfiguredRepository configuredRepository) { - return enableEvent ? new EventRepository(configuredRepository, applicationContext) : super.processConfiguredRepository(configuredRepository); + protected ConfiguredRepository postProcessRepository(ConfiguredRepository configuredRepository) { + return enableEvent ? new EventRepository(configuredRepository, applicationContext) : super.postProcessRepository(configuredRepository); } } -- Gitee From 16b69ff4ef22ba367ced00efffa8b9ce88d2243b Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 14:44:29 +0800 Subject: [PATCH 47/55] =?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 --- .../domain/core/repository/AbstractDelegateRepository.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java index 9be20338..f635c32a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractDelegateRepository.java @@ -20,8 +20,7 @@ public abstract class AbstractDelegateRepository extends AbstractContextR protected void resolveDelegateRepositoryMap() { delegateRepositoryMap.put(entityClass, this); - Class repositoryClass = this.getClass(); - ReflectionUtils.doWithLocalFields(repositoryClass, declaredField -> { + ReflectionUtils.doWithLocalFields(this.getClass(), declaredField -> { Class fieldClass = declaredField.getType(); if (AbstractDelegateRepository.class.isAssignableFrom(fieldClass)) { Object bean = applicationContext.getBean(fieldClass); -- Gitee From b27f2dde6fe97e9cea8723cd1c338b0a9f56a565 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 14:55:29 +0800 Subject: [PATCH 48/55] =?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 --- .../core/repository/AbstractGenericRepository.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index 00abe13c..3d6b2150 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -30,7 +30,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR EntityProperty lastEntityProperty = entityPropertyChain.getLastEntityPropertyChain(); Object lastEntity = lastEntityProperty == null ? rootEntity : lastEntityProperty.getValue(rootEntity); if (lastEntity != null && isMatchScenes(boundedContext, configuredRepository)) { - EntityExample entityExample = newExampleByContext(boundedContext, configuredRepository, rootEntity); + EntityExample entityExample = newExampleByContext(boundedContext, rootEntity, configuredRepository); if (entityExample.isDirtyQuery()) { List entities = configuredRepository.selectByExample(boundedContext, entityExample); Object entity = convertManyToOneEntity(configuredRepository, entities); @@ -61,12 +61,12 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR return false; } - protected EntityExample newExampleByContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository, Object rootEntity) { + protected EntityExample newExampleByContext(BoundedContext boundedContext, Object rootEntity, ConfiguredRepository configuredRepository) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { - Object boundValue = getBoundValue(boundedContext, bindingDefinition, rootEntity); + Object boundValue = getBoundValue(boundedContext, rootEntity, bindingDefinition); if (boundValue != null) { String aliasAttribute = bindingDefinition.getAliasAttribute(); EntityCriterion entityCriterion = entityMapper.newCriterion(aliasAttribute, Operator.EQ, boundValue); @@ -76,7 +76,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR return entityExample; } - protected Object getBoundValue(BoundedContext boundedContext, BindingDefinition bindingDefinition, Object rootEntity) { + protected Object getBoundValue(BoundedContext boundedContext, Object rootEntity, BindingDefinition bindingDefinition) { Object boundValue; if (bindingDefinition.isFromContext()) { String bindAttribute = bindingDefinition.getBindAttribute(); @@ -148,7 +148,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { if (!bindingDefinition.isBoundId()) { - Object boundValue = getBoundValue(boundedContext, bindingDefinition, rootEntity); + Object boundValue = getBoundValue(boundedContext, rootEntity, bindingDefinition); if (boundValue != null) { String fieldAttribute = bindingDefinition.getFieldAttribute(); BeanUtil.setFieldValue(entity, fieldAttribute, boundValue); -- Gitee From 2717521197a1e4bb60e49495567abcb9003f36bd Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 15:01:35 +0800 Subject: [PATCH 49/55] =?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 --- .../core/repository/ConfiguredRepository.java | 33 +++++++------------ 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java index 67160d1b..58a6171d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/ConfiguredRepository.java @@ -15,20 +15,17 @@ import java.util.List; @Setter public class ConfiguredRepository extends ProxyRepository { - protected AbstractContextRepository abstractContextRepository; protected EntityPropertyChain entityPropertyChain; protected EntityDefinition entityDefinition; protected EntityMapper entityMapper; protected EntityAssembler entityAssembler; - public ConfiguredRepository(AbstractContextRepository abstractContextRepository, - EntityPropertyChain entityPropertyChain, + public ConfiguredRepository(EntityPropertyChain entityPropertyChain, EntityDefinition entityDefinition, EntityMapper entityMapper, EntityAssembler entityAssembler, AbstractRepository repository) { super(repository); - this.abstractContextRepository = abstractContextRepository; this.entityPropertyChain = entityPropertyChain; this.entityDefinition = entityDefinition; this.entityMapper = entityMapper; @@ -37,43 +34,37 @@ public class ConfiguredRepository extends ProxyRepository { public ConfiguredRepository(ConfiguredRepository configuredRepository) { super(configuredRepository); - this.abstractContextRepository = configuredRepository.getAbstractContextRepository(); this.entityPropertyChain = configuredRepository.getEntityPropertyChain(); this.entityDefinition = configuredRepository.getEntityDefinition(); this.entityMapper = configuredRepository.getEntityMapper(); this.entityAssembler = configuredRepository.getEntityAssembler(); } - @Override - public List selectByExample(BoundedContext boundedContext, Object example) { + private Object processExample(Object example) { if (!entityDefinition.isUseEntityExample() && example instanceof EntityExample) { - example = ((EntityExample) example).buildExample(); + return ((EntityExample) example).buildExample(); } - return super.selectByExample(boundedContext, example); + return example; + } + + @Override + public List selectByExample(BoundedContext boundedContext, Object example) { + return super.selectByExample(boundedContext, processExample(example)); } @Override public T selectPageByExample(BoundedContext boundedContext, Object example, Object page) { - if (!entityDefinition.isUseEntityExample() && example instanceof EntityExample) { - example = ((EntityExample) example).buildExample(); - } - return super.selectPageByExample(boundedContext, example, page); + return super.selectPageByExample(boundedContext, processExample(example), page); } @Override public int updateByExample(Object entity, Object example) { - if (!entityDefinition.isUseEntityExample() && example instanceof EntityExample) { - example = ((EntityExample) example).buildExample(); - } - return super.updateByExample(entity, example); + return super.updateByExample(entity, processExample(example)); } @Override public int deleteByExample(Object example) { - if (!entityDefinition.isUseEntityExample() && example instanceof EntityExample) { - example = ((EntityExample) example).buildExample(); - } - return super.deleteByExample(example); + return super.deleteByExample(processExample(example)); } } -- Gitee From 5a1fabbebbd9b85a7e3a5b7e2649c34b0948e45f Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 15:06:54 +0800 Subject: [PATCH 50/55] =?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 --- .../domain/core/repository/AbstractBatchRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 3e1c7afd..3b76eb4e 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -37,8 +37,8 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo Map, List> repositoryEntitiesMap = new LinkedHashMap<>(); for (Object rootEntity : rootEntities) { AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); - List entities = repositoryEntitiesMap.computeIfAbsent(abstractDelegateRepository, key -> new ArrayList<>()); - entities.add(rootEntity); + List eachRootEntities = repositoryEntitiesMap.computeIfAbsent(abstractDelegateRepository, key -> new ArrayList<>()); + eachRootEntities.add(rootEntity); } return repositoryEntitiesMap; } -- Gitee From f0ad5ad17f08f505db39b87728259e0756d9545e Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 15:12:57 +0800 Subject: [PATCH 51/55] =?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 --- .../core/repository/AbstractBatchRepository.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 3b76eb4e..9a2d733f 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -104,12 +104,10 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); if (lastEntity != null) { List entities = entityIndex.selectList(rootEntity, configuredRepository); - if (entities != null) { - Object entity = convertManyToOneEntity(configuredRepository, entities); - if (entity != null) { - EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); - entityProperty.setValue(lastEntity, entity); - } + Object entity = convertManyToOneEntity(configuredRepository, entities); + if (entity != null) { + EntityProperty entityProperty = entityPropertyChain.getEntityProperty(); + entityProperty.setValue(lastEntity, entity); } } } -- Gitee From 9ad54ef646ff9f91ed6fe7ec4ad8e52f2b1665a8 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 15:15:17 +0800 Subject: [PATCH 52/55] =?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 --- .../domain/core/repository/AbstractGenericRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index 3d6b2150..0798946a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -27,8 +27,8 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR AbstractDelegateRepository abstractDelegateRepository = adaptiveRepository(rootEntity); for (ConfiguredRepository configuredRepository : abstractDelegateRepository.getSubRepositories()) { EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); - EntityProperty lastEntityProperty = entityPropertyChain.getLastEntityPropertyChain(); - Object lastEntity = lastEntityProperty == null ? rootEntity : lastEntityProperty.getValue(rootEntity); + EntityPropertyChain lastEntityPropertyChain = entityPropertyChain.getLastEntityPropertyChain(); + Object lastEntity = lastEntityPropertyChain == null ? rootEntity : lastEntityPropertyChain.getValue(rootEntity); if (lastEntity != null && isMatchScenes(boundedContext, configuredRepository)) { EntityExample entityExample = newExampleByContext(boundedContext, rootEntity, configuredRepository); if (entityExample.isDirtyQuery()) { -- Gitee From d196c229bcd509224751ca611c55ce778a233938 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 15:20:34 +0800 Subject: [PATCH 53/55] =?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/spring/domain/coating/api/CoatingAssembler.java | 4 ++-- .../domain/coating/impl/DefaultCoatingAssembler.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/api/CoatingAssembler.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/api/CoatingAssembler.java index d0878152..5dc35ac2 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/api/CoatingAssembler.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/api/CoatingAssembler.java @@ -2,8 +2,8 @@ package com.gitee.spring.domain.coating.api; public interface CoatingAssembler { - void assemble(Object coating, Object entity); + void assemble(Object coatingObject, Object entity); - void disassemble(Object coating, Object entity); + void disassemble(Object coatingObject, Object entity); } diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/impl/DefaultCoatingAssembler.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/impl/DefaultCoatingAssembler.java index da520c2f..d13808db 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/impl/DefaultCoatingAssembler.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/impl/DefaultCoatingAssembler.java @@ -20,19 +20,19 @@ public class DefaultCoatingAssembler implements CoatingAssembler { private List reversedRepositoryLocations; @Override - public void assemble(Object coating, Object entity) { + public void assemble(Object coatingObject, Object entity) { for (PropertyDefinition propertyDefinition : availablePropertyDefinitions) { EntityPropertyChain entityPropertyChain = propertyDefinition.getEntityPropertyChain(); Object targetValue = entityPropertyChain.getValue(entity); - ReflectUtil.setFieldValue(coating, propertyDefinition.getDeclaredField(), targetValue); + ReflectUtil.setFieldValue(coatingObject, propertyDefinition.getDeclaredField(), targetValue); } } @Override - public void disassemble(Object coating, Object entity) { + public void disassemble(Object coatingObject, Object entity) { for (PropertyDefinition propertyDefinition : availablePropertyDefinitions) { EntityPropertyChain entityPropertyChain = propertyDefinition.getEntityPropertyChain(); - Object fieldValue = ReflectUtil.getFieldValue(coating, propertyDefinition.getDeclaredField()); + Object fieldValue = ReflectUtil.getFieldValue(coatingObject, propertyDefinition.getDeclaredField()); entityPropertyChain.setValue(entity, fieldValue); } } -- Gitee From 172b3cc79bb173e4269c10b15e091e2a6eded3c0 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 15:35:52 +0800 Subject: [PATCH 54/55] =?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 --- .../starter/domain/repository/MybatisPlusEntityMapper.java | 2 +- .../domain/coating/repository/AbstractChainRepository.java | 2 +- .../java/com/gitee/spring/domain/core/api/EntityMapper.java | 2 +- .../com/gitee/spring/domain/core/mapper/MapEntityMapper.java | 2 +- .../gitee/spring/domain/core/mapper/ProxyEntityMapper.java | 4 ++-- .../domain/core/repository/AbstractBatchRepository.java | 2 +- .../domain/core/repository/AbstractGenericRepository.java | 2 +- .../spring/domain/core/repository/DefaultRepository.java | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java index 912c757f..46212caa 100644 --- a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusEntityMapper.java @@ -48,7 +48,7 @@ public class MybatisPlusEntityMapper implements EntityMapper { } @Override - public EntityExample newExample(EntityDefinition entityDefinition, BoundedContext boundedContext) { + public EntityExample newExample(BoundedContext boundedContext, EntityDefinition entityDefinition) { EntityExample entityExample = new EntityExample(new QueryWrapper<>()) { @Override public EntityExample selectColumns() { diff --git a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java index 2b7f5abf..ca131c52 100644 --- a/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java +++ b/spring-domain-coating/src/main/java/com/gitee/spring/domain/coating/repository/AbstractChainRepository.java @@ -47,7 +47,7 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo ConfiguredRepository configuredRepository = repositoryDefinition.getConfiguredRepository(); EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); - EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); + EntityExample entityExample = entityMapper.newExample(boundedContext, entityDefinition); return new ChainCriterion(repositoryLocation, entityExample); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java index 68d99e8e..477c7227 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityMapper.java @@ -14,7 +14,7 @@ public interface EntityMapper { Object newPageOfEntities(Object dataPage, List entities); - EntityExample newExample(EntityDefinition entityDefinition, BoundedContext boundedContext); + EntityExample newExample(BoundedContext boundedContext, EntityDefinition entityDefinition); EntityCriterion newCriterion(String fieldName, String operator, Object fieldValue); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/MapEntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/MapEntityMapper.java index 7317c476..51a3005a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/MapEntityMapper.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/MapEntityMapper.java @@ -19,7 +19,7 @@ public class MapEntityMapper extends ProxyEntityMapper { } @Override - public EntityExample newExample(EntityDefinition entityDefinition, BoundedContext boundedContext) { + public EntityExample newExample(BoundedContext boundedContext, EntityDefinition entityDefinition) { return new EntityExample(new LinkedHashMap<>()); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java index d1f114a5..ef3348ed 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/mapper/ProxyEntityMapper.java @@ -32,8 +32,8 @@ public class ProxyEntityMapper implements EntityMapper { } @Override - public EntityExample newExample(EntityDefinition entityDefinition, BoundedContext boundedContext) { - return entityMapper.newExample(entityDefinition, boundedContext); + public EntityExample newExample(BoundedContext boundedContext, EntityDefinition entityDefinition) { + return entityMapper.newExample(boundedContext, entityDefinition); } @Override diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java index 9a2d733f..812af6ba 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractBatchRepository.java @@ -60,7 +60,7 @@ public abstract class AbstractBatchRepository extends AbstractGenericRepo protected EntityExample newExampleByRootEntities(BoundedContext boundedContext, List rootEntities, ConfiguredRepository configuredRepository) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); - EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); + EntityExample entityExample = entityMapper.newExample(boundedContext, entityDefinition); for (BindingDefinition bindingDefinition : entityDefinition.getBoundBindingDefinitions()) { EntityPropertyChain boundEntityPropertyChain = bindingDefinition.getBoundEntityPropertyChain(); List fieldValues = new ArrayList<>(); diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java index 0798946a..1a6ecb3b 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/AbstractGenericRepository.java @@ -64,7 +64,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR protected EntityExample newExampleByContext(BoundedContext boundedContext, Object rootEntity, ConfiguredRepository configuredRepository) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); EntityMapper entityMapper = configuredRepository.getEntityMapper(); - EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); + EntityExample entityExample = entityMapper.newExample(boundedContext, entityDefinition); for (BindingDefinition bindingDefinition : entityDefinition.getAllBindingDefinitions()) { Object boundValue = getBoundValue(boundedContext, rootEntity, bindingDefinition); if (boundValue != null) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java index 02a74bdc..349bea5a 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java @@ -95,7 +95,7 @@ public class DefaultRepository extends ProxyRepository { if (primaryKey != null) { Object persistentObject = entityAssembler.disassemble(entityDefinition, boundedContext, entity); if (persistentObject != null) { - EntityExample entityExample = entityMapper.newExample(entityDefinition, boundedContext); + EntityExample entityExample = entityMapper.newExample(boundedContext, entityDefinition); EntityCriterion entityCriterion = entityMapper.newCriterion("id", Operator.EQ, primaryKey); entityExample.addCriterion(entityCriterion); return super.updateByExample(persistentObject, entityExample.buildExample()); -- Gitee From 10b1262fc1e62b93dd2ba9bac607986dcd768d13 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 12 Jul 2022 15:40:47 +0800 Subject: [PATCH 55/55] =?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/spring/domain/core/api/EntityAssembler.java | 4 ++-- .../domain/core/impl/DefaultEntityAssembler.java | 4 ++-- .../domain/core/repository/DefaultRepository.java | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityAssembler.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityAssembler.java index 4a3f5f0f..2f657f1f 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityAssembler.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/EntityAssembler.java @@ -5,8 +5,8 @@ import com.gitee.spring.domain.core.entity.EntityDefinition; public interface EntityAssembler { - Object assemble(EntityDefinition entityDefinition, BoundedContext boundedContext, Object persistentObject); + Object assemble(BoundedContext boundedContext, EntityDefinition entityDefinition, Object persistentObject); - Object disassemble(EntityDefinition entityDefinition, BoundedContext boundedContext, Object entity); + Object disassemble(BoundedContext boundedContext, EntityDefinition entityDefinition, Object entity); } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityAssembler.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityAssembler.java index 675f30e3..d977c9af 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityAssembler.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultEntityAssembler.java @@ -8,7 +8,7 @@ import com.gitee.spring.domain.core.entity.EntityDefinition; public class DefaultEntityAssembler implements EntityAssembler { @Override - public Object assemble(EntityDefinition entityDefinition, BoundedContext boundedContext, Object persistentObject) { + public Object assemble(BoundedContext boundedContext, EntityDefinition entityDefinition, Object persistentObject) { if (entityDefinition.isSameType()) { return persistentObject; } else { @@ -17,7 +17,7 @@ public class DefaultEntityAssembler implements EntityAssembler { } @Override - public Object disassemble(EntityDefinition entityDefinition, BoundedContext boundedContext, Object entity) { + public Object disassemble(BoundedContext boundedContext, EntityDefinition entityDefinition, Object entity) { if (entityDefinition.isSameType()) { return entity; } else { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java index 349bea5a..b5029028 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/repository/DefaultRepository.java @@ -35,7 +35,7 @@ public class DefaultRepository extends ProxyRepository { public Object selectByPrimaryKey(BoundedContext boundedContext, Object primaryKey) { Object persistentObject = super.selectByPrimaryKey(boundedContext, primaryKey); if (persistentObject != null) { - return entityAssembler.assemble(entityDefinition, boundedContext, persistentObject); + return entityAssembler.assemble(boundedContext, entityDefinition, persistentObject); } return null; } @@ -52,7 +52,7 @@ public class DefaultRepository extends ProxyRepository { protected List newEntities(BoundedContext boundedContext, List persistentObjects) { List entities = new ArrayList<>(); for (Object persistentObject : persistentObjects) { - Object entity = entityAssembler.assemble(entityDefinition, boundedContext, persistentObject); + Object entity = entityAssembler.assemble(boundedContext, entityDefinition, persistentObject); entities.add(entity); } return entities; @@ -74,7 +74,7 @@ public class DefaultRepository extends ProxyRepository { public int insert(BoundedContext boundedContext, Object entity) { Object primaryKey = BeanUtil.getFieldValue(entity, "id"); if (primaryKey == null) { - Object persistentObject = entityAssembler.disassemble(entityDefinition, boundedContext, entity); + Object persistentObject = entityAssembler.disassemble(boundedContext, entityDefinition, entity); if (persistentObject != null) { int count = super.insert(boundedContext, persistentObject); copyPrimaryKey(entity, persistentObject); @@ -93,7 +93,7 @@ public class DefaultRepository extends ProxyRepository { public int update(BoundedContext boundedContext, Object entity) { Object primaryKey = BeanUtil.getFieldValue(entity, "id"); if (primaryKey != null) { - Object persistentObject = entityAssembler.disassemble(entityDefinition, boundedContext, entity); + Object persistentObject = entityAssembler.disassemble(boundedContext, entityDefinition, entity); if (persistentObject != null) { EntityExample entityExample = entityMapper.newExample(boundedContext, entityDefinition); EntityCriterion entityCriterion = entityMapper.newCriterion("id", Operator.EQ, primaryKey); @@ -107,7 +107,7 @@ public class DefaultRepository extends ProxyRepository { @Override public int updateByExample(Object entity, Object example) { Assert.isTrue(!(entity instanceof Collection), "The entity cannot be a collection!"); - Object persistentObject = entityAssembler.disassemble(entityDefinition, new BoundedContext(), entity); + Object persistentObject = entityAssembler.disassemble(new BoundedContext(), entityDefinition, entity); if (persistentObject != null) { return super.updateByExample(persistentObject, example); } -- Gitee