Mapstruct Plus 是 Mapstruct 的增强工具,在 Mapstruct 的基础上,实现了自动生成 Mapper 接口的功能,并强化了部分功能,使 Java 类型转换更加便捷、优雅。
和 Mapstruct 一样,本质上都是一个基于 JSR 269 的 Java 注释处理器,因此可以由 Maven 、Gradle 、Ant 等来构建触发。
Mapstruct Plus 内嵌 Mapstruct ,和 Mapstruct 完全兼容,如果之前已经使用 Mapstruct ,可以无缝替换依赖。
简单示例
假设有两个类 UserDto 和 User ,分别表示数据层对象和业务层对象:
public class UserDto {
private String username;
private int age;
private boolean young;
// getter 、setter 、toString 、equals 、hashCode
}
public class User {
private String username;
private int age;
private boolean young;
// getter 、setter 、toString 、equals 、hashCode
}
添加依赖:
引入 mapstruct-plus-spring-boot-starter 依赖:
1.3.6
io.github.linpeilie
mapstruct-plus-spring-boot-starter
${mapstruct-plus.version}
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
1.8
io.github.linpeilie
mapstruct-plus-processor
${mapstruct-plus.version}
指定对象映射关系:
在 User 或者 UserDto 上面增加注解 —— @AutoMapper,并设置 targetType 为对方类。
例如:
@AutoMapper(target = UserDto.class)
public class User {
// ...
}
测试:
@SpringBootTest
public class 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();
}
}
小结:
引入依赖后,使用 MapStructPlus 的步骤非常简单。
[ol]
[/ol]
该项目开发一段时间了,也逐渐趋于稳定,已在多个项目中正式应用,如果有帮助的话,求 star ~
user, userdto, mapstruct, private