一飞开源,介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术,一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区,共建开源新生态!
一、开源项目简介MapStructPlus可能是最简单最强大的Java Bean转换工具
Mapstruct Plus 是 Mapstruct 的增强工具,在 Mapstruct 的基础上,实现了自动生成 Mapper 接口的功能,并强化了部分功能,使 Java 类型转换更加便捷、优雅。
二、开源协议使用Apache-2.0开源协议
三、界面展示四、功能概述MapStruct Plus 是对 MapStruct 框架的一个增强,只做增强,不做修改,可以通过一个注解,自动生成两个类之间的转换操作,省略了 Mapstruct 定义接口的操作,使 Java 类型转换更加便捷、优雅。
目标:做最简单、最强大的类型转换工具
特性快速Java 类之间的转换,仅需要增加一个注解,减少了乏味且容易出错的开发任务
效率基于注解处理器,所有生成工作都在编译期完成
转换属性转换基于类中的 getter/setter 方法
兼容支持JDK8~17、SpringBoot2~3
多类转换支持单个类配置多个类型转换
Map转对象更强大的Map转对象功能
五、技术选型快速开始下面演示如何使用 MapStruct Plus 来映射两个对象。
假设有两个类 UserDto 和 User,分别表示数据层对象和业务层对象:
UserDtopublic UserDto { private String username; private int age; private boolean young; // getter、setter、toString、equals、hashCode}Userpublic User { private String username; private int age; private boolean young; // getter、setter、toString、equals、hashCode}添加依赖引入 mapstruct-plus-spring-boot-starter 依赖:
<properties> <mapstruct-plus.version>1.4.3</mapstruct-plus.version></properties><dependencies> <dependency> <groupId>io.github.linpeilie</groupId> <artifactId>mapstruct-plus-spring-boot-starter</artifactId> <version>${mapstruct-plus.version}</version> </dependency></dependencies><build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <annotationProcessorPaths> <path> <groupId>io.github.linpeilie</groupId> <artifactId>mapstruct-plus-processor</artifactId> <version>${mapstruct-plus.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins></build>指定对象映射关系在 User 或者 UserDto 上面增加注解 —— @AutoMapper,并设置 targetType 为对方类。
例如:
@AutoMapper(target = UserDto.class)public User { // ...}测试@SpringBootTestpublic QuickStartTest { @Autowired private Converter converter; @Test public void test() { User user = new User(); user.setUsername("jack"); user.setAge(23); user.setYoung(false); UserDto userDto = converter.convert(user, UserDto.class); System.out.println(userDto); // UserDto{username='jack', age=23, young=false} assert user.getUsername().equals(userDto.getUsername()); assert user.getAge() == userDto.getAge(); assert user.isYoung() == userDto.isYoung(); User newUser = converter.convert(userDto, User.class); System.out.println(newUser); // User{username='jack', age=23, young=false} assert user.getUsername().equals(newUser.getUsername()); assert user.getAge() == newUser.getAge(); assert user.isYoung() == newUser.isYoung(); }}小结引入依赖后,使用 Mapstruct Plus 步骤非常简单。
给需要转换的类添加 AutoMapper 注解获取 Converter 实例,调用 convert 方法即可六、源码地址访问一飞开源:https://code.exmay.com/