diff --git a/README.md b/README.md index 017740f4526b62ca4b213dc8b2b4af71c1d1bef9..b87831dbc782b34ea017b6c013b5d0b687e5db2e 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/.vuepress/components/links.ts b/docs/.vuepress/components/links.ts index 4ec415b51936180ef15e16827b6615c4cdee6a8c..b073abbef86db9601593774deb8fa1e602f10756 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 diff --git a/docs/README.md b/docs/README.md index 365eb6161636d220bdaa155450f1bdb1f2ccfa24..7685f503a464f3bc7f7921ebde3f1b273755464b 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`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` 特性; + ### 1.4.5 - fix: 修复 `ReverseAutoMappings` 配置不生效的问题 diff --git a/docs/en/README.md b/docs/en/README.md index 51c017f451a340f7f737b057bfb37eaf816eacd0..d3063e7411ad533c64c51d2b0c7ab7bc909ea51b 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`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` 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 d928690e3aa3fc4d99a82f26e6ee0d062d301b0b..d7b0a7832c2be7f5b81ac6b988657693824b1f4b 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`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` 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 d1f1b89305307f69322405f1f5b305a75591cfae..4ca52a406db5ebc86321175e76eef5752f180992 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`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` 特性; + ### 1.4.5 - fix: 修复 `ReverseAutoMappings` 配置不生效的问题 diff --git a/example/pom.xml b/example/pom.xml index 524c0b81ee63e6b3d4a8d3ead27a80f0b0c67507..c822a194ff442605236dce1ca6569d8d4499ac20 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/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java new file mode 100644 index 0000000000000000000000000000000000000000..9c5d4eb53a44aac5d7de5e082801802bbede931a --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.am; + +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/am/CarDTO.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..95719218629ca3001a422ec0d13b3473bf32c39b --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarDTO.java @@ -0,0 +1,14 @@ +package io.github.linpeilie.me.annotation.am; + +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/am/CarUpdate.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarUpdate.java new file mode 100644 index 0000000000000000000000000000000000000000..8b5c525494b9499e862a694ff368574a0e442b0a --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarUpdate.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.me.annotation.am; + +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/am/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CreateMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..9211bd2e8dbebdad0df11375fd61ecdce8b6856f --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CreateMapper.java @@ -0,0 +1,7 @@ +package io.github.linpeilie.me.annotation.am; + +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/am/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/UpdateMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..85abd6913cd621fd46d1e20f4a9d8c858e166859 --- /dev/null +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/UpdateMapper.java @@ -0,0 +1,8 @@ +package io.github.linpeilie.me.annotation.am; + +import io.github.linpeilie.annotations.AutoMapping; + +@AutoMapping(source = "operatorUserId", target = "updateBy") +public @interface UpdateMapper { + +} 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 0000000000000000000000000000000000000000..157b673cbfafd72afc2d35ecaae608fda988c339 --- /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 0000000000000000000000000000000000000000..5ffb1c52f288d0a0c8f048224ff855b39f10242f --- /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 0000000000000000000000000000000000000000..70025a7775d41ba51e729d257753c50a8744462e --- /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 0000000000000000000000000000000000000000..7240c3839d851c53f415e916673ef6989a6fba10 --- /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 0000000000000000000000000000000000000000..db9546f6467030617b58b7620c751788d07411ff --- /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 0000000000000000000000000000000000000000..92334037a887445869584076fa4aa69bf1a30354 --- /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 0000000000000000000000000000000000000000..050cc3c06edca02067ddd8c4658e26373e0de613 --- /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 0000000000000000000000000000000000000000..1d632082d7594788b8665f7821d69a0ca9dc8c71 --- /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 0000000000000000000000000000000000000000..e969e28070759fee812cd6d7b317181b30f28630 --- /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 0000000000000000000000000000000000000000..e723aa996283e8c91bb5f2111802414819cf6ba8 --- /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 0000000000000000000000000000000000000000..c79d275b8eb32a2ed32722a81348015d16730298 --- /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 0000000000000000000000000000000000000000..09e82164eea0aca28786fbb57a56df782a7c05fa --- /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 0000000000000000000000000000000000000000..d51f54f0d19ebeecb129f2ce5c41927f080eec73 --- /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 0000000000000000000000000000000000000000..368393d7df6ba6cb6bd53843f2ecc5107915b553 --- /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 0000000000000000000000000000000000000000..76a35f637e1628c81f4906f39ac925c78d21858c --- /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 new file mode 100644 index 0000000000000000000000000000000000000000..5d6c200a84c7b11e3857c4635e5354865b748006 --- /dev/null +++ b/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java @@ -0,0 +1,147 @@ +package io.github.linpeilie; + +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; +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 autoMappingTest() { + 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"); + } + + @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 978a4d9e2a793291262d36f6e932bb5ff8f9aa02..754ff134cc2a9f880e28522c6461393e58825d4f 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; @@ -57,15 +54,12 @@ 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; 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; @@ -909,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; @@ -990,6 +987,8 @@ public class AutoMapperProcessor extends AbstractProcessor { return list; } + list.addAll(buildMirrorAnno4AutoMapping(autoMapperEle)); + for (Element ele : autoMapperEle.getEnclosedElements()) { if (ele.getKind() != ElementKind.FIELD && ele.getKind() != ElementKind.METHOD) { continue; @@ -1010,6 +1009,55 @@ public class AutoMapperProcessor extends AbstractProcessor { list.removeIf(Objects::isNull); return list; } + /** + * 处理注解上存在@AutoMapping的情况 + * + * @param element element + */ + private List buildMirrorAnno4AutoMapping(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(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; + } + private AutoMappingMetadata buildAutoMappingMetadata(AutoMappingGem autoMappingGem, Element ele) { ClassName targetClass = transToClassName(autoMappingGem.targetClass().get()); 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 8d74245953b18f11303039b526b9b95ddb5db5f3..dd385e70d8450a4f1b42932b948aeb9e3ef1aaa4 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 f84aa7d2ad91099d56f00778e58daf4730942ead..6ad6e1b602bf02e7f624e9953ab9be7336f35708 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 28c7a06cb5ac248ac50546dfba2c0dae77962831..cc6bd01a5783d7fbd8161adae5dc03ad16386f71 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 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 bdb201aeaa34766a0da493687575cd60026c0b6b..a71f8d682b571362bd53679bf622eaa1117afbed 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() { 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 93166fafc68b37b838033cebc4338ab9c0827bb4..69578e823413eb7c2ce7711035a72cc756d538fc 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 { 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 d8f0cb649c64e7e5336eaa9c5f70d15dc8a3dd12..c7e38cb9d84c8cac5241f3f12236ef858437c66a 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 e90bb8b49398cae8a1d6fba8e3ba3cee77b3289f..eb3cdd70d2ed378cc8812eee3e08934f37a753c3 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 47ea79cd612f58b7a9f2d8c3d64ee773ca1de51e..d5726fd7ba80f32ffcff00ea83e68a0e47077098 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 { diff --git a/pom.xml b/pom.xml index 0a1543c638988e3328b4e7f0ea9dcacd3d04c2f6..f8b9a75438c41966ba63f64f0b4df795c252d35c 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ - 1.4.5 + 1.4.6 8 8 UTF-8