Verwenden Sie die schnelle Mapping-Bibliothek MapStruct mit Lombok und Java 11

Was ist MapStruct?

Eine Bibliothek, mit deren Hilfe Entity (oder Domain) in DTO konvertiert werden kann. Zu den bekannten Mapping-Bibliotheken gehören BeanUtils von Structs1.x und ModelMapper / Dozer.

Das Merkmal von MapStruct ist, dass der Code automatisch mit dem Anmerkungsprozessor wie Lombok generiert wird. Das Feature ist, dass es so schnell ist wie das Mapping mit Getter / Setter alleine.

Die Leistung wird im folgenden Artikel vorgestellt. Performance of Java Mapping Frameworks

Es ist subjektiv, aber ich finde den Code intuitiv und leicht verständlich, nicht nur in Bezug auf die Leistung, sondern auch im Vergleich zu anderen Mapping-Tools.

Es ist so ein schönes Mapping-Tool, aber ich habe eine Weile daran festgehalten und konnte keinen ähnlichen Artikel finden, also schreibe ich diesen Artikel.

Umgebung

Laut Lombok Changelog scheint 1.8.2 einen Fehler in der Integration mit MapStruct zu beheben.

・ Plejadenfinsternis 2018-09 (* Lombok 1.8.2) ・ AdoptOpenJDK 11 ・ Lombok 1.8.2 -MapStruct 1.2.0.Final und 1.3.0.Beta1

OK Mustereinstellungen

Zusammenfassend funktioniert es mit dem Beispielcode in mapstruct-lombok und In MapStruct Readme hat es nicht funktioniert (ich war süchtig danach).

Beschreibe pom wie folgt: ** Wählen Sie ein Projekt mit Eclipse aus und führen Sie ⇒ maven install oder maven test ** aus, um einen Mantel zu erzeugen Der in mapstruct-lombok bereitgestellte Testcode ist erfolgreich.

Leider generieren die automatischen Builds und Clean Builds von Eclipse keinen Code: sob: IDE-Unterstützung ist verfügbar und dient zum automatischen Ausführen von "Anmerkungsprozessoren". ** Dies liegt daran, dass es nicht funktioniert, wenn Sie die wesentlichen "Anmerkungsprozessoren" auf Maven setzen: unschuldig: **

pom.xml



    <properties>
        <org.mapstruct.version>1.3.0.Beta1</org.mapstruct.version> ※ 1.2.0.Bestätigt, dass Final auch funktioniert
        <org.projectlombok.version>1.18.2</org.projectlombok.version>
    </properties>
<!--Kürzung-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${org.projectlombok.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>* Es wird anders sein als Readme
            <version>${org.mapstruct.version}</version>
            <scope>provided</scope>* Es wird beschrieben, dass es zur Kompilierungszeit ausgeführt wird.
        </dependency>
<!--Kürzung-->
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>* Anmerkung im Punkt Lesen Sie mich-Prozessor ist nicht aufgeführt
                    <version>3.6.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

Typisches Beispiel für ein NG-Muster

pom.xml


        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.6</source> <!-- or higher, depending on your project -->
                <target>1.6</target> <!-- or higher, depending on your project -->
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>* ← Zumindest scheint es unter Java 11 nicht zu funktionieren.
                        <version>${org.mapstruct.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>

Über den Einfluss von Java 11

In der offiziellen Dokumentation gibt das Element using_mapstruct_on_java_9 an, dass "java.annotations.common" aktiviert sein sollte. Das war java.annotations.common Java 9 und wurde in java.xml.ws .annotation umbenannt. ** Wow, in Java 11 wurde java.xml.ws.annotation entfernt: unschuldig :: unschuldig :: unschuldig: **

Wenn Sie zunächst das OK-Muster pom.xml schreiben und den Maven-Build ausführen, wird der Code generiert Wir haben bestätigt, dass es wie erwartet funktioniert, aber bitte haben Sie Verständnis dafür, dass es Risiken geben kann.

Zusammenfassung

In diesem Artikel wurde die Verwendung von MapStruct mit Lombok und Java 11 beschrieben. Informationen zur tatsächlichen Verwendung von MapStruct finden Sie in anderen Qiita-Artikeln und im Beispielcode der Head-Familie.

Es gibt einige Punkte, die passen, aber Es macht hunderte Male mehr Spaß, Code zu schreiben, als Getter / Setter selbst zu schreiben, um die Wahrscheinlichkeit von Fehlern zu verringern.

Ich hoffe, Sie können ein wenig zu Ihrem Java-Leben beitragen.

Recommended Posts

Verwenden Sie die schnelle Mapping-Bibliothek MapStruct mit Lombok und Java 11
Verwenden Sie Java mit MSYS und Cygwin
Verwenden Sie JDBC mit Java und Scala.
JAVA-Objektzuordnungsbibliothek
Verwenden Sie Lambda-Ebenen mit Java
Bean-Mapping mit MapStruct Teil 1
Bean-Mapping mit MapStruct Teil 3
Bean-Mapping mit MapStruct Teil 2
Verwenden Sie SpatiaLite mit Java / JDBC
Verteilte Ablaufverfolgung mit OpenCensus und Java
Installieren Sie Java und Tomcat mit Ansible
Verwenden Sie Microsoft Graph mit Standard-Java
Verwenden von Git mit SourceTree und Eclipse
Verwenden Sie Azure Bing SpellCheck mit Java
Verwenden Sie Java 11 mit Google Cloud-Funktionen
Java-Cache-Bibliothek und Räumungsrichtlinie
PDF und TIFF mit Java 8 ausgeben
Einführung in Lightsleep, eine O / R-Zuordnungsbibliothek, die nur mit Java Runtime- und JDBC-Treibern funktioniert
Mit Java verschlüsseln und mit C # entschlüsseln
Überwachen Sie Java-Anwendungen mit Jolokia und Hawtio
Rufen Sie die Java-Bibliothek von C mit JNI auf
Verknüpfen Sie Java- und C ++ - Code mit SWIG
Java Artery - Einfach zu verwendende Unit-Test-Bibliothek
Probieren wir WebSocket mit Java und Javascript aus!
[Java] Verwenden Sie kryptografische Technologie mit Standardbibliotheken
[Java] Lesen und Schreiben von Dateien mit OpenCSV
[JaCoCo (Java Code Coverage)] Verwendung mit NetBeans
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Erstellen und testen Sie Java + Gradle-Anwendungen mit Wercker
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Verwendung des Java-Frameworks mit AWS Lambda! ??
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
Ich möchte Java8 für jeden mit Index verwenden
Verwendung der Java-API mit Lambda-Ausdrücken
Verwenden Sie Matplotlib aus Java oder Scala mit Matplotlib4j
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Mock and Stub mit Minitest (RR, WebMock, MiniTest :: Mock verwenden)
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
Verwenden Sie vorerst eine externe Java-Bibliothek
KMS) Umschlagverschlüsselung mit OpenSL- und Java-Entschlüsselung
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
[Java] Konvertieren und Importieren von Dateiwerten mit OpenCSV
[Review] Lesen und Schreiben von Dateien mit Java (JDK6)
[Java] Verwendung der Kalenderklasse und der Datumsklasse
[Kotlin] Die auf Java basierende Mapping-Bibliothek funktioniert grundsätzlich nicht mit Kotlin.
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten