MapStruct - инструмент для преобразования данных в Java
MapStruct - это фреймворк для преобразования объектов в Java
MapStruct предоставляет удобный способ автоматического генерирования кода преобразования между различными типами данных. Он позволяет избежать необходимости вручную писать код для копирования полей из одного объекта в другой, особенно в случаях, когда имена полей и типы данных совпадают.
Главной особенностью MapStruct является его аннотационный подход. Разработчик должен пометить методы, которые должны быть преобразованы, а затем MapStruct автоматически сгенерирует соответствующий код. Однако, для того чтобы это работало, необходимо настроить MapStruct и указать, какие классы и методы должны быть преобразованы.
Давайте рассмотрим пример. У нас есть два класса - Source и Target:
public class Source {
private String name;
private int age;
// getters and setters
}
public class Target {
private String firstName;
private String lastName;
private int age;
// getters and setters
}
Мы хотим скопировать значения из объекта Source в объект Target. Для этой цели мы можем использовать MapStruct. Для начала, нам необходимо добавить зависимость MapStruct в наш проект:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
Теперь создадим маппер, который будет использоваться для преобразования:
@Mapper
public interface SourceTargetMapper {
SourceTargetMapper MAPPER = Mappers.getMapper(SourceTargetMapper.class);
@Mapping(source = "name", target = "firstName")
@Mapping(source = "name", target = "lastName")
Target sourceToTarget(Source source);
@InheritInverseConfiguration
Source targetToSource(Target target);
}
Здесь мы определяем интерфейс, помеченный аннотацией @Mapper, и объявляем два метода. Первый метод, sourceToTarget, используется для преобразования объекта Source в объект Target. Мы указываем, какие поля нужно скопировать с помощью аннотации @Mapping. Второй метод, targetToSource, выполняет обратное преобразование.
Теперь, когда маппер создан, мы можем использовать его:
Source source = new Source();
source.setName("John");
source.setAge(25);
Target target = SourceTargetMapper.MAPPER.sourceToTarget(source);
System.out.println(target.getFirstName()); // John
System.out.println(target.getLastName()); // John
System.out.println(target.getAge()); // 25
В результате выполнения кода мы получим объект Target с значениями, извлеченными из объекта Source.
MapStruct также поддерживает более сложные сценарии. Например, можно использовать аннотацию @MappingTarget для обновления существующего объекта, а не создания нового. Также можно настроить MapStruct для выполнения дополнительных преобразований, например, при работе с коллекциями или маппингом свойств.
MapStruct предоставляет удобный и эффективный способ выполнения преобразования объектов в Java. Он позволяет избежать ненужных повторений кода и сократить время разработки. Кроме того, MapStruct предлагает гибкую настройку и поддерживает широкий спектр возможностей, делая его очень полезным инструментом для разработчиков Java.