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.
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
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>
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>
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.
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