From 5c571181a2288adba6e19d08bcb9efb04687201e Mon Sep 17 00:00:00 2001 From: linpeilie Date: Wed, 12 Jun 2024 14:10:33 +0800 Subject: [PATCH] =?UTF-8?q?AutoMapping=20=E6=B3=A8=E8=A7=A3=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20reverseConvertGenerate=EF=BC=8C=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E7=94=9F=E6=88=90=E5=8F=8D=E5=90=91=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E9=80=BB=E8=BE=91=EF=BC=8C=E9=80=82=E9=85=8D=E6=9B=B4?= =?UTF-8?q?=E5=8A=A0=E5=A4=8D=E6=9D=82=E7=9A=84=E5=BA=94=E7=94=A8=E5=9C=BA?= =?UTF-8?q?=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/github/linpeilie/model/Car1.java | 15 +++++++++++++++ .../linpeilie/processor/AutoMapperProcessor.java | 2 ++ .../processor/metadata/AutoMappingMetadata.java | 10 ++++++++++ .../github/linpeilie/annotations/AutoMapping.java | 7 +++++++ 4 files changed, 34 insertions(+) create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/model/Car1.java diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/model/Car1.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/model/Car1.java new file mode 100644 index 0000000..45a2569 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/model/Car1.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.model; + +import io.github.linpeilie.annotations.AutoMapper; +import io.github.linpeilie.annotations.AutoMapping; +import java.time.LocalDateTime; +import lombok.Data; + +@AutoMapper(target = CarDto.class, imports = LocalDateTime.class) +@Data +public class Car1 { + + @AutoMapping(target = "seatMaterial", source = "seatConfiguration.seatMaterial", reverseConvertGenerate = false) + private SeatConfiguration seatConfiguration; + +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java index 0b3262e..5a4031e 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java @@ -593,6 +593,7 @@ public class AutoMapperProcessor extends AbstractProcessor { // 默认的规则 Map autoMappingMap = autoMapperMetadata.getFieldMappingList().stream() + .filter(AutoMappingMetadata::getReverseConvertGenerate) .map(fieldMapping -> { final AutoMappingMetadata autoMappingMetadata = new AutoMappingMetadata(); autoMappingMetadata.setSource(fieldMapping.getTarget()); @@ -919,6 +920,7 @@ public class AutoMapperProcessor extends AbstractProcessor { metadata.setTarget(elementName); } metadata.setTargetClass(targetClass); + metadata.setReverseConvertGenerate(autoMappingGem.reverseConvertGenerate().get()); metadata.setDefaultValue(autoMappingGem.defaultValue().getValue()); metadata.setIgnore(autoMappingGem.ignore().getValue()); metadata.setExpression(autoMappingGem.expression().getValue()); diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMappingMetadata.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMappingMetadata.java index a36ff4b..1fb66a5 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMappingMetadata.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMappingMetadata.java @@ -9,6 +9,8 @@ public class AutoMappingMetadata { private ClassName targetClass; + private boolean reverseConvertGenerate; + private String target; private String source; @@ -52,6 +54,14 @@ public class AutoMappingMetadata { this.targetClass = targetClass; } + public boolean getReverseConvertGenerate() { + return reverseConvertGenerate; + } + + public void setReverseConvertGenerate(boolean reverseConvertGenerate) { + this.reverseConvertGenerate = reverseConvertGenerate; + } + public String getTarget() { return target; } diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java index 79ca278..873c22e 100644 --- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java @@ -24,6 +24,13 @@ public @interface AutoMapping { Class targetClass() default DefaultMapping.class; + /** + * 是否生成反向转换的逻辑 + * + * @return true : 生成反向转换的逻辑 false : 不生成反向转换的逻辑 + */ + boolean reverseConvertGenerate() default true; + /** * 来源,默认取当前字段名称 * - 可以是当前类中的属性名