Часто приходится конвертировать Entity -> DTO или DTO -> Model. Вот основные способы, как это сделать.
Простой, но не очень масштабируемый.
public class UserMapper {
public static UserDto toDto(User user) {
return new UserDto(user.getId(), user.getName());
}
public static User toEntity(UserDto dto) {
return new User(dto.getId(), dto.getName());
}
}
Генерирует код на этапе компиляции → быстрее, чем рефлексия.
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
UserDto toDto(User user);
User toEntity(UserDto dto);
}
Просто, но медленнее из-за рефлексии.
ModelMapper modelMapper = new ModelMapper();
UserDto dto = modelMapper.map(user, UserDto.class);
Используем record вместо классов DTO для упрощения кода.
record UserDto(Long id, String name) {}
UserDto dto = new UserDto(user.getId(), user.getName());
Если нужно преобразовать список объектов.
List<UserDto> dtos = users.stream()
.map(UserMapper::toDto)
.collect(Collectors.toList());