From 7b17fc1022fd47d15de727d663e9185c61430575 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 27 Aug 2022 23:06:44 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=8D=E5=90=91?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=97=B6=EF=BC=8C=E8=BF=9B=E8=A1=8C=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/spring/domain/core/api/PropertyConverter.java | 2 ++ .../domain/core/impl/DefaultPropertyConverter.java | 5 +++++ .../domain/core/impl/binder/PropertyEntityBinder.java | 9 +++++++++ .../core/repository/AbstractContextRepository.java | 6 +++++- .../com/gitee/spring/domain/core/utils/PathUtils.java | 7 +++---- 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/PropertyConverter.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/PropertyConverter.java index 6ba0bc40..5560cdfa 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/PropertyConverter.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/api/PropertyConverter.java @@ -6,4 +6,6 @@ public interface PropertyConverter { Object convert(BoundedContext boundedContext, Object property); + Object reverseConvert(BoundedContext boundedContext, Object property); + } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultPropertyConverter.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultPropertyConverter.java index f03af17c..9b2dc6c0 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultPropertyConverter.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/DefaultPropertyConverter.java @@ -39,4 +39,9 @@ public class DefaultPropertyConverter implements PropertyConverter { } } + @Override + public Object reverseConvert(BoundedContext boundedContext, Object property) { + return property; + } + } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java index 5279d9bd..e5be0b42 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java @@ -44,4 +44,13 @@ public class PropertyEntityBinder extends AbstractEntityBuilder { boundEntityPropertyChain.setValue(rootEntity, property); } + @Override + public Object getFieldValue(BoundedContext boundedContext, Object entity) { + Object fieldValue = fieldEntityPropertyChain.getValue(entity); + if (fieldValue != null) { + fieldValue = propertyConverter.reverseConvert(boundedContext, fieldValue); + } + return fieldValue; + } + } 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 ec572732..1df71440 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 @@ -240,7 +240,11 @@ public abstract class AbstractContextRepository extends AbstractRepositor boolean isBoundId = !isFromContext && isIdField; if (!isFromContext && StringUtils.isBlank(bindAliasAttribute)) { - bindAliasAttribute = PathUtils.getFieldName(bindAttribute); + if (StringUtils.isBlank(propertyAttribute)) { + bindAliasAttribute = PathUtils.getFieldName(bindAttribute); + } else { + bindAliasAttribute = propertyAttribute; + } } if (!isFromContext) { diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/PathUtils.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/PathUtils.java index c57536d7..4b4443ae 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/PathUtils.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/PathUtils.java @@ -21,11 +21,10 @@ public class PathUtils { } public static String getBelongPath(Set allAccessPath, String accessPath) { - String lastAccessPath = getLastAccessPath(accessPath); - while (!allAccessPath.contains(lastAccessPath) && !"/".equals(lastAccessPath)) { - lastAccessPath = PathUtils.getLastAccessPath(lastAccessPath); + while (!allAccessPath.contains(accessPath) && !"/".equals(accessPath)) { + accessPath = PathUtils.getLastAccessPath(accessPath); } - return lastAccessPath; + return accessPath; } } -- Gitee From 0397efc48f91dec2661a2ef299bb6c5105532d7d Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 28 Aug 2022 12:22:36 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=8D=E5=90=91?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=97=B6=EF=BC=8C=E8=BF=9B=E8=A1=8C=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractContextRepository.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 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 1df71440..2566bebe 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 @@ -235,26 +235,22 @@ public abstract class AbstractContextRepository extends AbstractRepositor bindExpAttribute = bindAttribute; } - boolean isFromContext = !bindAttribute.startsWith("/"); + boolean isBindProperty = bindAttribute.startsWith("/"); boolean isIdField = "id".equals(fieldAttribute); - boolean isBoundId = !isFromContext && isIdField; + boolean isBoundId = isBindProperty && isIdField; - if (!isFromContext && StringUtils.isBlank(bindAliasAttribute)) { - if (StringUtils.isBlank(propertyAttribute)) { - bindAliasAttribute = PathUtils.getFieldName(bindAttribute); - } else { - bindAliasAttribute = propertyAttribute; - } + if (isBindProperty && StringUtils.isBlank(bindAliasAttribute)) { + bindAliasAttribute = StringUtils.isBlank(propertyAttribute) ? PathUtils.getFieldName(bindAttribute) : propertyAttribute; } - if (!isFromContext) { + if (isBindProperty) { boundColumns.add(StrUtil.toUnderlineCase(aliasAttribute)); } BindingDefinition bindingDefinition = new BindingDefinition( bindingAttributes, fieldAttribute, aliasAttribute, bindAttribute, bindExpAttribute, bindAliasAttribute, propertyAttribute); - if (!isFromContext) { + if (isBindProperty) { String belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), bindAttribute); ConfiguredRepository belongConfiguredRepository = allConfiguredRepositoryMap.get(belongAccessPath); Assert.notNull(belongConfiguredRepository, "The belong repository cannot be null!"); @@ -286,6 +282,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor allEntityBinders.add(propertyEntityBinder); boundEntityBinders.add(propertyEntityBinder); + if (isBoundId) { boundIdEntityBinder = propertyEntityBinder; } -- Gitee From 4ed030fc04c1cceb10c1a7d42331624df11f7964 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 28 Aug 2022 13:39:39 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=8D=E5=90=91?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=97=B6=EF=BC=8C=E8=BF=9B=E8=A1=8C=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/entity/EntityDefinition.java | 4 +--- .../repository/AbstractContextRepository.java | 23 +++++++------------ .../core/repository/ConfiguredRepository.java | 7 +++++- .../domain/core/utils/ReflectUtils.java | 11 +++++---- 4 files changed, 22 insertions(+), 23 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 60964d64..bf1b24a4 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 @@ -5,7 +5,6 @@ import lombok.Data; import org.springframework.core.annotation.AnnotationAttributes; import java.lang.reflect.AnnotatedElement; -import java.util.Map; import java.util.Set; @Data @@ -18,6 +17,7 @@ public class EntityDefinition { private boolean collection; private Class genericEntityClass; private String fieldName; + private Set fieldNames; private AnnotationAttributes attributes; private String idAttribute; private Set sceneAttribute; @@ -34,6 +34,4 @@ public class EntityDefinition { private int orderAttribute; private String[] boundColumns; private boolean boundEntity; - private Set fieldNames; - private Map entityPropertyChainMap; } 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 2566bebe..8edeaf95 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 @@ -282,7 +282,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor allEntityBinders.add(propertyEntityBinder); boundEntityBinders.add(propertyEntityBinder); - + if (isBoundId) { boundIdEntityBinder = propertyEntityBinder; } @@ -300,10 +300,10 @@ public abstract class AbstractContextRepository extends AbstractRepositor EntityDefinition entityDefinition = new EntityDefinition( isAggregateRoot, accessPath, annotatedElement, - entityClass, isCollection, genericEntityClass, fieldName, + entityClass, isCollection, genericEntityClass, fieldName, ReflectUtils.getFieldNames(genericEntityClass), attributes, idAttribute, sceneAttribute, mapper, pojoClass, sameType, mappedClass, useEntityExample, mapAsExample, orderByAsc, orderByDesc, orderBy, sort, orderAttribute, - boundColumns.toArray(new String[0]), false, new LinkedHashSet<>(), new LinkedHashMap<>()); + boundColumns.toArray(new String[0]), false); EntityMapper entityMapper = newEntityMapper(entityDefinition); if (mapAsExample) { @@ -345,7 +345,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor (AbstractRepository) repository, entityPropertyChain, entityDefinition, allEntityBinders, boundEntityBinders, contextEntityBinders, new ArrayList<>(), boundIdEntityBinder, - entityMapper, entityAssembler); + entityMapper, entityAssembler, new LinkedHashMap<>()); return postProcessRepository(configuredRepository); } @@ -357,16 +357,11 @@ public abstract class AbstractContextRepository extends AbstractRepositor protected void postProcessAllRepositories() { Map allEntityPropertyChainMap = entityPropertiesResolver.getAllEntityPropertyChainMap(); allEntityPropertyChainMap.forEach((accessPath, entityPropertyChain) -> { - String belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), accessPath); + String lastAccessPath = PathUtils.getLastAccessPath(accessPath); + String belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), lastAccessPath); ConfiguredRepository belongConfiguredRepository = allConfiguredRepositoryMap.get(belongAccessPath); Assert.notNull(belongConfiguredRepository, "The belong repository cannot be null!"); - EntityDefinition entityDefinition = belongConfiguredRepository.getEntityDefinition(); - - Set fieldNames = entityDefinition.getFieldNames(); - fieldNames.add(entityPropertyChain.getFieldName()); - - Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); - String lastAccessPath = PathUtils.getLastAccessPath(accessPath); + Map entityPropertyChainMap = belongConfiguredRepository.getEntityPropertyChainMap(); EntityPropertyChain lastEntityPropertyChain = entityPropertyChainMap.get(lastAccessPath); EntityPropertyChain newEntityPropertyChain = new EntityPropertyChain(lastEntityPropertyChain, entityPropertyChain); entityPropertyChainMap.put(accessPath, newEntityPropertyChain); @@ -374,15 +369,13 @@ public abstract class AbstractContextRepository extends AbstractRepositor allConfiguredRepositoryMap.forEach((accessPath, configuredRepository) -> { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); - Set fieldNames = entityDefinition.getFieldNames(); - Map entityPropertyChainMap = entityDefinition.getEntityPropertyChainMap(); + Map entityPropertyChainMap = configuredRepository.getEntityPropertyChainMap(); String prefixAccessPath = entityDefinition.isAggregateRoot() ? "/" : entityDefinition.getAccessPath() + "/"; if (entityPropertyChainMap.isEmpty() && entityDefinition.isCollection()) { EntityPropertiesResolver entityPropertiesResolver = new EntityPropertiesResolver(); entityPropertiesResolver.resolveEntityProperties("", entityDefinition.getGenericEntityClass()); Map subAllEntityPropertyChainMap = entityPropertiesResolver.getAllEntityPropertyChainMap(); - subAllEntityPropertyChainMap.values().forEach(entityPropertyChain -> fieldNames.add(entityPropertyChain.getFieldName())); entityPropertyChainMap.putAll(subAllEntityPropertyChainMap); prefixAccessPath = "/"; } 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 3c93d96e..b4d842bc 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 @@ -14,6 +14,7 @@ import lombok.Setter; import java.util.Collections; import java.util.List; +import java.util.Map; @Getter @Setter @@ -28,6 +29,7 @@ public class ConfiguredRepository extends ProxyRepository { protected PropertyEntityBinder boundIdEntityBinder; protected EntityMapper entityMapper; protected EntityAssembler entityAssembler; + protected Map entityPropertyChainMap; public ConfiguredRepository(AbstractRepository repository, EntityPropertyChain entityPropertyChain, @@ -38,7 +40,8 @@ public class ConfiguredRepository extends ProxyRepository { List boundValueEntityBinders, PropertyEntityBinder boundIdEntityBinder, EntityMapper entityMapper, - EntityAssembler entityAssembler) { + EntityAssembler entityAssembler, + Map entityPropertyChainMap) { super(repository); this.entityPropertyChain = entityPropertyChain; this.entityDefinition = entityDefinition; @@ -49,6 +52,7 @@ public class ConfiguredRepository extends ProxyRepository { this.boundIdEntityBinder = boundIdEntityBinder; this.entityMapper = entityMapper; this.entityAssembler = entityAssembler; + this.entityPropertyChainMap = entityPropertyChainMap; } public ConfiguredRepository(ConfiguredRepository configuredRepository) { @@ -62,6 +66,7 @@ public class ConfiguredRepository extends ProxyRepository { this.boundIdEntityBinder = configuredRepository.getBoundIdEntityBinder(); this.entityMapper = configuredRepository.getEntityMapper(); this.entityAssembler = configuredRepository.getEntityAssembler(); + this.entityPropertyChainMap = configuredRepository.getEntityPropertyChainMap(); } @Override diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/ReflectUtils.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/ReflectUtils.java index 1497bb4a..32cf1437 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/ReflectUtils.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/ReflectUtils.java @@ -1,9 +1,12 @@ package com.gitee.spring.domain.core.utils; +import cn.hutool.core.util.ReflectUtil; + import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; public class ReflectUtils { @@ -11,10 +14,6 @@ public class ReflectUtils { return org.springframework.cglib.core.ReflectUtils.getConstructor(type, parameterTypes); } - public static Object newInstance(Constructor constructor, Object[] args) { - return org.springframework.cglib.core.ReflectUtils.newInstance(constructor, args); - } - public static Object newInstance(Class type) { return org.springframework.cglib.core.ReflectUtils.newInstance(type); } @@ -32,4 +31,8 @@ public class ReflectUtils { return superClasses; } + public static Set getFieldNames(Class type) { + return ReflectUtil.getFieldMap(type).keySet(); + } + } -- Gitee From e2a1795b97aab10870ad5c2dde436586d2b50572 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 28 Aug 2022 13:45:57 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=8D=E5=90=91?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=97=B6=EF=BC=8C=E8=BF=9B=E8=A1=8C=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractChainRepository.java | 19 +++++++------------ .../impl/binder/PropertyEntityBinder.java | 9 --------- 2 files changed, 7 insertions(+), 21 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 cbe06bbe..a588b707 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 @@ -8,20 +8,13 @@ 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.EntityBinder; +import com.gitee.spring.domain.core.api.PropertyConverter; +import com.gitee.spring.domain.core.entity.*; import com.gitee.spring.domain.core.impl.binder.PropertyEntityBinder; -import com.gitee.spring.domain.core.entity.BindingDefinition; -import com.gitee.spring.domain.core.entity.BoundedContext; -import com.gitee.spring.domain.core.entity.EntityCriterion; -import com.gitee.spring.domain.core.entity.EntityDefinition; -import com.gitee.spring.domain.core.entity.EntityExample; import com.gitee.spring.domain.core.repository.ConfiguredRepository; import lombok.extern.slf4j.Slf4j; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Slf4j public abstract class AbstractChainRepository extends AbstractCoatingRepository { @@ -134,11 +127,13 @@ public abstract class AbstractChainRepository extends AbstractCoatingRepo }); } - protected List collectFieldValues(BoundedContext boundedContext, List entities, EntityBinder entityBinder) { + protected List collectFieldValues(BoundedContext boundedContext, List entities, PropertyEntityBinder propertyEntityBinder) { + PropertyConverter propertyConverter = propertyEntityBinder.getPropertyConverter(); List fieldValues = new ArrayList<>(); for (Object entity : entities) { - Object fieldValue = entityBinder.getFieldValue(boundedContext, entity); + Object fieldValue = propertyEntityBinder.getFieldValue(boundedContext, entity); if (fieldValue != null) { + fieldValue = propertyConverter.reverseConvert(boundedContext, fieldValue); fieldValues.add(fieldValue); } } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java index e5be0b42..5279d9bd 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java @@ -44,13 +44,4 @@ public class PropertyEntityBinder extends AbstractEntityBuilder { boundEntityPropertyChain.setValue(rootEntity, property); } - @Override - public Object getFieldValue(BoundedContext boundedContext, Object entity) { - Object fieldValue = fieldEntityPropertyChain.getValue(entity); - if (fieldValue != null) { - fieldValue = propertyConverter.reverseConvert(boundedContext, fieldValue); - } - return fieldValue; - } - } -- Gitee From 41e81390a527862b0c50737e79d18359f0ca0b99 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 28 Aug 2022 22:43:53 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=8D=E5=90=91?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=97=B6=EF=BC=8C=E8=BF=9B=E8=A1=8C=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/entity/BindingDefinition.java | 1 + .../impl/binder/PropertyEntityBinder.java | 5 +++ .../repository/AbstractContextRepository.java | 38 +++++++++---------- 3 files changed, 24 insertions(+), 20 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 058e9984..b06ab32b 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 @@ -14,4 +14,5 @@ public class BindingDefinition { private String bindExpAttribute; private String bindAliasAttribute; private String propertyAttribute; + private Class converterClass; } diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java index 5279d9bd..fa20f74c 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/binder/PropertyEntityBinder.java @@ -30,6 +30,11 @@ public class PropertyEntityBinder extends AbstractEntityBuilder { this.propertyConverter = propertyConverter; } + public boolean isSameType() { + return boundEntityPropertyChain.getEntityClass() == fieldEntityPropertyChain.getEntityClass() + && boundEntityPropertyChain.getGenericEntityClass() == fieldEntityPropertyChain.getGenericEntityClass(); + } + @Override public Object getBoundValue(BoundedContext boundedContext, Object rootEntity) { Object boundValue = boundEntityPropertyChain.getValue(rootEntity); 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 8edeaf95..ecee0584 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,12 @@ public abstract class AbstractContextRepository extends AbstractRepositor Class assemblerClass = attributes.getClass(Attribute.ASSEMBLER_ATTRIBUTE); Class repositoryClass = attributes.getClass(Attribute.REPOSITORY_ATTRIBUTE); + boolean isBoundId = false; + Set boundColumns = new LinkedHashSet<>(); + List allEntityBinders = new ArrayList<>(); List boundEntityBinders = new ArrayList<>(); List contextEntityBinders = new ArrayList<>(); - PropertyEntityBinder boundIdEntityBinder = null; - - Set boundColumns = new LinkedHashSet<>(); for (Binding bindingAnnotation : bindingAnnotations) { AnnotationAttributes bindingAttributes = AnnotationUtils.getAnnotationAttributes( @@ -237,7 +237,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor boolean isBindProperty = bindAttribute.startsWith("/"); boolean isIdField = "id".equals(fieldAttribute); - boolean isBoundId = isBindProperty && isIdField; + isBoundId = !isBoundId && isBindProperty && isIdField; if (isBindProperty && StringUtils.isBlank(bindAliasAttribute)) { bindAliasAttribute = StringUtils.isBlank(propertyAttribute) ? PathUtils.getFieldName(bindAttribute) : propertyAttribute; @@ -248,7 +248,9 @@ public abstract class AbstractContextRepository extends AbstractRepositor } BindingDefinition bindingDefinition = new BindingDefinition( - bindingAttributes, fieldAttribute, aliasAttribute, bindAttribute, bindExpAttribute, bindAliasAttribute, propertyAttribute); + bindingAttributes, fieldAttribute, aliasAttribute, + bindAttribute, bindExpAttribute, bindAliasAttribute, + propertyAttribute, converterClass); if (isBindProperty) { String belongAccessPath = PathUtils.getBelongPath(allConfiguredRepositoryMap.keySet(), bindAttribute); @@ -279,14 +281,9 @@ public abstract class AbstractContextRepository extends AbstractRepositor bindingDefinition, null, belongAccessPath, belongConfiguredRepository, boundEntityPropertyChain, propertyConverter); - allEntityBinders.add(propertyEntityBinder); boundEntityBinders.add(propertyEntityBinder); - if (isBoundId) { - boundIdEntityBinder = propertyEntityBinder; - } - } else { ContextEntityBinder contextEntityBinder = new ContextEntityBinder(bindingDefinition, null); allEntityBinders.add(contextEntityBinder); @@ -294,7 +291,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor } } - if (boundIdEntityBinder != null && orderAttribute == 0) { + if (isBoundId && orderAttribute == 0) { orderAttribute = -1; } @@ -342,9 +339,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor } ConfiguredRepository configuredRepository = new ConfiguredRepository( - (AbstractRepository) repository, - entityPropertyChain, entityDefinition, - allEntityBinders, boundEntityBinders, contextEntityBinders, new ArrayList<>(), boundIdEntityBinder, + (AbstractRepository) repository, entityPropertyChain, entityDefinition, + allEntityBinders, boundEntityBinders, contextEntityBinders, new ArrayList<>(), null, entityMapper, entityAssembler, new LinkedHashMap<>()); return postProcessRepository(configuredRepository); @@ -383,6 +379,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor List boundValueEntityBinders = configuredRepository.getBoundValueEntityBinders(); for (EntityBinder entityBinder : configuredRepository.getAllEntityBinders()) { BindingDefinition bindingDefinition = entityBinder.getBindingDefinition(); + String fieldAttribute = bindingDefinition.getFieldAttribute(); if (entityBinder instanceof AbstractEntityBuilder) { String fieldAccessPath = prefixAccessPath + bindingDefinition.getFieldAttribute(); @@ -394,13 +391,14 @@ public abstract class AbstractContextRepository extends AbstractRepositor if (entityBinder instanceof PropertyEntityBinder) { PropertyEntityBinder propertyEntityBinder = (PropertyEntityBinder) entityBinder; - boolean isNotBoundId = propertyEntityBinder != configuredRepository.getBoundIdEntityBinder(); - Class entityClass = propertyEntityBinder.getBoundEntityPropertyChain().getEntityClass(); - Class fieldEntityClass = propertyEntityBinder.getFieldEntityPropertyChain().getEntityClass(); boolean isBlankProperty = StringUtils.isBlank(bindingDefinition.getPropertyAttribute()); - boolean isDefaultConverter = bindingDefinition.getAttributes().getClass(Attribute.CONVERTER_ATTRIBUTE) == DefaultPropertyConverter.class; - if (isNotBoundId && entityClass == fieldEntityClass && isBlankProperty && isDefaultConverter) { - boundValueEntityBinders.add(entityBinder); + boolean isDefaultConverter = bindingDefinition.getConverterClass() == DefaultPropertyConverter.class; + if (propertyEntityBinder.isSameType() && isBlankProperty && isDefaultConverter) { + if (!"id".equals(fieldAttribute)) { + boundValueEntityBinders.add(entityBinder); + } else { + configuredRepository.setBoundIdEntityBinder(propertyEntityBinder); + } } } else if (entityBinder instanceof ContextEntityBinder) { -- Gitee From 7347883e9e0e7f4bae1068abce410bc162d4f504 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 29 Aug 2022 10:02:57 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=87=B32.8.2?= 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 132fac37..e7260ab9 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.gitee.digital-engine spring-domain - 2.8.1 + 2.8.2 pom diff --git a/spring-boot-starter-domain/pom.xml b/spring-boot-starter-domain/pom.xml index 32fd6852..da0cf2da 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.8.1 + 2.8.2 spring-boot-starter-domain diff --git a/spring-domain-coating/pom.xml b/spring-domain-coating/pom.xml index 07067b36..3275c08b 100644 --- a/spring-domain-coating/pom.xml +++ b/spring-domain-coating/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.8.1 + 2.8.2 spring-domain-coating diff --git a/spring-domain-core/pom.xml b/spring-domain-core/pom.xml index df78d479..3d92a9b8 100644 --- a/spring-domain-core/pom.xml +++ b/spring-domain-core/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.8.1 + 2.8.2 spring-domain-core diff --git a/spring-domain-event/pom.xml b/spring-domain-event/pom.xml index b9801752..5b2d9b94 100644 --- a/spring-domain-event/pom.xml +++ b/spring-domain-event/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.8.1 + 2.8.2 spring-domain-event diff --git a/spring-domain-injection/pom.xml b/spring-domain-injection/pom.xml index 08418407..73aa5c51 100644 --- a/spring-domain-injection/pom.xml +++ b/spring-domain-injection/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.8.1 + 2.8.2 spring-domain-injection diff --git a/spring-domain-web/pom.xml b/spring-domain-web/pom.xml index 019ff479..9e74ffbc 100644 --- a/spring-domain-web/pom.xml +++ b/spring-domain-web/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine spring-domain - 2.8.1 + 2.8.2 spring-domain-web -- Gitee From 4943429a7acac548752221015848969198a684a1 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Mon, 29 Aug 2022 10:17:14 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=87=B32.8.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/spring/domain/core/utils/ReflectUtils.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/ReflectUtils.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/ReflectUtils.java index 32cf1437..66abc28d 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/ReflectUtils.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/utils/ReflectUtils.java @@ -1,10 +1,10 @@ package com.gitee.spring.domain.core.utils; -import cn.hutool.core.util.ReflectUtil; - import java.lang.reflect.Constructor; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -32,7 +32,11 @@ public class ReflectUtils { } public static Set getFieldNames(Class type) { - return ReflectUtil.getFieldMap(type).keySet(); + Set fieldNames = new LinkedHashSet<>(); + for (Field field : type.getDeclaredFields()) { + fieldNames.add(field.getName()); + } + return fieldNames; } } -- Gitee From 01507fecc22a259dfadcb765acd530556800e520 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 Aug 2022 10:13:49 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E5=BD=93=E5=AE=9E=E4=BD=93=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=87=BA=E7=8E=B0=E5=85=B3=E9=94=AE=E5=AD=97=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=E5=AD=97=E6=AE=B5=E5=90=8D=E5=8F=96?= =?UTF-8?q?@TableField=E7=9A=84=E5=88=97=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/repository/MybatisPlusRepository.java | 5 ++++- .../core/repository/AbstractContextRepository.java | 10 +++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusRepository.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusRepository.java index 161200f4..6aa2812c 100644 --- a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusRepository.java +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusRepository.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Pair; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -39,7 +40,9 @@ public class MybatisPlusRepository extends AbstractRepository { if (isTableId || "id".equals(fieldName)) { continue; } - fieldColumnPairs.add(new Pair<>(fieldName, StrUtil.toUnderlineCase(fieldName))); + TableField tableField = field.getAnnotation(TableField.class); + String columnName = tableField != null ? tableField.value() : StrUtil.toUnderlineCase(fieldName); + fieldColumnPairs.add(new Pair<>(fieldName, columnName)); } } } 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 ecee0584..0a9c5bd3 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,7 +204,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor Class assemblerClass = attributes.getClass(Attribute.ASSEMBLER_ATTRIBUTE); Class repositoryClass = attributes.getClass(Attribute.REPOSITORY_ATTRIBUTE); - boolean isBoundId = false; Set boundColumns = new LinkedHashSet<>(); List allEntityBinders = new ArrayList<>(); @@ -236,8 +235,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor } boolean isBindProperty = bindAttribute.startsWith("/"); - boolean isIdField = "id".equals(fieldAttribute); - isBoundId = !isBoundId && isBindProperty && isIdField; if (isBindProperty && StringUtils.isBlank(bindAliasAttribute)) { bindAliasAttribute = StringUtils.isBlank(propertyAttribute) ? PathUtils.getFieldName(bindAttribute) : propertyAttribute; @@ -291,10 +288,6 @@ public abstract class AbstractContextRepository extends AbstractRepositor } } - if (isBoundId && orderAttribute == 0) { - orderAttribute = -1; - } - EntityDefinition entityDefinition = new EntityDefinition( isAggregateRoot, accessPath, annotatedElement, entityClass, isCollection, genericEntityClass, fieldName, ReflectUtils.getFieldNames(genericEntityClass), @@ -397,6 +390,9 @@ public abstract class AbstractContextRepository extends AbstractRepositor if (!"id".equals(fieldAttribute)) { boundValueEntityBinders.add(entityBinder); } else { + if (entityDefinition.getOrderAttribute() == 0) { + entityDefinition.setOrderAttribute(-1); + } configuredRepository.setBoundIdEntityBinder(propertyEntityBinder); } } -- Gitee From 83f3e656ac8aa6d7eafd6b83dc643bc953f39d96 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 Aug 2022 17:03:18 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E5=9C=A8=E6=8F=92=E5=85=A5=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E7=AE=A1=E5=AE=9E=E4=BD=93=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=8F=92=E5=85=A5=EF=BC=8C=E9=83=BD=E4=BC=9A=E5=B0=86id?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=B9=BF=E6=92=AD=E5=87=BA=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/core/impl/EntityStateResolver.java | 2 +- .../repository/AbstractGenericRepository.java | 80 +++++++++---------- 2 files changed, 39 insertions(+), 43 deletions(-) diff --git a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/EntityStateResolver.java b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/EntityStateResolver.java index d1541946..6b0c1d03 100644 --- a/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/EntityStateResolver.java +++ b/spring-domain-core/src/main/java/com/gitee/spring/domain/core/impl/EntityStateResolver.java @@ -8,7 +8,7 @@ import com.gitee.spring.domain.core.repository.ConfiguredRepository; public class EntityStateResolver { - public int resolveEntityStateByContext(BoundedContext boundedContext, ConfiguredRepository configuredRepository) { + public int resolveContextEntityState(BoundedContext boundedContext, ConfiguredRepository configuredRepository) { EntityDefinition entityDefinition = configuredRepository.getEntityDefinition(); String idAttribute = entityDefinition.getIdAttribute(); if (idAttribute != null) { 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 55e7d6f2..6285a6ee 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 @@ -1,10 +1,15 @@ package com.gitee.spring.domain.core.repository; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Assert; -import com.gitee.spring.domain.core.api.*; +import com.gitee.spring.domain.core.api.EntityBinder; +import com.gitee.spring.domain.core.api.EntityMapper; +import com.gitee.spring.domain.core.api.EntityProperty; +import com.gitee.spring.domain.core.api.GenericRepository; import com.gitee.spring.domain.core.constants.EntityState; -import com.gitee.spring.domain.core.entity.*; +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 com.gitee.spring.domain.core.impl.EntityStateResolver; import com.gitee.spring.domain.core.utils.StringUtils; @@ -153,55 +158,46 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR EntityPropertyChain entityPropertyChain = configuredRepository.getEntityPropertyChain(); Object targetEntity = entityPropertyChain == null ? entity : entityPropertyChain.getValue(entity); if (targetEntity != null && isMatchScenes(boundedContext, configuredRepository)) { - int contextEntityState = entityStateResolver.resolveEntityStateByContext(boundedContext, configuredRepository); + int contextEntityState = entityStateResolver.resolveContextEntityState(boundedContext, configuredRepository); if (targetEntity instanceof Collection) { for (Object eachEntity : (Collection) targetEntity) { int entityState = entityStateResolver.resolveEntityState(expectedEntityState, contextEntityState, eachEntity); - if (entityState == EntityState.INSERT_OR_UPDATE) { - getBoundValueFromContext(boundedContext, entity, configuredRepository, eachEntity); - totalCount += configuredRepository.insertOrUpdate(boundedContext, eachEntity); - - } else if (entityState == EntityState.INSERT) { - getBoundValueFromContext(boundedContext, entity, configuredRepository, eachEntity); - totalCount += configuredRepository.insert(boundedContext, eachEntity); - - } else if (entityState == EntityState.UPDATE_SELECTIVE) { - totalCount += configuredRepository.updateSelective(boundedContext, eachEntity); - - } else if (entityState == EntityState.UPDATE) { - totalCount += configuredRepository.update(boundedContext, eachEntity); - - } else if (entityState == EntityState.DELETE) { - totalCount += configuredRepository.delete(boundedContext, eachEntity); - } + totalCount += doOperateEntityByState(boundedContext, entity, configuredRepository, eachEntity, entityState); } } else { - int entityState = entityStateResolver.resolveEntityState(expectedEntityState, contextEntityState, targetEntity); - if (entityState == EntityState.INSERT_OR_UPDATE) { - getBoundValueFromContext(boundedContext, entity, configuredRepository, targetEntity); - totalCount += configuredRepository.insertOrUpdate(boundedContext, targetEntity); + if (expectedEntityState == EntityState.INSERT_OR_UPDATE || expectedEntityState == EntityState.INSERT) { setBoundIdForBoundEntity(boundedContext, entity, configuredRepository, targetEntity); - - } else if (entityState == EntityState.INSERT) { - getBoundValueFromContext(boundedContext, entity, configuredRepository, targetEntity); - totalCount += configuredRepository.insert(boundedContext, targetEntity); - setBoundIdForBoundEntity(boundedContext, entity, configuredRepository, targetEntity); - - } else if (entityState == EntityState.UPDATE_SELECTIVE) { - totalCount += configuredRepository.updateSelective(boundedContext, targetEntity); - - } else if (entityState == EntityState.UPDATE) { - totalCount += configuredRepository.update(boundedContext, targetEntity); - - } else if (entityState == EntityState.DELETE) { - totalCount += configuredRepository.delete(boundedContext, targetEntity); } + int entityState = entityStateResolver.resolveEntityState(expectedEntityState, contextEntityState, targetEntity); + totalCount += doOperateEntityByState(boundedContext, entity, configuredRepository, targetEntity, entityState); } } } return totalCount; } + protected int doOperateEntityByState(BoundedContext boundedContext, Object rootEntity, ConfiguredRepository configuredRepository, Object entity, + int entityState) { + if (entityState == EntityState.INSERT_OR_UPDATE) { + getBoundValueFromContext(boundedContext, rootEntity, configuredRepository, entity); + return configuredRepository.insertOrUpdate(boundedContext, entity); + + } else if (entityState == EntityState.INSERT) { + getBoundValueFromContext(boundedContext, rootEntity, configuredRepository, entity); + return configuredRepository.insert(boundedContext, entity); + + } else if (entityState == EntityState.UPDATE_SELECTIVE) { + return configuredRepository.updateSelective(boundedContext, entity); + + } else if (entityState == EntityState.UPDATE) { + return configuredRepository.update(boundedContext, entity); + + } else if (entityState == EntityState.DELETE) { + return configuredRepository.delete(boundedContext, entity); + } + return 0; + } + protected void getBoundValueFromContext(BoundedContext boundedContext, Object rootEntity, ConfiguredRepository configuredRepository, Object entity) { for (EntityBinder entityBinder : configuredRepository.getBoundValueEntityBinders()) { Object fieldValue = entityBinder.getFieldValue(boundedContext, entity); @@ -217,7 +213,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR protected void setBoundIdForBoundEntity(BoundedContext boundedContext, Object rootEntity, ConfiguredRepository configuredRepository, Object entity) { EntityBinder entityBinder = configuredRepository.getBoundIdEntityBinder(); if (entityBinder != null) { - Object primaryKey = BeanUtil.getFieldValue(entity, "id"); + Object primaryKey = entityBinder.getFieldValue(boundedContext, entity); if (primaryKey != null) { entityBinder.setBoundValue(boundedContext, rootEntity, primaryKey); } @@ -230,7 +226,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR int totalCount = 0; for (ConfiguredRepository configuredRepository : getOrderedRepositories()) { if (isMatchScenes(boundedContext, configuredRepository)) { - int contextEntityState = entityStateResolver.resolveEntityStateByContext(boundedContext, configuredRepository); + int contextEntityState = entityStateResolver.resolveContextEntityState(boundedContext, configuredRepository); if (contextEntityState == EntityState.NONE) { totalCount += configuredRepository.updateByExample(boundedContext, entity, example); } @@ -260,7 +256,7 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR int totalCount = 0; for (ConfiguredRepository configuredRepository : getOrderedRepositories()) { if (isMatchScenes(boundedContext, configuredRepository)) { - int contextEntityState = entityStateResolver.resolveEntityStateByContext(boundedContext, configuredRepository); + int contextEntityState = entityStateResolver.resolveContextEntityState(boundedContext, configuredRepository); if (contextEntityState == EntityState.NONE) { totalCount += configuredRepository.deleteByExample(boundedContext, example); } -- Gitee From 74532e901cde508a3f969f15aa49361ce5898e53 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 Aug 2022 17:07:01 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E5=9C=A8=E6=8F=92=E5=85=A5=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E7=AE=A1=E5=AE=9E=E4=BD=93=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=8F=92=E5=85=A5=EF=BC=8C=E9=83=BD=E4=BC=9A=E5=B0=86id?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=B9=BF=E6=92=AD=E5=87=BA=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AbstractGenericRepository.java | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 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 6285a6ee..4f0eea8b 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 @@ -150,6 +150,51 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR return operateEntityByState(boundedContext, entity, EntityState.UPDATE); } + @Override + public int updateByExample(BoundedContext boundedContext, Object entity, Object example) { + Assert.notNull(entity, "The entity cannot be null!"); + int totalCount = 0; + for (ConfiguredRepository configuredRepository : getOrderedRepositories()) { + if (isMatchScenes(boundedContext, configuredRepository)) { + int contextEntityState = entityStateResolver.resolveContextEntityState(boundedContext, configuredRepository); + if (contextEntityState == EntityState.NONE) { + totalCount += configuredRepository.updateByExample(boundedContext, entity, example); + } + } + } + return totalCount; + } + + @Override + public int insertOrUpdate(BoundedContext boundedContext, E entity) { + return operateEntityByState(boundedContext, entity, EntityState.INSERT_OR_UPDATE); + } + + @Override + public int delete(BoundedContext boundedContext, E entity) { + return operateEntityByState(boundedContext, entity, EntityState.DELETE); + } + + @Override + public int deleteByPrimaryKey(BoundedContext boundedContext, PK primaryKey) { + E entity = selectByPrimaryKey(boundedContext, primaryKey); + return delete(boundedContext, entity); + } + + @Override + public int deleteByExample(BoundedContext boundedContext, Object example) { + int totalCount = 0; + for (ConfiguredRepository configuredRepository : getOrderedRepositories()) { + if (isMatchScenes(boundedContext, configuredRepository)) { + int contextEntityState = entityStateResolver.resolveContextEntityState(boundedContext, configuredRepository); + if (contextEntityState == EntityState.NONE) { + totalCount += configuredRepository.deleteByExample(boundedContext, example); + } + } + } + return totalCount; + } + protected int operateEntityByState(BoundedContext boundedContext, E entity, int expectedEntityState) { Assert.notNull(entity, "The entity cannot be null!"); int totalCount = 0; @@ -220,51 +265,6 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR } } - @Override - public int updateByExample(BoundedContext boundedContext, Object entity, Object example) { - Assert.notNull(entity, "The entity cannot be null!"); - int totalCount = 0; - for (ConfiguredRepository configuredRepository : getOrderedRepositories()) { - if (isMatchScenes(boundedContext, configuredRepository)) { - int contextEntityState = entityStateResolver.resolveContextEntityState(boundedContext, configuredRepository); - if (contextEntityState == EntityState.NONE) { - totalCount += configuredRepository.updateByExample(boundedContext, entity, example); - } - } - } - return totalCount; - } - - @Override - public int insertOrUpdate(BoundedContext boundedContext, E entity) { - return operateEntityByState(boundedContext, entity, EntityState.INSERT_OR_UPDATE); - } - - @Override - public int delete(BoundedContext boundedContext, E entity) { - return operateEntityByState(boundedContext, entity, EntityState.DELETE); - } - - @Override - public int deleteByPrimaryKey(BoundedContext boundedContext, PK primaryKey) { - E entity = selectByPrimaryKey(boundedContext, primaryKey); - return delete(boundedContext, entity); - } - - @Override - public int deleteByExample(BoundedContext boundedContext, Object example) { - int totalCount = 0; - for (ConfiguredRepository configuredRepository : getOrderedRepositories()) { - if (isMatchScenes(boundedContext, configuredRepository)) { - int contextEntityState = entityStateResolver.resolveContextEntityState(boundedContext, configuredRepository); - if (contextEntityState == EntityState.NONE) { - totalCount += configuredRepository.deleteByExample(boundedContext, example); - } - } - } - return totalCount; - } - @Override public int insertList(BoundedContext boundedContext, List entities) { return entities.stream().mapToInt(entity -> insert(boundedContext, entity)).sum(); -- Gitee From 26df265b98e3286835bf4476f2b1f3e1dc357720 Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Tue, 30 Aug 2022 18:23:25 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E5=9C=A8=E6=8F=92=E5=85=A5=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E7=AE=A1=E5=AE=9E=E4=BD=93=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=8F=92=E5=85=A5=EF=BC=8C=E9=83=BD=E4=BC=9A=E5=B0=86id?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=B9=BF=E6=92=AD=E5=87=BA=E5=8E=BB?= 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 4f0eea8b..9eb38a9c 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 @@ -210,11 +210,11 @@ public abstract class AbstractGenericRepository extends AbstractDelegateR totalCount += doOperateEntityByState(boundedContext, entity, configuredRepository, eachEntity, entityState); } } else { + int entityState = entityStateResolver.resolveEntityState(expectedEntityState, contextEntityState, targetEntity); + totalCount += doOperateEntityByState(boundedContext, entity, configuredRepository, targetEntity, entityState); if (expectedEntityState == EntityState.INSERT_OR_UPDATE || expectedEntityState == EntityState.INSERT) { setBoundIdForBoundEntity(boundedContext, entity, configuredRepository, targetEntity); } - int entityState = entityStateResolver.resolveEntityState(expectedEntityState, contextEntityState, targetEntity); - totalCount += doOperateEntityByState(boundedContext, entity, configuredRepository, targetEntity, entityState); } } } -- Gitee From 8b689a5c92aecfafb3c36748c39049e21c03ae9b Mon Sep 17 00:00:00 2001 From: "tao.chen1" Date: Wed, 31 Aug 2022 16:19:24 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E5=9C=A8=E4=B8=8D=E5=BC=BA=E5=88=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=B6=EF=BC=8C=E8=B5=B0=E9=9D=9E=E7=A9=BA?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/MybatisPlusRepository.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusRepository.java b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusRepository.java index 6aa2812c..7920c1e8 100644 --- a/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusRepository.java +++ b/spring-boot-starter-domain/src/main/java/com/gitee/spring/boot/starter/domain/repository/MybatisPlusRepository.java @@ -82,17 +82,21 @@ public class MybatisPlusRepository extends AbstractRepository { public int update(BoundedContext boundedContext, Object entity) { Object primaryKey = BeanUtil.getFieldValue(entity, "id"); if (primaryKey != null) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", primaryKey); Set fieldNames = (Set) boundedContext.get("#forceUpdate"); - for (Pair fieldColumnPair : fieldColumnPairs) { - String fieldName = fieldColumnPair.getKey(); - Object fieldValue = BeanUtil.getFieldValue(entity, fieldName); - if (fieldValue != null || (fieldNames != null && fieldNames.contains(fieldName))) { - updateWrapper.set(true, fieldColumnPair.getValue(), fieldValue); + if (fieldNames != null && !fieldNames.isEmpty()) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", primaryKey); + for (Pair fieldColumnPair : fieldColumnPairs) { + String fieldName = fieldColumnPair.getKey(); + Object fieldValue = BeanUtil.getFieldValue(entity, fieldName); + if (fieldValue != null || fieldNames.contains(fieldName)) { + updateWrapper.set(true, fieldColumnPair.getValue(), fieldValue); + } } + return baseMapper.update(null, updateWrapper); + } else { + return baseMapper.updateById(entity); } - return baseMapper.update(null, updateWrapper); } return 0; } -- Gitee