MapStruct
创建实现Java Bean之间转换的扩展映射器。
1.依赖
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.2.Final</version>
<scope>provided</scope>
</dependency>
2.实体类
@Data
public class User {
private Long id;
private String username;
private String email;
}
@Data
public class UserDto {
private Long id;
private String username;
private String email;
}
3.映射
@Mapper
public interface UserMapper {
UserDto userToUserDto(User user);
User userDtoToUser(UserDto userDto);
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
}
构建/编译应用程序时,MapStruct注解处理器插件会识别出UserMapper 接口并为其生成一个实现类。
target/generated-sources/annotations 目录下生成实现类,类名为 UserMapperImpl。
@Override
public UserDto userToUserDto(User user) {
if ( user == null ) {
return null;
}
UserDto userDto = new UserDto();
userDto.setId( user.getId() );
userDto.setUsername( user.getUsername() );
userDto.setEmail( user.getEmail() );
return userDto;
}
4.比较
4.1 BeanUtils.copyProperties
运行时拷贝:通过反射在运行时进行属性拷贝,性能较低