diff --git a/dorive-api/pom.xml b/dorive-api/pom.xml
index 9755bd70284098d4721dd4304fbbc95645c6d5ac..0d58bd76a18481693fb381a5f0beb7334825b0a2 100644
--- a/dorive-api/pom.xml
+++ b/dorive-api/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-enginedorive
- 3.4.3.4
+ 3.4.3.5dorive-api
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Aggregate.java b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Aggregate.java
index 7243d49739b66893a14cf22c0578287724a0664c..303c5d2bb040782bf9874aaf505fa47ed902c311 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Aggregate.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Aggregate.java
@@ -57,6 +57,12 @@ public @interface Aggregate {
@AliasFor(annotation = Entity.class)
Class> factory() default Object.class;
+ /**
+ * @see Entity
+ */
+ @AliasFor(annotation = Entity.class)
+ boolean aggregate() default true;
+
/**
* @see Entity
*/
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Entity.java b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Entity.java
index 21dbba2a0d453e562cc9f57b670438d4e294559d..261c013c680c7be4b5786d1e42ad2d68d103d8ee 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Entity.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Entity.java
@@ -46,6 +46,11 @@ public @interface Entity {
*/
Class> factory() default Object.class;
+ /**
+ * 是否聚合
+ */
+ boolean aggregate() default false;
+
/**
* 指定仓储
*/
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Field.java b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Field.java
index 72f331b12dc8ff4bf1327354d2ee74e0f9be6d85..fc28e0691aa24067cccae2fe3d0af535e2e25637 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Field.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Field.java
@@ -36,7 +36,7 @@ public @interface Field {
/**
* 是否主键
*/
- boolean isId() default false;
+ boolean id() default false;
/**
* 别名
@@ -50,6 +50,11 @@ public @interface Field {
@AliasFor("value")
String alias() default "";
+ /**
+ * 是否值对象
+ */
+ boolean valueObj() default false;
+
/**
* 映射表达式
*/
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Id.java b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Id.java
index 169be88eddcf08a02f921ea483ae1fec6f5f9719..d1716eb10fcab550650281339cc1f203f44c9391 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Id.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/Id.java
@@ -34,7 +34,7 @@ import java.lang.annotation.Target;
public @interface Id {
@AliasFor(annotation = Field.class)
- boolean isId() default true;
+ boolean id() default true;
@AliasFor(annotation = Field.class)
String value() default "id";
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/ValueObj.java b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/ValueObj.java
new file mode 100644
index 0000000000000000000000000000000000000000..752f755d886166eff614276965875d7de34f0251
--- /dev/null
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/ValueObj.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.api.annotation;
+
+import org.springframework.core.annotation.AliasFor;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Field
+@Inherited
+@Documented
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ValueObj {
+
+ @AliasFor(annotation = Field.class)
+ String value() default "";
+
+ @AliasFor(annotation = Field.class)
+ boolean valueObj() default true;
+
+ @AliasFor(annotation = Field.class)
+ Class> converter() default Object.class;
+
+}
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/def/EntityDef.java b/dorive-api/src/main/java/com/gitee/dorive/api/def/EntityDef.java
index effdf65e81573c3358d07ffd7ea2902d4bbd5b30..f95eac63e5449872ccb3f2e6d288dea9f0b3682f 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/def/EntityDef.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/def/EntityDef.java
@@ -36,6 +36,7 @@ public class EntityDef {
private String name;
private Class> source;
private Class> factory;
+ private boolean aggregate;
private Class> repository;
public static EntityDef fromElement(AnnotatedElement element) {
@@ -43,7 +44,7 @@ public class EntityDef {
return attributes != null ? BeanUtil.copyProperties(attributes, EntityDef.class) : null;
}
- public void merge(EntityDef entityDef) {
+ public void mergeDef(EntityDef entityDef) {
if (StringUtils.isBlank(name)) {
name = entityDef.getName();
}
@@ -55,8 +56,4 @@ public class EntityDef {
}
}
- public boolean isRepositoryDef() {
- return repository != Object.class;
- }
-
}
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/def/FieldDef.java b/dorive-api/src/main/java/com/gitee/dorive/api/def/FieldDef.java
index 5d077cabfeea99a089f0d54f9af1b05a06d1ec0c..c62cfa30096b8457e3f160e9a69ef067dc488887 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/def/FieldDef.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/def/FieldDef.java
@@ -32,8 +32,9 @@ import java.util.Map;
@AllArgsConstructor
public class FieldDef {
- private boolean isId;
+ private boolean id;
private String alias;
+ private boolean valueObj;
private String mapExp;
private Class> converter;
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityEle.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityEle.java
index 90d9db18f0dea4d8695679c006d3ec5283fb5be8..f645ef5f937d2e8aadd5d16766dc4eca2646ab63 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityEle.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityEle.java
@@ -17,7 +17,6 @@
package com.gitee.dorive.api.entity;
-import com.gitee.dorive.api.annotation.Aggregate;
import com.gitee.dorive.api.api.PropProxy;
import com.gitee.dorive.api.def.BindingDef;
import com.gitee.dorive.api.def.EntityDef;
@@ -39,7 +38,6 @@ public abstract class EntityEle {
private AnnotatedElement element;
private EntityDef entityDef;
private OrderDef orderDef;
- private boolean aggregated;
private List bindingDefs;
private PropProxy idProxy;
private Map fieldAliasMapping;
@@ -48,7 +46,6 @@ public abstract class EntityEle {
this.element = element;
this.entityDef = EntityDef.fromElement(element);
this.orderDef = OrderDef.fromElement(element);
- this.aggregated = (entityDef != null && entityDef.isRepositoryDef()) || isAggregateDef();
this.bindingDefs = BindingDef.fromElement(element);
}
@@ -56,10 +53,6 @@ public abstract class EntityEle {
return entityDef != null;
}
- public boolean isAggregateDef() {
- return element.isAnnotationPresent(Aggregate.class);
- }
-
public void initialize() {
if (entityDef != null && idProxy == null) {
doInitialize();
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityField.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityField.java
index aaac3292ec55dabe881a50ccd3364752c9af8cd0..4a4ed5a8b92400a50737f5c8594bcd5594e4e98a 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityField.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityField.java
@@ -69,7 +69,7 @@ public class EntityField extends EntityEle {
if (entityDef != null) {
EntityDef genericEntityDef = EntityDef.fromElement(genericType);
if (genericEntityDef != null) {
- entityDef.merge(genericEntityDef);
+ entityDef.mergeDef(genericEntityDef);
}
}
if (isComplexType(genericType)) {
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityType.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityType.java
index fc574bb207c459fa589431ee55d858afbc64e161..b173f83cb79f1ee1dac7465b6c029b72b459ef57 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityType.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/EntityType.java
@@ -28,6 +28,7 @@ import com.gitee.dorive.api.util.ReflectUtils;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
@@ -100,10 +101,16 @@ public class EntityType extends EntityEle {
Map fieldAliasMapping = new LinkedHashMap<>(entityFieldMap.size() * 4 / 3 + 1);
for (EntityField entityField : entityFieldMap.values()) {
- String fieldName = entityField.getName();
+ String name = entityField.getName();
+ String alias = StrUtil.toUnderlineCase(name);
FieldDef fieldDef = entityField.getFieldDef();
- String alias = fieldDef != null ? fieldDef.getAlias() : StrUtil.toUnderlineCase(fieldName);
- fieldAliasMapping.put(fieldName, alias);
+ if (fieldDef != null) {
+ String aliasDef = fieldDef.getAlias();
+ if (StringUtils.isNotBlank(aliasDef)) {
+ alias = aliasDef;
+ }
+ }
+ fieldAliasMapping.put(name, alias);
}
setFieldAliasMapping(fieldAliasMapping);
}
diff --git a/dorive-core/pom.xml b/dorive-core/pom.xml
index 83b2940026bed4f9ec665be29c9d4d5ee6be4a33..a612a0b4c916b51765b4b8fdf582ba6983cb647f 100644
--- a/dorive-core/pom.xml
+++ b/dorive-core/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-enginedorive
- 3.4.3.4
+ 3.4.3.5dorive-core
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Options.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Options.java
index 545275e78a3c83cff47e2d4428c5acd4c9ddd912..87fb517bd0127501d160d83128aa281cc202057d 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Options.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/context/Options.java
@@ -18,7 +18,7 @@
package com.gitee.dorive.core.api.context;
import com.gitee.dorive.core.entity.context.EnumOptions;
-import com.gitee.dorive.core.entity.option.SelectType;
+import com.gitee.dorive.core.entity.enums.SelectType;
import java.util.Map;
@@ -29,9 +29,9 @@ public interface Options {
Map, Object> getOptions();
- void setOption(Class> type, Object value);
+ void setOption(Class type, T value);
- Object getOption(Class> type);
+ T getOption(Class type);
void removeOption(Class> type);
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/Executor.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/Executor.java
index 8ec59a6b75e81d17b4bca634f1b2e4f8435bc076..d19da832226e71c1eb532d59502655e4d40e2120 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/Executor.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/executor/Executor.java
@@ -20,7 +20,7 @@ package com.gitee.dorive.core.api.executor;
import com.gitee.dorive.core.api.context.Context;
import com.gitee.dorive.core.entity.executor.Result;
import com.gitee.dorive.core.entity.operation.Operation;
-import com.gitee.dorive.core.entity.operation.Query;
+import com.gitee.dorive.core.entity.operation.cop.Query;
public interface Executor {
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/converter/Converter.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/factory/Converter.java
similarity index 95%
rename from dorive-core/src/main/java/com/gitee/dorive/core/api/converter/Converter.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/api/factory/Converter.java
index 6f85ca0b5132267adc5fdb7cc85471039846d247..d539e91ed6b668d61333b4e38a764894ed67b914 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/api/converter/Converter.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/factory/Converter.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.api.converter;
+package com.gitee.dorive.core.api.factory;
public interface Converter {
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/converter/EntityFactory.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/factory/EntityFactory.java
similarity index 95%
rename from dorive-core/src/main/java/com/gitee/dorive/core/api/converter/EntityFactory.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/api/factory/EntityFactory.java
index 465ed494da5d7a73518e8f51e6c646c8288aac3a..3b93dc9be005d8e19e6ac69c0bbfc797a7267fe8 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/api/converter/EntityFactory.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/factory/EntityFactory.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.api.converter;
+package com.gitee.dorive.core.api.factory;
import com.gitee.dorive.core.api.context.Context;
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/api/converter/EntityMapper.java b/dorive-core/src/main/java/com/gitee/dorive/core/api/factory/EntityMapper.java
similarity index 67%
rename from dorive-core/src/main/java/com/gitee/dorive/core/api/converter/EntityMapper.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/api/factory/EntityMapper.java
index 797999132ff9a2eda9e1e27742a8a006fc9af041..5c7b4a875373c6fd44d30a1b5318d9e27d3c4bde 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/api/converter/EntityMapper.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/api/factory/EntityMapper.java
@@ -15,22 +15,23 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.api.converter;
+package com.gitee.dorive.core.api.factory;
-public interface EntityMapper {
+import com.gitee.dorive.core.entity.factory.FieldConverter;
- String fieldToAlias(String field);
+import java.lang.reflect.Type;
+import java.util.List;
- String aliasToField(String alias);
+public interface EntityMapper {
- String fieldToProp(String field);
+ FieldConverter getField(String domain, String name);
- boolean hasConverter();
+ List getValueObjFields();
- Object fieldToAlias(String alias, Object value);
+ List getMatchedValueObjFields();
- Object aliasToField(String field, Object value);
+ List getUnmatchedValueObjFields();
- Object fieldToProp(String prop, Object value);
+ boolean isValueObjType(Type type);
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/common/EntityStoreInfo.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/common/EntityStoreInfo.java
index 62c7b7cf0d247853e07fa8723011b7ca4ae75b50..4942b0ab607e2b3403dbdf005f4cabfdf3ea7b1c 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/common/EntityStoreInfo.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/common/EntityStoreInfo.java
@@ -33,5 +33,6 @@ public class EntityStoreInfo {
private String idColumn;
private Map propAliasMappingWithoutPk;
private Map propAliasMapping;
+ private Map aliasPropMapping;
private String selectColumns;
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/AbstractContext.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/AbstractContext.java
index 82f782a48ebb0c019070d5a25a132284cfe22a5a..9f9e444df3ecb2d7000af44544aba21a112d4028 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/AbstractContext.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/AbstractContext.java
@@ -47,13 +47,14 @@ public abstract class AbstractContext extends LinkedHashMap impl
}
@Override
- public void setOption(Class> type, Object value) {
+ public void setOption(Class type, T value) {
options.put(type, value);
}
@Override
- public Object getOption(Class> type) {
- return options.get(type);
+ @SuppressWarnings("unchecked")
+ public T getOption(Class type) {
+ return (T) options.get(type);
}
@Override
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/EnumOptions.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/EnumOptions.java
index 205c50012ea2aea1dba18cb6d1880b862b6593d3..d27af132a83a48a3de61ea44257c0d9d600f9539 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/EnumOptions.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/context/EnumOptions.java
@@ -36,13 +36,14 @@ public class EnumOptions implements Options {
}
@Override
- public void setOption(Class> type, Object value) {
+ public void setOption(Class type, T value) {
throw new UnsupportedOperationException();
}
@Override
- public Object getOption(Class> type) {
- return options.get(type);
+ @SuppressWarnings("unchecked")
+ public T getOption(Class type) {
+ return (T) options.get(type);
}
@Override
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/option/BindingType.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/BindingType.java
similarity index 95%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/option/BindingType.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/BindingType.java
index 89ea6fc6f1f46a8d969b62913c7f3a50d30726a7..0c614e8c5f7f19ee699af26966c0342b146e266c 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/option/BindingType.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/BindingType.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.entity.option;
+package com.gitee.dorive.core.entity.enums;
public enum BindingType {
STRONG,
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/Domain.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/Domain.java
new file mode 100644
index 0000000000000000000000000000000000000000..06295ff31182c1db9a8fa582d31420ff78712160
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/Domain.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.entity.enums;
+
+public enum Domain {
+ ENTITY,
+ DATABASE,
+ POJO
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/option/JoinType.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/JoinType.java
similarity index 95%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/option/JoinType.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/JoinType.java
index 0be2334a482f521471e2cd49dbd2241e74185ae5..47e31d0e8e790d4abce6a2a17dd6f4455229a45f 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/option/JoinType.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/JoinType.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.entity.option;
+package com.gitee.dorive.core.entity.enums;
public enum JoinType {
UNKNOWN,
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/option/QueryMethod.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/QueryMethod.java
similarity index 94%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/option/QueryMethod.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/QueryMethod.java
index 3f94c7f90023769cf2f4cfba3d2d84b330df4475..ff60dc27fb6b8e6e456a17a98ba310001689e308 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/option/QueryMethod.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/QueryMethod.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.entity.option;
+package com.gitee.dorive.core.entity.enums;
public enum QueryMethod {
DEFAULT,
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/RootControl.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/RootControl.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4cf1a4b48b754ce3dd79e3fa5a6d8f99a6bdb14
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/RootControl.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.entity.enums;
+
+public enum RootControl {
+ UNCONTROLLED,
+ INCLUDE_ROOT,
+ IGNORE_ROOT
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/option/SelectType.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/SelectType.java
similarity index 95%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/option/SelectType.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/SelectType.java
index 468277897a9f0d8c894b63e65981c8fcc49f2d8a..e96e7bac7b410fd16ee0391a068877c1c5f65ef4 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/option/SelectType.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/enums/SelectType.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.entity.option;
+package com.gitee.dorive.core.entity.enums;
public enum SelectType {
NONE,
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Result.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Result.java
index 1b35bcd8e892023a4deb8b9e5ed93396c4304f68..f0539660f852bf745539744d9eb6c37a660a3bb2 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Result.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Result.java
@@ -17,7 +17,7 @@
package com.gitee.dorive.core.entity.executor;
-import com.gitee.dorive.core.entity.operation.Query;
+import com.gitee.dorive.core.entity.operation.cop.Query;
import lombok.Data;
import lombok.NoArgsConstructor;
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/factory/FieldConverter.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/factory/FieldConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..c2ef233c0c0e5182d0e249698042e89e01f1d580
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/factory/FieldConverter.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.entity.factory;
+
+import com.gitee.dorive.core.api.factory.Converter;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class FieldConverter implements Converter {
+
+ private String domain;
+ private String name;
+ private boolean match;
+ private Map names;
+ private Converter converter;
+
+ public String getName(String domain) {
+ return names.get(domain);
+ }
+
+ @Override
+ public Object reconstitute(Object value) {
+ return converter == null ? value : converter.reconstitute(value);
+ }
+
+ @Override
+ public Object deconstruct(Object value) {
+ return converter == null ? value : converter.deconstruct(value);
+ }
+
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Condition.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Condition.java
index d16fd4b40672ddf9d6723f328cb2acdf0d8024fb..9574fffe44de0e647980e5f67b61423df157aee8 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Condition.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Condition.java
@@ -28,8 +28,16 @@ public class Condition extends Operation {
private Object primaryKey;
private Example example;
- public Condition(Object entity) {
- super(entity);
+ public Condition(Object primaryKey) {
+ this.primaryKey = primaryKey;
+ }
+
+ public Condition(Example example) {
+ this.example = example;
+ }
+
+ public boolean isEmpty() {
+ return primaryKey == null && example == null;
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/InsertOrUpdate.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/EntityOp.java
similarity index 84%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/InsertOrUpdate.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/EntityOp.java
index 70d02527e25f03e7b183861664a55913aa413c07..9c3996776e3bfb808a01a64992e57423159b3d92 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/InsertOrUpdate.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/EntityOp.java
@@ -20,12 +20,16 @@ package com.gitee.dorive.core.entity.operation;
import lombok.Getter;
import lombok.Setter;
+import java.util.List;
+
@Getter
@Setter
-public class InsertOrUpdate extends Operation {
+public class EntityOp extends Operation {
+
+ private List> entities;
- public InsertOrUpdate(Object entity) {
- super(entity);
+ public EntityOp(List> entities) {
+ this.entities = entities;
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Operation.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Operation.java
index f7bb315faac9ad6618f1939056798c122f52ad3a..c153db5a2c4381c1b75756f389da5f4e5edd637d 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Operation.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Operation.java
@@ -17,42 +17,35 @@
package com.gitee.dorive.core.entity.operation;
+import com.gitee.dorive.core.entity.enums.RootControl;
import lombok.Data;
+/**
+ * 操作
+ */
@Data
public class Operation {
- public enum RootControl {NONE, INCLUDE_ROOT, IGNORE_ROOT}
-
- private RootControl rootControl = RootControl.NONE;
- private Object entity;
+ private RootControl rootControl = RootControl.UNCONTROLLED;
- public Operation(Object entity) {
- this.entity = entity;
+ public void includeRoot() {
+ this.rootControl = RootControl.INCLUDE_ROOT;
}
- public void includeRoot() {
- rootControl = RootControl.INCLUDE_ROOT;
+ public void switchRoot(boolean flag) {
+ this.rootControl = flag ? RootControl.INCLUDE_ROOT : RootControl.IGNORE_ROOT;
}
- public void ignoreRoot() {
- rootControl = RootControl.IGNORE_ROOT;
+ public boolean isUncontrolled() {
+ return rootControl == RootControl.UNCONTROLLED;
}
public boolean isIncludeRoot() {
return rootControl == RootControl.INCLUDE_ROOT;
}
- public boolean isIgnoreRoot() {
- return rootControl == RootControl.IGNORE_ROOT;
- }
-
- public void switchRoot(boolean flag) {
- if (flag) {
- includeRoot();
- } else {
- ignoreRoot();
- }
+ public boolean isNotIgnoreRoot() {
+ return rootControl != RootControl.IGNORE_ROOT;
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/ConditionDelete.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/ConditionDelete.java
new file mode 100644
index 0000000000000000000000000000000000000000..c085316e096c5a8e451cd122c8be59c96f92825d
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/ConditionDelete.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.entity.operation.cop;
+
+import com.gitee.dorive.core.entity.executor.Example;
+import com.gitee.dorive.core.entity.operation.Condition;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ConditionDelete extends Condition {
+
+ public ConditionDelete(Object primaryKey) {
+ super(primaryKey);
+ }
+
+ public ConditionDelete(Example example) {
+ super(example);
+ }
+
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/ConditionUpdate.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/ConditionUpdate.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e7c86923c3543f11d2efde95560a049034ab1fa
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/ConditionUpdate.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.entity.operation.cop;
+
+import com.gitee.dorive.core.entity.executor.Example;
+import com.gitee.dorive.core.entity.operation.Condition;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ConditionUpdate extends Condition {
+
+ private Object entity;
+
+ public ConditionUpdate(Object entity, Object primaryKey) {
+ super(primaryKey);
+ this.entity = entity;
+ }
+
+ public ConditionUpdate(Object entity, Example example) {
+ super(example);
+ this.entity = entity;
+ }
+
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Query.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/Query.java
similarity index 76%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Query.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/Query.java
index c679a77d524928ee13f651b37fffd9cd2f908aeb..66fac2fc31491db67f988b56a2c64e5c975583dc 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Query.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/cop/Query.java
@@ -15,8 +15,10 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.entity.operation;
+package com.gitee.dorive.core.entity.operation.cop;
+import com.gitee.dorive.core.entity.executor.Example;
+import com.gitee.dorive.core.entity.operation.Condition;
import lombok.Getter;
import lombok.Setter;
@@ -24,12 +26,12 @@ import lombok.Setter;
@Setter
public class Query extends Condition {
- public Query(Object entity) {
- super(entity);
+ public Query(Object primaryKey) {
+ super(primaryKey);
}
- public boolean isEmpty() {
- return getPrimaryKey() == null && getExample() == null;
+ public Query(Example example) {
+ super(example);
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Delete.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Delete.java
similarity index 78%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Delete.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Delete.java
index 5731ab569591f19e5c168574673f968b66195501..c12f5d847212a90cb2ff093317e25b4ae8a41098 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Delete.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Delete.java
@@ -15,17 +15,20 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.entity.operation;
+package com.gitee.dorive.core.entity.operation.eop;
+import com.gitee.dorive.core.entity.operation.EntityOp;
import lombok.Getter;
import lombok.Setter;
+import java.util.List;
+
@Getter
@Setter
-public class Delete extends Condition {
+public class Delete extends EntityOp {
- public Delete(Object entity) {
- super(entity);
+ public Delete(List> entities) {
+ super(entities);
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Insert.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Insert.java
similarity index 78%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Insert.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Insert.java
index 60a5e0c17a8d304c4f98c4f62fa58b853e56be18..e42d752603d8b1ea68282645621913c6c9ff1446 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Insert.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Insert.java
@@ -15,17 +15,20 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.entity.operation;
+package com.gitee.dorive.core.entity.operation.eop;
+import com.gitee.dorive.core.entity.operation.EntityOp;
import lombok.Getter;
import lombok.Setter;
+import java.util.List;
+
@Getter
@Setter
-public class Insert extends Operation {
+public class Insert extends EntityOp {
- public Insert(Object entity) {
- super(entity);
+ public Insert(List> entities) {
+ super(entities);
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/InsertOrUpdate.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/InsertOrUpdate.java
new file mode 100644
index 0000000000000000000000000000000000000000..b6e8bcc2a3ad93813377357bc4206ac76c4022f6
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/InsertOrUpdate.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.entity.operation.eop;
+
+import com.gitee.dorive.core.entity.operation.EntityOp;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class InsertOrUpdate extends EntityOp {
+
+ private Insert insert;
+ private Update update;
+
+ public InsertOrUpdate(List> entities) {
+ super(entities);
+ }
+
+ @Override
+ public void switchRoot(boolean flag) {
+ super.switchRoot(flag);
+ if (insert != null) {
+ insert.switchRoot(flag);
+ }
+ if (update != null) {
+ update.switchRoot(flag);
+ }
+ }
+
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Update.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Update.java
similarity index 80%
rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Update.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Update.java
index bd514cd6c7f8f58a0766534c052fa41e977fd8b0..f534ff99a429886dc991af1704e1c3d86b10e4e5 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/Update.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/operation/eop/Update.java
@@ -15,22 +15,24 @@
* limitations under the License.
*/
-package com.gitee.dorive.core.entity.operation;
+package com.gitee.dorive.core.entity.operation.eop;
+import com.gitee.dorive.core.entity.operation.EntityOp;
import lombok.Getter;
import lombok.Setter;
import java.util.Collections;
+import java.util.List;
import java.util.Set;
@Getter
@Setter
-public class Update extends Condition {
+public class Update extends EntityOp {
private Set nullableProps = Collections.emptySet();
- public Update(Object entity) {
- super(entity);
+ public Update(List> entities) {
+ super(entities);
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AbstractSelector.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AbstractSelector.java
index ce1407e8351df7d90b89ec993d734450f9e80720..9b6bff638c2624a67bfd63ae4870fda4a9d4236c 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AbstractSelector.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AbstractSelector.java
@@ -18,7 +18,7 @@
package com.gitee.dorive.core.impl.context;
import com.gitee.dorive.core.api.context.Selector;
-import com.gitee.dorive.core.entity.option.SelectType;
+import com.gitee.dorive.core.entity.enums.SelectType;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -38,13 +38,14 @@ public abstract class AbstractSelector implements Selector {
}
@Override
- public void setOption(Class> type, Object value) {
+ public void setOption(Class type, T value) {
throw new UnsupportedOperationException();
}
@Override
- public Object getOption(Class> type) {
- return options.get(type);
+ @SuppressWarnings("unchecked")
+ public T getOption(Class type) {
+ return (T) options.get(type);
}
@Override
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/SelectTypeMatcher.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/SelectTypeMatcher.java
index 965dda7d841547bbf4d6ce24d382c42a9bb05d96..cd22d00c3f65ae305ce9267a0c2e43b85287c607 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/SelectTypeMatcher.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/SelectTypeMatcher.java
@@ -20,7 +20,7 @@ package com.gitee.dorive.core.impl.context;
import com.gitee.dorive.core.api.context.Matcher;
import com.gitee.dorive.core.api.context.Options;
import com.gitee.dorive.core.api.context.Selector;
-import com.gitee.dorive.core.entity.option.SelectType;
+import com.gitee.dorive.core.entity.enums.SelectType;
import com.gitee.dorive.core.repository.CommonRepository;
import lombok.Getter;
import lombok.Setter;
@@ -49,7 +49,7 @@ public class SelectTypeMatcher implements Matcher {
@Override
public boolean matches(Options options) {
- SelectType selectType = (SelectType) options.getOption(SelectType.class);
+ SelectType selectType = options.getOption(SelectType.class);
if (selectType != null) {
Matcher matcher = matcherMap.get(selectType);
if (matcher != null) {
@@ -62,7 +62,7 @@ public class SelectTypeMatcher implements Matcher {
private class SelectorMatcher implements Matcher {
@Override
public boolean matches(Options options) {
- Selector selector = (Selector) options.getOption(Selector.class);
+ Selector selector = options.getOption(Selector.class);
if (selector != null) {
Set names = selector.getNames();
String name = repository.getName();
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/JsonArrayConverter.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/JsonArrayConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c01603bf23619960f7c31518bce0a0cd4f1660f
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/JsonArrayConverter.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.impl.converter;
+
+import cn.hutool.json.JSONUtil;
+import com.gitee.dorive.core.api.factory.Converter;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class JsonArrayConverter implements Converter {
+
+ private Class> entityClass;
+
+ @Override
+ public Object reconstitute(Object value) {
+ return JSONUtil.toList((String) value, entityClass);
+ }
+
+ @Override
+ public Object deconstruct(Object value) {
+ return JSONUtil.toJsonStr(value);
+ }
+
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/JsonConverter.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/JsonConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..9384249304dd614662d436625d856ca2efda83bd
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/JsonConverter.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.impl.converter;
+
+import cn.hutool.json.JSONUtil;
+import com.gitee.dorive.core.api.factory.Converter;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class JsonConverter implements Converter {
+
+ private Class> entityClass;
+
+ @Override
+ public Object reconstitute(Object value) {
+ return JSONUtil.toBean((String) value, entityClass);
+ }
+
+ @Override
+ public Object deconstruct(Object value) {
+ return JSONUtil.toJsonStr(value);
+ }
+
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/MapConverter.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/MapConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..81b78e98a11fa9a693277fb7d037c62175d9282c
--- /dev/null
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/MapConverter.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.core.impl.converter;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.gitee.dorive.core.api.factory.Converter;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class MapConverter implements Converter {
+
+ private Class> entityClass;
+
+ @Override
+ public Object reconstitute(Object value) {
+ return BeanUtil.toBean(value, entityClass);
+ }
+
+ @Override
+ public Object deconstruct(Object value) {
+ return BeanUtil.beanToMap(value);
+ }
+
+}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/DefaultConverter.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/MapExpConverter.java
similarity index 93%
rename from dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/DefaultConverter.java
rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/MapExpConverter.java
index 666807e225c428043b0fcd684e0a131b52c5add2..d5325926e102929599b905fc1d46946322dc3cf7 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/DefaultConverter.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/converter/MapExpConverter.java
@@ -20,8 +20,9 @@ package com.gitee.dorive.core.impl.converter;
import cn.hutool.core.util.StrUtil;
import com.gitee.dorive.api.def.FieldDef;
import com.gitee.dorive.api.entity.EntityField;
-import com.gitee.dorive.core.api.converter.Converter;
-import lombok.Data;
+import com.gitee.dorive.core.api.factory.Converter;
+import lombok.Getter;
+import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
@@ -29,14 +30,15 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-@Data
-public class DefaultConverter implements Converter {
+@Getter
+@Setter
+public class MapExpConverter implements Converter {
private EntityField entityField;
private Map