Une bibliothèque qui permet de convertir l'entité (ou le domaine) en DTO. Les bibliothèques de mappage célèbres comprennent BeanUtils de Structs1.x et ModelMapper / Dozer.
La caractéristique de MapStruct est que le code est généré automatiquement à l'aide du processeur d'annotations comme Lombok. La fonctionnalité est qu'il est aussi rapide que le mappage en utilisant getter / setter seul.
La performance est présentée dans l'article suivant. Performance of Java Mapping Frameworks
C'est subjectif, mais je trouve le code intuitif et facile à comprendre, non seulement en termes de performances, mais aussi par rapport à d'autres outils de cartographie.
C'est un très bon outil de cartographie, mais je suis coincé avec lui depuis un moment et je n'ai pas trouvé d'article similaire, alors j'écris cet article.
Selon Lombok Changelog, la 1.8.2 semble corriger un bogue concernant l'intégration avec MapStruct.
・ Éclipse des Pléiades 2018-09 (* Lombok 1.8.2) ・ AdoptOpenJDK 11 ・ Lombok 1.8.2 -MapStruct 1.2.0.Final et 1.3.0.Beta1
En conclusion, cela fonctionne avec l'exemple de code dans mapstruct-lombok et Cela ne fonctionnait pas dans MapStruct Readme (j'en étais accro).
Décrivez le pom comme suit, ** Sélectionnez un projet avec eclipse et exécutez ⇒ maven install ou maven test ** générera une couche Le code de test fourni dans mapstruct-lombok réussit.
Malheureusement, les builds automatiques et les builds propres d'Eclipse ne génèrent pas de code: sob: Support IDE est disponible et est conçu pour exécuter automatiquement des "processeurs d'annotation". ** En effet, cela ne fonctionnera pas si les "processeurs d'annotation" essentiels sont définis sur Maven: innocent: **
pom.xml
<properties>
<org.mapstruct.version>1.3.0.Beta1</org.mapstruct.version> ※ 1.2.0.Confirmé que Final fonctionne également
<org.projectlombok.version>1.18.2</org.projectlombok.version>
</properties>
<!--réduction-->
<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>* Ce sera différent de Readme
<version>${org.mapstruct.version}</version>
<scope>provided</scope>* Il est décrit pour être exécuté au moment de la compilation.
</dependency>
<!--réduction-->
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>* Annotation décrite dans le point Lisez-moi-le processeur n'est pas répertorié
<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>* ← Au moins, cela ne semble pas fonctionner sur Java 11.
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
Dans la documentation officielle, l'élément using_mapstruct_on_java_9 indique que "java.annotations.common" doit être activé. Cela, java.annotations.common était Java 9, et a été renommé en java.xml.ws .annotation, ** Wow, dans Java 11, java.xml.ws.annotation a été supprimé: innocent :: innocent :: innocent: **
Pour l'instant, si vous écrivez le modèle OK pom.xml et exécutez la compilation maven, le code sera généré Nous avons confirmé que cela fonctionne comme prévu, mais veuillez comprendre qu'il peut y avoir des risques.
Cet article a décrit comment utiliser MapStruct avec lombok et Java 11. Pour l'utilisation réelle de MapStruct, veuillez vous référer aux autres articles Qiita et à l'exemple de code de la famille principale.
Il y a quelques points qui correspondent, mais C'est des centaines de fois plus amusant d'écrire du code que d'écrire des getters / setters par vous-même pour réduire les risques de bogues.
J'espère que vous pourrez contribuer un peu à votre vie Java.
Recommended Posts