mapstruct освобождает преобразование объектов Java

Java

Резюме

Текущая серверная веб-разработка использует многоуровневую инженерную структуру, которую необходимо преобразовать в различные структуры данных, такие как VO, BO, DTO и DO. Эти коды преобразования представляют собой относительно простые сопоставления полей, преобразования типов и повторяющиеся задачи относительно высоки.Вы можете использовать некоторые инструменты, чтобы освободить наши руки.

Технические решения

Существует много схем реализации преобразования классов, разные схемы имеют свои преимущества и недостатки, и разработчикам приходится делать собственный выбор.

строить планы преимущество недостаток
рукописный код 1. Высокая гибкость 2. Облегчение последующей реконструкции 1. Много повторяющейся работы 2. В рукописном коде легко пропустить некоторые поля
BeanUtils.copyProperties реализован с использованием отражения 1. Простота использования. 2. Эффективность пакетов Apache относительно низкая, а эффективность пакетов Spring приемлема. 1. Недостаточная поддержка сложных сценариев и слишком грубая степень детализации контроля копирования 2. Реконструировать непросто
mapstruct 1. Высокая гибкость, поддержка простых, сложных, вложенных, пользовательских расширений и других средств. 2. Генерируется во время компиляции, без проблем с эффективностью. Неудобно для последующей реконструкции

Облегчить последующую реконструкцию

Удобство последующего рефакторинга означает, что когда вам нужно изменить поле DTO, вы можете использовать ссылочное отношение компилятора для его прямого рефакторинга.

Таким образом, схема mapstruct лучше, чем beanutils.copy, и по сравнению с рукописной схемой имеет определенные недостатки и требует выбора. Личное мнение, для рефакторинга полей это должно гарантироваться через тестовые случаи, а не полагаться на функции редактора. Кроме того, после использования mapstruct для преобразования отношение ссылки на класс все еще существует, и рефакторинг может гарантировать отсутствие ошибок путем определения степени детализации класса. Если учесть вероятность ошибки ручной партии, то и эффективность разработки mapstruct явно лучше.

выполнить

  1. импортировать пакет зависимостей
<properties>
    <org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
</properties>
...
<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
</dependencies>
  1. Установить обработчик аннотаций для плагина компиляции maven
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source> <!-- depending on your project -->
                <target>1.8</target> <!-- depending on your project -->
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                       <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.18.10</version>
                    </path>
                    <!-- other annotation processors -->
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. IDEA устанавливает плагин mapstruct

С помощью этого плагина вы можете найти свойства сопоставленного класса, некоторые проверки орфографии

Обычное использование

По умолчанию, когда значение свойства совпадает с именем целевого объекта, оно неявно сопоставляется.

Другие общие преобразования

Когда значения атрибутов не совпадают

@Mapping(target="dateEnd", source="end")
ExampleVO doToVO(ExampleDO do);

Преобразование объекта коллекции

@Mapping(target="dateEnd", source="end")
ExampleVO doToVO(ExampleDO do);

List<ExampleVO> doToVOS(List<ExampleDO> dos)

JAVA-конструктор

Вызов делегата Java по выражению

@Mapping(target="dateEnd", expression="java(new java.util.Date())"
ExampleVO doToVO(ExampleDO do);

qualifiedByName

Если конструктор не устраивает, вы также можете настроить метод, а затем вызвать

@Mapping(target="dateEnd", qualifiedByName="format", source="end")
ExampleVO doToVO(ExampleDO do);
@Named("format")
default Date formatDate(Long date) {
xxx
}

Реализация интерфейса по умолчанию

mapstruct — это определяемый пользователем интерфейс, а затем автоматически генерируется класс реализации.Если в классе преобразования есть очень индивидуальное преобразование, и мы не хотим преобразовывать его через mapstruct, мы можем напрямую использовать реализацию по умолчанию для интерфейс

Конечно, есть и другие функции, которые можно использовать, такие как Decorator, которые здесь не будут перечислены.Более богатые функции можно посмотретьиспользование сведений о структуре карты

Ссылаться на

blog.CSDN.net/my605283073/…

использование сведений о структуре карты