From 3010530616b969256b3ba322b8dfaf4910777a34 Mon Sep 17 00:00:00 2001 From: linpeilie Date: Sun, 13 Oct 2024 15:26:43 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=80=9F=E7=9F=A5?= =?UTF-8?q?=E5=90=A7=E8=B7=B3=E8=BD=AC=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vuepress/components/links.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/.vuepress/components/links.ts b/docs/.vuepress/components/links.ts index 4ec415b..b073abb 100644 --- a/docs/.vuepress/components/links.ts +++ b/docs/.vuepress/components/links.ts @@ -1,4 +1,6 @@ export const links = [ + { logo: 'https://suzhi.fun/logo.svg', title: '速知吧', desc: '快速获取多网站信息平台、摸鱼必备网站\n简洁直观的界面,轻松掌握热门资讯、榜单信息', link: 'https://suzhi.fun' }, { logo: 'https://plus-doc.dromara.org/static/image/logo.png', title: 'RuoYi-Vue-Plus 多租户权限管理系统', desc: '真正面向企业级的应用框架\n组件化 模块化 轻耦合 高扩展 针对企业痛点 业界一流技术栈', link: 'https://plus-doc.dromara.org/#/' }, { logo: 'https://demo.orangeforms.com/img/login_logo2.424461a3.png', title: '免费代码生成工具', desc: '卓越的代码生成能力,全优的代码生成质量', link: 'https://www.orangeforms.com/' } + ] \ No newline at end of file -- Gitee From 932b83eb6c72160f5d4505f5be09ef4a5156b62b Mon Sep 17 00:00:00 2001 From: ZhengJin Date: Mon, 14 Oct 2024 17:09:06 +0800 Subject: [PATCH 2/6] fix #108 --- .../github/linpeilie/mapstruct/MapstructAutoConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java index 28c7a06..47f1126 100644 --- a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java +++ b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java @@ -25,7 +25,7 @@ public class MapstructAutoConfiguration { } @Bean - public SpringContextUtils springContextUtils() { + public static SpringContextUtils springContextUtils() { return new SpringContextUtils(); } -- Gitee From fff9461d35ac5a217b4d56f9b86f8e1956f7d482 Mon Sep 17 00:00:00 2001 From: fingerfrings Date: Thu, 14 Nov 2024 02:05:14 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat(processor):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=9C=A8=E6=B3=A8=E8=A7=A3=E4=B8=8A=E4=BD=BF=E7=94=A8=20@AutoM?= =?UTF-8?q?apping-=20=E6=96=B0=E5=A2=9E=E5=A4=84=E7=90=86=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E4=B8=8A=E5=AD=98=E5=9C=A8=20@AutoMapping=20=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20-=20=E4=BF=AE=E6=94=B9=20@AutoMapping=20?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=AF=B9=20Elemen?= =?UTF-8?q?tType.ANNOTATION=5FTYPE=20=E7=9A=84=E6=94=AF=E6=8C=81=20?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=AE=9E=E7=8E=B0=E5=A6=82=E4=B8=8B=E6=95=88?= =?UTF-8?q?=E6=9E=9C=EF=BC=9A=20//=E6=96=B0=E5=A2=9Edto=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=EF=BC=8C=E8=87=AA=E5=8A=A8=E5=B0=86=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E7=94=A8=E6=88=B7=E6=98=A0=E5=B0=84=E5=88=B0=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E4=BA=BA=E5=AD=97=E6=AE=B5=20@AutoMapping(source=20?= =?UTF-8?q?=3D=20"operatorUserId",=20target=20=3D=20"createBy")=20public?= =?UTF-8?q?=20@interface=20CreateMapper=20{=20}=20@AutoMapping(source=20?= =?UTF-8?q?=3D=20"operatorUserId",=20target=20=3D=20"createBy")?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit // 更新dto使用注解,自动将当前用户映射到updateBy字段 @AutoMapping(source = "operatorUserId", target = "updateBy") public @interface UpdateMapper{ } 这样就可以将基类中的operatorUserId根据dto的不同,映射到对应的字段 --- .../processor/AutoMapperProcessor.java | 34 ++++++++++++++++--- .../linpeilie/annotations/AutoMapping.java | 2 +- 2 files changed, 31 insertions(+), 5 deletions(-) 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 978a4d9..87158aa 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 @@ -57,10 +57,8 @@ import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedOptions; import javax.lang.model.SourceVersion; -import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.ExecutableElement; -import javax.lang.model.element.TypeElement; +import javax.lang.model.element.*; +import javax.lang.model.type.DeclaredType; import javax.lang.model.type.MirroredTypeException; import javax.lang.model.type.MirroredTypesException; import javax.lang.model.type.TypeMirror; @@ -990,6 +988,8 @@ public class AutoMapperProcessor extends AbstractProcessor { return list; } + list.addAll(buildMirrorAnno(autoMapperEle)); + for (Element ele : autoMapperEle.getEnclosedElements()) { if (ele.getKind() != ElementKind.FIELD && ele.getKind() != ElementKind.METHOD) { continue; @@ -1010,6 +1010,32 @@ public class AutoMapperProcessor extends AbstractProcessor { list.removeIf(Objects::isNull); return list; } + /** + * 处理注解上存在@AutoMapping的情况 + * + * @param element element + */ + private List buildMirrorAnno(final TypeElement element) { + List list = new ArrayList<>(); + List allAnnotationMirrors = processingEnv.getElementUtils().getAllAnnotationMirrors(element); + for (AnnotationMirror annotationMirror : allAnnotationMirrors) { + DeclaredType annotationType = annotationMirror.getAnnotationType(); + TypeElement annotationElement = (TypeElement) annotationType.asElement(); + if (annotationElement == null) { + continue; + } + AutoMappingGem autoMappingGem = AutoMappingGem.instanceOn(annotationElement); + if (autoMappingGem != null && autoMappingGem.isValid()) { + list.add(buildAutoMappingMetadata(autoMappingGem, element)); + } + AutoMappingsGem autoMappingsGem = AutoMappingsGem.instanceOn(element); + if (autoMappingsGem != null && autoMappingsGem.isValid()) { + autoMappingsGem.value().get().forEach(a -> list.add(buildAutoMappingMetadata(a, element))); + } + } + return list; + } + private AutoMappingMetadata buildAutoMappingMetadata(AutoMappingGem autoMappingGem, Element ele) { ClassName targetClass = transToClassName(autoMappingGem.targetClass().get()); 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 93166fa..69578e8 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 @@ -18,7 +18,7 @@ import org.mapstruct.control.MappingControl; import static org.mapstruct.NullValueCheckStrategy.ON_IMPLICIT_CONVERSION; -@Target({ElementType.FIELD, ElementType.METHOD}) +@Target({ElementType.FIELD, ElementType.METHOD,ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.CLASS) public @interface AutoMapping { -- Gitee From e01776d00c9cc50e11a32d444c2904f1d347e738 Mon Sep 17 00:00:00 2001 From: linpeilie Date: Sun, 17 Nov 2024 14:35:54 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=94=A8=E4=BE=8B=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20SpringContextUtils=20=E7=B1=BB=E5=90=8D?= =?UTF-8?q?=E4=B8=BA=20SpringContextUtils4Msp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../linpeilie/me/annotation/CarCreate.java | 15 ++++++ .../linpeilie/me/annotation/CarDTO.java | 14 +++++ .../linpeilie/me/annotation/CarUpdate.java | 15 ++++++ .../linpeilie/me/annotation/CreateMapper.java | 7 +++ .../linpeilie/me/annotation/UpdateMapper.java | 8 +++ .../linpeilie/AutoMappingAnnotationTest.java | 53 +++++++++++++++++++ .../processor/SpringComponentProcessor.java | 2 +- .../SpringDelayInjectMapperReference.ftl | 2 +- .../mapstruct/MapstructAutoConfiguration.java | 4 +- ...Utils.java => SpringContextUtils4Msp.java} | 8 +-- 10 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarCreate.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarDTO.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarUpdate.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CreateMapper.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/UpdateMapper.java create mode 100644 example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java rename mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/{SpringContextUtils.java => SpringContextUtils4Msp.java} (89%) diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarCreate.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarCreate.java new file mode 100644 index 0000000..80f8661 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarCreate.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@CreateMapper +@AutoMapper(target = CarDTO.class) +public class CarCreate { + + private String name; + + private String operatorUserId; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarDTO.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarDTO.java new file mode 100644 index 0000000..c990cfe --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarDTO.java @@ -0,0 +1,14 @@ +package io.github.linpeilie.me.annotation; + +import lombok.Data; + +@Data +public class CarDTO { + + private String name; + + private String createBy; + + private String updateBy; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarUpdate.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarUpdate.java new file mode 100644 index 0000000..47e65a8 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarUpdate.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@UpdateMapper +@AutoMapper(target = CarDTO.class) +public class CarUpdate { + + private String name; + + private String operatorUserId; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CreateMapper.java new file mode 100644 index 0000000..90d04fc --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CreateMapper.java @@ -0,0 +1,7 @@ +package io.github.linpeilie.me.annotation; + +import io.github.linpeilie.annotations.AutoMapping; + +@AutoMapping(source = "operatorUserId", target = "createBy") +public @interface CreateMapper { +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/UpdateMapper.java new file mode 100644 index 0000000..b5e3a5c --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/UpdateMapper.java @@ -0,0 +1,8 @@ +package io.github.linpeilie.me.annotation; + +import io.github.linpeilie.annotations.AutoMapping; + +@AutoMapping(source = "operatorUserId", target = "updateBy") +public @interface UpdateMapper { + +} diff --git a/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java b/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java new file mode 100644 index 0000000..f72ef51 --- /dev/null +++ b/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java @@ -0,0 +1,53 @@ +package io.github.linpeilie; + +import io.github.linpeilie.me.annotation.CarCreate; +import io.github.linpeilie.me.annotation.CarDTO; +import io.github.linpeilie.me.annotation.CarUpdate; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.util.Assert; + +@Slf4j +@SpringBootTest(classes = Application.class) +public class AutoMappingAnnotationTest { + + @Autowired + private Converter converter; + + @Test + public void test() { + CarCreate carCreate = new CarCreate(); + carCreate.setName("create car"); + carCreate.setOperatorUserId("create user id...."); + + CarDTO car1 = converter.convert(carCreate, CarDTO.class); + log.info("create user : {}", car1); + Assert.isTrue(car1.getName().equals("create car"), "create user name is empty"); + Assert.isTrue(car1.getCreateBy().equals("create user id...."), "create user id is empty"); + + CarCreate carCreate1 = converter.convert(car1, CarCreate.class); + Assert.isTrue(carCreate1.getName().equals("create car"), "create user name is empty"); + Assert.isTrue(carCreate1.getOperatorUserId().equals("create user id...."), "create user id is empty"); + + + CarUpdate carUpdate = new CarUpdate(); + carUpdate.setName("update car"); + carUpdate.setOperatorUserId("update user id...."); + + CarDTO car2 = converter.convert(carUpdate, CarDTO.class); + log.info("update user : {}", car2); + Assert.isTrue(car2.getName().equals("update car"), "update user name is empty"); + Assert.isTrue(car2.getUpdateBy().equals("update user id...."), "update user id is empty"); + + CarUpdate updateCar1 = converter.convert(car2, CarUpdate.class); + Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty"); + Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty"); + + + + } + + +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/enhance/processor/SpringComponentProcessor.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/enhance/processor/SpringComponentProcessor.java index 8d74245..dd385e7 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/enhance/processor/SpringComponentProcessor.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/enhance/processor/SpringComponentProcessor.java @@ -43,6 +43,6 @@ public class SpringComponentProcessor extends AnnotationBasedComponentModelProce InjectionStrategyGem injectionStrategy) { return new SpringDelayInjectMapperReference(originalReference.getType(), originalReference.getVariableName(), originalReference.isUsed(), - getTypeFactory().getType("io.github.linpeilie.mapstruct.SpringContextUtils")); + getTypeFactory().getType("io.github.linpeilie.mapstruct.SpringContextUtils4Msp")); } } diff --git a/mapstruct-plus-processor/src/main/resources/io/github/linpeilie/processor/enhance/model/SpringDelayInjectMapperReference.ftl b/mapstruct-plus-processor/src/main/resources/io/github/linpeilie/processor/enhance/model/SpringDelayInjectMapperReference.ftl index f84aa7d..6ad6e1b 100644 --- a/mapstruct-plus-processor/src/main/resources/io/github/linpeilie/processor/enhance/model/SpringDelayInjectMapperReference.ftl +++ b/mapstruct-plus-processor/src/main/resources/io/github/linpeilie/processor/enhance/model/SpringDelayInjectMapperReference.ftl @@ -1,2 +1,2 @@ <#-- @ftlvariable name="" type="io.github.linpeilie.processor.enhance.model.SpringDelayInjectMapperReference" --> -private <@includeModel object=type/> ${variableName} = SpringContextUtils.getBean("${variableName}", <@includeModel object=type/>.class); \ No newline at end of file +private <@includeModel object=type/> ${variableName} = SpringContextUtils4Msp.getBean("${variableName}", <@includeModel object=type/>.class); \ No newline at end of file diff --git a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java index 47f1126..cc6bd01 100644 --- a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java +++ b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java @@ -25,8 +25,8 @@ public class MapstructAutoConfiguration { } @Bean - public static SpringContextUtils springContextUtils() { - return new SpringContextUtils(); + public static SpringContextUtils4Msp springContextUtils() { + return new SpringContextUtils4Msp(); } } diff --git a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils.java b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils4Msp.java similarity index 89% rename from mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils.java rename to mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils4Msp.java index bdb201a..a71f8d6 100644 --- a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils.java +++ b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils4Msp.java @@ -9,20 +9,20 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; -public class SpringContextUtils implements BeanFactoryPostProcessor, ApplicationContextAware { +public class SpringContextUtils4Msp implements BeanFactoryPostProcessor, ApplicationContextAware { private static ConfigurableListableBeanFactory beanFactory; private static ApplicationContext applicationContext; - public SpringContextUtils() { + public SpringContextUtils4Msp() { } public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - SpringContextUtils.beanFactory = beanFactory; + SpringContextUtils4Msp.beanFactory = beanFactory; } public void setApplicationContext(ApplicationContext applicationContext) { - SpringContextUtils.applicationContext = applicationContext; + SpringContextUtils4Msp.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { -- Gitee From 9a320bcbc9529fbd8ea4fbab22b79bbaabb883f0 Mon Sep 17 00:00:00 2001 From: linpeilie Date: Sun, 17 Nov 2024 14:48:34 +0800 Subject: [PATCH 5/6] release 1.4.6 --- README.md | 2 +- docs/README.md | 10 ++++++++-- docs/en/README.md | 11 +++++++++-- docs/en/release/log.md | 6 ++++++ docs/release/log.md | 6 ++++++ example/pom.xml | 2 +- pom.xml | 2 +- 7 files changed, 32 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 017740f..b87831d 100644 --- a/README.md +++ b/README.md @@ -188,7 +188,7 @@ public class User { ```xml - 1.4.5 + 1.4.6 diff --git a/docs/README.md b/docs/README.md index 365eb61..4affaf1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -61,18 +61,24 @@ footer: io.github.linpeilie mapstruct-plus-spring-boot-starter - 1.4.5 + 1.4.6 ``` - gradle ```groovy -implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-starter', version: '1.4.5' +implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-starter', version: '1.4.6' ``` ## 更新日志 +### 1.4.6 + +- 修改 `SpringContextUtils` 类名,防止与其他项目类名冲突; +- fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory 方法改为静态; +- [pr](https://github.com/linpeilie/mapstruct-plus/pull/114) : 增加注解批量增加 AutoMapping 特性; + ### 1.4.5 - fix: 修复 `ReverseAutoMappings` 配置不生效的问题 diff --git a/docs/en/README.md b/docs/en/README.md index 51c017f..033c1e3 100644 --- a/docs/en/README.md +++ b/docs/en/README.md @@ -58,18 +58,25 @@ fotter: io.github.linpeilie mapstruct-plus-spring-boot-starter - 1.4.5 + 1.4.6 ``` - gradle ```groovy -implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-starter', version: '1.4.5' +implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-starter', version: '1.4.6' ``` ## Change Log +### 1.4.6 + +- Modify the `SpringContextUtils` class name to prevent conflicts with other project class names; +- fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory method changes to static; +- [PR](https://github.com/linpeilie/mapstruct-plus/pull/114) : increase annotation batch `AutoMapping` features. + + ### 1.4.5 - fix: fiexed an issue where the `ReverseAutoMapping` configuration did not take effect. diff --git a/docs/en/release/log.md b/docs/en/release/log.md index d928690..4ae285f 100644 --- a/docs/en/release/log.md +++ b/docs/en/release/log.md @@ -6,6 +6,12 @@ category: description: MapStructPlus release log --- +### 1.4.6 + +- Modify the `SpringContextUtils` class name to prevent conflicts with other project class names; +- fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory method changes to static; +- [PR](https://github.com/linpeilie/mapstruct-plus/pull/114) : increase annotation batch `AutoMapping` features. + ### 1.4.5 - fix: fiexed an issue where the `ReverseAutoMapping` configuration did not take effect. diff --git a/docs/release/log.md b/docs/release/log.md index d1f1b89..af1c1ab 100644 --- a/docs/release/log.md +++ b/docs/release/log.md @@ -6,6 +6,12 @@ category: description: MapStructPlus release log --- +### 1.4.6 + +- 修改 `SpringContextUtils` 类名,防止与其他项目类名冲突; +- fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory 方法改为静态; +- [pr](https://github.com/linpeilie/mapstruct-plus/pull/114) : 增加注解批量增加 AutoMapping 特性; + ### 1.4.5 - fix: 修复 `ReverseAutoMappings` 配置不生效的问题 diff --git a/example/pom.xml b/example/pom.xml index 524c0b8..c822a19 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -18,7 +18,7 @@ UTF-8 1.5.1.Final - 1.4.5 + 1.4.6 1.18.22 5.8.26 32.1.3-jre diff --git a/pom.xml b/pom.xml index 0a1543c..f8b9a75 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ - 1.4.5 + 1.4.6 8 8 UTF-8 -- Gitee From 9058320c09ba35b3b01ecb0cbac7fffc22294448 Mon Sep 17 00:00:00 2001 From: linpeilie Date: Sun, 17 Nov 2024 15:37:31 +0800 Subject: [PATCH 6/6] =?UTF-8?q?AutoMappings=E3=80=81ReverseAutoMapping?= =?UTF-8?q?=E3=80=81ReverseAutoMappings=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=9C=A8=E6=B3=A8=E8=A7=A3=E4=B8=8A=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- docs/en/README.md | 2 +- docs/en/release/log.md | 2 +- docs/release/log.md | 2 +- .../me/annotation/{ => am}/CarCreate.java | 2 +- .../me/annotation/{ => am}/CarDTO.java | 2 +- .../me/annotation/{ => am}/CarUpdate.java | 2 +- .../me/annotation/{ => am}/CreateMapper.java | 2 +- .../me/annotation/{ => am}/UpdateMapper.java | 2 +- .../me/annotation/ams/CarCreate2.java | 15 +++ .../linpeilie/me/annotation/ams/CarDTO2.java | 14 +++ .../me/annotation/ams/CarUpdate2.java | 15 +++ .../me/annotation/ams/CreateMapper.java | 10 ++ .../me/annotation/ams/UpdateMapper.java | 11 ++ .../me/annotation/ram/CarCreate1.java | 15 +++ .../linpeilie/me/annotation/ram/CarDTO1.java | 14 +++ .../me/annotation/ram/CarUpdate1.java | 15 +++ .../me/annotation/ram/CreateMapper.java | 9 ++ .../me/annotation/ram/UpdateMapper.java | 10 ++ .../me/annotation/rams/CarCreate4.java | 15 +++ .../linpeilie/me/annotation/rams/CarDTO4.java | 14 +++ .../me/annotation/rams/CarUpdate4.java | 15 +++ .../me/annotation/rams/CreateMapper.java | 15 +++ .../me/annotation/rams/UpdateMapper.java | 14 +++ .../linpeilie/AutoMappingAnnotationTest.java | 102 +++++++++++++++++- .../processor/AutoMapperProcessor.java | 38 +++++-- .../linpeilie/annotations/AutoMappings.java | 2 +- .../annotations/ReverseAutoMapping.java | 2 +- .../annotations/ReverseAutoMappings.java | 2 +- 29 files changed, 341 insertions(+), 24 deletions(-) rename example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/{ => am}/CarCreate.java (82%) rename example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/{ => am}/CarDTO.java (75%) rename example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/{ => am}/CarUpdate.java (82%) rename example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/{ => am}/CreateMapper.java (76%) rename example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/{ => am}/UpdateMapper.java (76%) create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarCreate2.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarDTO2.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarUpdate2.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CreateMapper.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/UpdateMapper.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarCreate1.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarDTO1.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarUpdate1.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CreateMapper.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/UpdateMapper.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarCreate4.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarDTO4.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarUpdate4.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CreateMapper.java create mode 100644 example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/UpdateMapper.java diff --git a/docs/README.md b/docs/README.md index 4affaf1..7685f50 100644 --- a/docs/README.md +++ b/docs/README.md @@ -77,7 +77,7 @@ implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-s - 修改 `SpringContextUtils` 类名,防止与其他项目类名冲突; - fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory 方法改为静态; -- [pr](https://github.com/linpeilie/mapstruct-plus/pull/114) : 增加注解批量增加 AutoMapping 特性; +- [pr](https://github.com/linpeilie/mapstruct-plus/pull/114) : 增加注解批量增加 `AutoMapping`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` 特性; ### 1.4.5 diff --git a/docs/en/README.md b/docs/en/README.md index 033c1e3..d3063e7 100644 --- a/docs/en/README.md +++ b/docs/en/README.md @@ -74,7 +74,7 @@ implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-s - Modify the `SpringContextUtils` class name to prevent conflicts with other project class names; - fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory method changes to static; -- [PR](https://github.com/linpeilie/mapstruct-plus/pull/114) : increase annotation batch `AutoMapping` features. +- [PR](https://github.com/linpeilie/mapstruct-plus/pull/114) : increase annotation batch `AutoMapping`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` features. ### 1.4.5 diff --git a/docs/en/release/log.md b/docs/en/release/log.md index 4ae285f..d7b0a78 100644 --- a/docs/en/release/log.md +++ b/docs/en/release/log.md @@ -10,7 +10,7 @@ description: MapStructPlus release log - Modify the `SpringContextUtils` class name to prevent conflicts with other project class names; - fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory method changes to static; -- [PR](https://github.com/linpeilie/mapstruct-plus/pull/114) : increase annotation batch `AutoMapping` features. +- [PR](https://github.com/linpeilie/mapstruct-plus/pull/114) : increase annotation batch `AutoMapping`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` features. ### 1.4.5 diff --git a/docs/release/log.md b/docs/release/log.md index af1c1ab..4ca52a4 100644 --- a/docs/release/log.md +++ b/docs/release/log.md @@ -10,7 +10,7 @@ description: MapStructPlus release log - 修改 `SpringContextUtils` 类名,防止与其他项目类名冲突; - fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory 方法改为静态; -- [pr](https://github.com/linpeilie/mapstruct-plus/pull/114) : 增加注解批量增加 AutoMapping 特性; +- [pr](https://github.com/linpeilie/mapstruct-plus/pull/114) : 增加注解批量增加 `AutoMapping`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` 特性; ### 1.4.5 diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarCreate.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java similarity index 82% rename from example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarCreate.java rename to example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java index 80f8661..9c5d4eb 100644 --- a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarCreate.java +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java @@ -1,4 +1,4 @@ -package io.github.linpeilie.me.annotation; +package io.github.linpeilie.me.annotation.am; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarDTO.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarDTO.java similarity index 75% rename from example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarDTO.java rename to example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarDTO.java index c990cfe..9571921 100644 --- a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarDTO.java +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarDTO.java @@ -1,4 +1,4 @@ -package io.github.linpeilie.me.annotation; +package io.github.linpeilie.me.annotation.am; import lombok.Data; diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarUpdate.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarUpdate.java similarity index 82% rename from example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarUpdate.java rename to example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarUpdate.java index 47e65a8..8b5c525 100644 --- a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CarUpdate.java +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarUpdate.java @@ -1,4 +1,4 @@ -package io.github.linpeilie.me.annotation; +package io.github.linpeilie.me.annotation.am; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CreateMapper.java similarity index 76% rename from example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CreateMapper.java rename to example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CreateMapper.java index 90d04fc..9211bd2 100644 --- a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/CreateMapper.java +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CreateMapper.java @@ -1,4 +1,4 @@ -package io.github.linpeilie.me.annotation; +package io.github.linpeilie.me.annotation.am; import io.github.linpeilie.annotations.AutoMapping; diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/UpdateMapper.java similarity index 76% rename from example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/UpdateMapper.java rename to example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/UpdateMapper.java index b5e3a5c..85abd69 100644 --- a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/UpdateMapper.java +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/UpdateMapper.java @@ -1,4 +1,4 @@ -package io.github.linpeilie.me.annotation; +package io.github.linpeilie.me.annotation.am; import io.github.linpeilie.annotations.AutoMapping; diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarCreate2.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarCreate2.java new file mode 100644 index 0000000..157b673 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarCreate2.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.ams; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@CreateMapper +@AutoMapper(target = CarDTO2.class) +public class CarCreate2 { + + private String name; + + private String operatorUserId; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarDTO2.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarDTO2.java new file mode 100644 index 0000000..5ffb1c5 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarDTO2.java @@ -0,0 +1,14 @@ +package io.github.linpeilie.me.annotation.ams; + +import lombok.Data; + +@Data +public class CarDTO2 { + + private String name; + + private String createBy; + + private String updateBy; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarUpdate2.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarUpdate2.java new file mode 100644 index 0000000..70025a7 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarUpdate2.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.ams; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@UpdateMapper +@AutoMapper(target = CarDTO2.class) +public class CarUpdate2 { + + private String name; + + private String operatorUserId; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CreateMapper.java new file mode 100644 index 0000000..7240c38 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CreateMapper.java @@ -0,0 +1,10 @@ +package io.github.linpeilie.me.annotation.ams; + +import io.github.linpeilie.annotations.AutoMapping; +import io.github.linpeilie.annotations.AutoMappings; + +@AutoMappings({ + @AutoMapping(source = "operatorUserId", target = "createBy") +}) +public @interface CreateMapper { +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/UpdateMapper.java new file mode 100644 index 0000000..db9546f --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/UpdateMapper.java @@ -0,0 +1,11 @@ +package io.github.linpeilie.me.annotation.ams; + +import io.github.linpeilie.annotations.AutoMapping; +import io.github.linpeilie.annotations.AutoMappings; + +@AutoMappings({ + @AutoMapping(source = "operatorUserId", target = "updateBy") +}) +public @interface UpdateMapper { + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarCreate1.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarCreate1.java new file mode 100644 index 0000000..9233403 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarCreate1.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.ram; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@CreateMapper +@AutoMapper(target = CarDTO1.class) +public class CarCreate1 { + + private String name; + + private String operatorUserId; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarDTO1.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarDTO1.java new file mode 100644 index 0000000..050cc3c --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarDTO1.java @@ -0,0 +1,14 @@ +package io.github.linpeilie.me.annotation.ram; + +import lombok.Data; + +@Data +public class CarDTO1 { + + private String name; + + private String createBy; + + private String updateBy; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarUpdate1.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarUpdate1.java new file mode 100644 index 0000000..1d63208 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarUpdate1.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.ram; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@UpdateMapper +@AutoMapper(target = CarDTO1.class) +public class CarUpdate1 { + + private String name; + + private String operatorUserId; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CreateMapper.java new file mode 100644 index 0000000..e969e28 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CreateMapper.java @@ -0,0 +1,9 @@ +package io.github.linpeilie.me.annotation.ram; + +import io.github.linpeilie.annotations.AutoMapping; +import io.github.linpeilie.annotations.ReverseAutoMapping; + +@ReverseAutoMapping(source = "createBy", target = "operatorUserId") +@AutoMapping(source = "operatorUserId", target = "createBy") +public @interface CreateMapper { +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/UpdateMapper.java new file mode 100644 index 0000000..e723aa9 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/UpdateMapper.java @@ -0,0 +1,10 @@ +package io.github.linpeilie.me.annotation.ram; + +import io.github.linpeilie.annotations.AutoMapping; +import io.github.linpeilie.annotations.ReverseAutoMapping; + +@ReverseAutoMapping(source = "updateBy", target = "operatorUserId") +@AutoMapping(source = "operatorUserId", target = "updateBy") +public @interface UpdateMapper { + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarCreate4.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarCreate4.java new file mode 100644 index 0000000..c79d275 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarCreate4.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.rams; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@CreateMapper +@AutoMapper(target = CarDTO4.class) +public class CarCreate4 { + + private String name; + + private String operatorUserId; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarDTO4.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarDTO4.java new file mode 100644 index 0000000..09e8216 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarDTO4.java @@ -0,0 +1,14 @@ +package io.github.linpeilie.me.annotation.rams; + +import lombok.Data; + +@Data +public class CarDTO4 { + + private String name; + + private String createBy; + + private String updateBy; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarUpdate4.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarUpdate4.java new file mode 100644 index 0000000..d51f54f --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarUpdate4.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.rams; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@UpdateMapper +@AutoMapper(target = CarDTO4.class) +public class CarUpdate4 { + + private String name; + + private String operatorUserId; + +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CreateMapper.java new file mode 100644 index 0000000..368393d --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CreateMapper.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.rams; + +import io.github.linpeilie.annotations.AutoMapping; +import io.github.linpeilie.annotations.AutoMappings; +import io.github.linpeilie.annotations.ReverseAutoMapping; +import io.github.linpeilie.annotations.ReverseAutoMappings; + +@ReverseAutoMappings({ + @ReverseAutoMapping(source = "createBy", target = "operatorUserId") +}) +@AutoMappings({ + @AutoMapping(source = "operatorUserId", target = "createBy") +}) +public @interface CreateMapper { +} diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/UpdateMapper.java new file mode 100644 index 0000000..76a35f6 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/UpdateMapper.java @@ -0,0 +1,14 @@ +package io.github.linpeilie.me.annotation.rams; + +import io.github.linpeilie.annotations.AutoMapping; +import io.github.linpeilie.annotations.AutoMappings; +import io.github.linpeilie.annotations.ReverseAutoMapping; +import io.github.linpeilie.annotations.ReverseAutoMappings; + +@ReverseAutoMappings({ + @ReverseAutoMapping(source = "updateBy", target = "operatorUserId")}) +@AutoMappings({ + @AutoMapping(source = "operatorUserId", target = "updateBy")}) +public @interface UpdateMapper { + +} diff --git a/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java b/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java index f72ef51..5d6c200 100644 --- a/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java +++ b/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java @@ -1,8 +1,17 @@ package io.github.linpeilie; -import io.github.linpeilie.me.annotation.CarCreate; -import io.github.linpeilie.me.annotation.CarDTO; -import io.github.linpeilie.me.annotation.CarUpdate; +import io.github.linpeilie.me.annotation.am.CarCreate; +import io.github.linpeilie.me.annotation.am.CarDTO; +import io.github.linpeilie.me.annotation.am.CarUpdate; +import io.github.linpeilie.me.annotation.ams.CarCreate2; +import io.github.linpeilie.me.annotation.ams.CarDTO2; +import io.github.linpeilie.me.annotation.ams.CarUpdate2; +import io.github.linpeilie.me.annotation.ram.CarCreate1; +import io.github.linpeilie.me.annotation.ram.CarDTO1; +import io.github.linpeilie.me.annotation.ram.CarUpdate1; +import io.github.linpeilie.me.annotation.rams.CarCreate4; +import io.github.linpeilie.me.annotation.rams.CarDTO4; +import io.github.linpeilie.me.annotation.rams.CarUpdate4; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -17,7 +26,7 @@ public class AutoMappingAnnotationTest { private Converter converter; @Test - public void test() { + public void autoMappingTest() { CarCreate carCreate = new CarCreate(); carCreate.setName("create car"); carCreate.setOperatorUserId("create user id...."); @@ -44,9 +53,94 @@ public class AutoMappingAnnotationTest { CarUpdate updateCar1 = converter.convert(car2, CarUpdate.class); Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty"); Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty"); + } + + @Test + public void reverseAutoMappingTest() { + CarCreate1 carCreate = new CarCreate1(); + carCreate.setName("create car"); + carCreate.setOperatorUserId("create user id...."); + + CarDTO1 car1 = converter.convert(carCreate, CarDTO1.class); + log.info("create user : {}", car1); + Assert.isTrue(car1.getName().equals("create car"), "create user name is empty"); + Assert.isTrue(car1.getCreateBy().equals("create user id...."), "create user id is empty"); + + CarCreate1 carCreate1 = converter.convert(car1, CarCreate1.class); + Assert.isTrue(carCreate1.getName().equals("create car"), "create user name is empty"); + Assert.isTrue(carCreate1.getOperatorUserId().equals("create user id...."), "create user id is empty"); + + + CarUpdate1 carUpdate = new CarUpdate1(); + carUpdate.setName("update car"); + carUpdate.setOperatorUserId("update user id...."); + + CarDTO1 car2 = converter.convert(carUpdate, CarDTO1.class); + log.info("update user : {}", car2); + Assert.isTrue(car2.getName().equals("update car"), "update user name is empty"); + Assert.isTrue(car2.getUpdateBy().equals("update user id...."), "update user id is empty"); + + CarUpdate1 updateCar1 = converter.convert(car2, CarUpdate1.class); + Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty"); + Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty"); + } + @Test + public void autoMappingsTest() { + CarCreate2 carCreate = new CarCreate2(); + carCreate.setName("create car"); + carCreate.setOperatorUserId("create user id...."); + + CarDTO2 car1 = converter.convert(carCreate, CarDTO2.class); + log.info("create user : {}", car1); + Assert.isTrue(car1.getName().equals("create car"), "create user name is empty"); + Assert.isTrue(car1.getCreateBy().equals("create user id...."), "create user id is empty"); + + CarCreate2 carCreate1 = converter.convert(car1, CarCreate2.class); + Assert.isTrue(carCreate1.getName().equals("create car"), "create user name is empty"); + Assert.isTrue(carCreate1.getOperatorUserId().equals("create user id...."), "create user id is empty"); + + + CarUpdate2 carUpdate = new CarUpdate2(); + carUpdate.setName("update car"); + carUpdate.setOperatorUserId("update user id...."); + + CarDTO2 car2 = converter.convert(carUpdate, CarDTO2.class); + log.info("update user : {}", car2); + Assert.isTrue(car2.getName().equals("update car"), "update user name is empty"); + Assert.isTrue(car2.getUpdateBy().equals("update user id...."), "update user id is empty"); + + CarUpdate2 updateCar1 = converter.convert(car2, CarUpdate2.class); + Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty"); + Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty"); + } + @Test + public void reverseAutoMappingsTest() { + CarCreate4 carCreate = new CarCreate4(); + carCreate.setName("create car"); + carCreate.setOperatorUserId("create user id...."); + + CarDTO4 car1 = converter.convert(carCreate, CarDTO4.class); + log.info("create user : {}", car1); + Assert.isTrue(car1.getName().equals("create car"), "create user name is empty"); + Assert.isTrue(car1.getCreateBy().equals("create user id...."), "create user id is empty"); + + CarCreate4 carCreate1 = converter.convert(car1, CarCreate4.class); + Assert.isTrue(carCreate1.getName().equals("create car"), "create user name is empty"); + Assert.isTrue(carCreate1.getOperatorUserId().equals("create user id...."), "create user id is empty"); + CarUpdate4 carUpdate = new CarUpdate4(); + carUpdate.setName("update car"); + carUpdate.setOperatorUserId("update user id...."); + + CarDTO4 car2 = converter.convert(carUpdate, CarDTO4.class); + log.info("update user : {}", car2); + Assert.isTrue(car2.getName().equals("update car"), "update user name is empty"); + Assert.isTrue(car2.getUpdateBy().equals("update user id...."), "update user id is empty"); + CarUpdate4 updateCar1 = converter.convert(car2, CarUpdate4.class); + Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty"); + Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty"); } 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 87158aa..754ff13 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 @@ -4,10 +4,10 @@ import com.squareup.javapoet.ArrayTypeName; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.ParameterizedTypeName; import com.squareup.javapoet.TypeName; -import io.github.linpeilie.ComponentModelConstant; import io.github.linpeilie.annotations.AutoEnumMapper; import io.github.linpeilie.annotations.AutoMapMapper; import io.github.linpeilie.annotations.ComponentModelConfig; +import io.github.linpeilie.annotations.ReverseAutoMapping; import io.github.linpeilie.processor.gem.AutoMapperGem; import io.github.linpeilie.processor.gem.AutoMappersGem; import io.github.linpeilie.processor.gem.AutoMappingGem; @@ -18,10 +18,7 @@ import io.github.linpeilie.processor.gem.ReverseAutoMappingGem; import io.github.linpeilie.processor.gem.ReverseAutoMappingsGem; import io.github.linpeilie.processor.generator.AutoEnumMapperGenerator; import io.github.linpeilie.processor.generator.AutoMapperGenerator; -import io.github.linpeilie.processor.generator.DefaultAdapterMapperGenerator; import io.github.linpeilie.processor.generator.MapperConfigGenerator; -import io.github.linpeilie.processor.generator.SolonAdapterMapperGenerator; -import io.github.linpeilie.processor.generator.SpringAdapterMapperGenerator; import io.github.linpeilie.processor.metadata.AbstractAdapterMethodMetadata; import io.github.linpeilie.processor.metadata.AdapterEnumMethodMetadata; import io.github.linpeilie.processor.metadata.AdapterMapMethodMetadata; @@ -63,7 +60,6 @@ import javax.lang.model.type.MirroredTypeException; import javax.lang.model.type.MirroredTypesException; import javax.lang.model.type.TypeMirror; import javax.tools.Diagnostic; -import org.mapstruct.MappingConstants; import static io.github.linpeilie.processor.ProcessorOptions.ADAPTER_CLASS_NAME; import static io.github.linpeilie.processor.ProcessorOptions.ADAPTER_PACKAGE; @@ -907,6 +903,9 @@ public class AutoMapperProcessor extends AbstractProcessor { if (!ele.getKind().isClass() && !ele.getKind().isInterface()) { return list; } + + list.addAll(buildMirrorAnno4ReverseAutoMapping(ele)); + for (Element field : ele.getEnclosedElements()) { if (field.getKind() != ElementKind.FIELD && field.getKind() != ElementKind.METHOD) { continue; @@ -988,7 +987,7 @@ public class AutoMapperProcessor extends AbstractProcessor { return list; } - list.addAll(buildMirrorAnno(autoMapperEle)); + list.addAll(buildMirrorAnno4AutoMapping(autoMapperEle)); for (Element ele : autoMapperEle.getEnclosedElements()) { if (ele.getKind() != ElementKind.FIELD && ele.getKind() != ElementKind.METHOD) { @@ -1015,7 +1014,7 @@ public class AutoMapperProcessor extends AbstractProcessor { * * @param element element */ - private List buildMirrorAnno(final TypeElement element) { + private List buildMirrorAnno4AutoMapping(final TypeElement element) { List list = new ArrayList<>(); List allAnnotationMirrors = processingEnv.getElementUtils().getAllAnnotationMirrors(element); for (AnnotationMirror annotationMirror : allAnnotationMirrors) { @@ -1028,10 +1027,33 @@ public class AutoMapperProcessor extends AbstractProcessor { if (autoMappingGem != null && autoMappingGem.isValid()) { list.add(buildAutoMappingMetadata(autoMappingGem, element)); } - AutoMappingsGem autoMappingsGem = AutoMappingsGem.instanceOn(element); + AutoMappingsGem autoMappingsGem = AutoMappingsGem.instanceOn(annotationElement); if (autoMappingsGem != null && autoMappingsGem.isValid()) { autoMappingsGem.value().get().forEach(a -> list.add(buildAutoMappingMetadata(a, element))); } + + } + return list; + } + + private List buildMirrorAnno4ReverseAutoMapping(final TypeElement element) { + List list = new ArrayList<>(); + List allAnnotationMirrors = processingEnv.getElementUtils().getAllAnnotationMirrors(element); + for (AnnotationMirror annotationMirror : allAnnotationMirrors) { + DeclaredType annotationType = annotationMirror.getAnnotationType(); + TypeElement annotationElement = (TypeElement) annotationType.asElement(); + if (annotationElement == null) { + continue; + } + ReverseAutoMappingGem reverseAutoMapping = ReverseAutoMappingGem.instanceOn(annotationElement); + if (reverseAutoMapping != null && reverseAutoMapping.isValid()) { + list.add(buildAutoMappingMetadata(reverseAutoMapping, element)); + } + ReverseAutoMappingsGem reverseAutoMappings = ReverseAutoMappingsGem.instanceOn(annotationElement); + if (reverseAutoMappings != null && reverseAutoMappings.isValid()) { + reverseAutoMappings.value().get().forEach(a -> list.add(buildAutoMappingMetadata(a, element))); + } + } return list; } diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMappings.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMappings.java index d8f0cb6..c7e38cb 100644 --- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMappings.java +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMappings.java @@ -5,7 +5,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target({ElementType.FIELD, ElementType.METHOD}) +@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.CLASS) public @interface AutoMappings { diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java index e90bb8b..eb3cdd7 100644 --- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java @@ -33,7 +33,7 @@ import static org.mapstruct.NullValueCheckStrategy.ON_IMPLICIT_CONVERSION; * * @author linpl */ -@Target({ElementType.FIELD, ElementType.METHOD}) +@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.CLASS) public @interface ReverseAutoMapping { diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMappings.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMappings.java index 47ea79c..d5726fd 100644 --- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMappings.java +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMappings.java @@ -5,7 +5,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target(ElementType.FIELD) +@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.CLASS) public @interface ReverseAutoMappings { -- Gitee