Utilisez Fast Mapping Livery MapStruct avec Lombok et Java 11

Qu'est-ce que MapStruct?

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.

environnement

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

OK paramètres de modèle

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>

Exemple typique de modèle NG

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>

À propos de l'influence de Java 11

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.

Résumé

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

Utilisez Fast Mapping Livery MapStruct avec Lombok et Java 11
Utiliser java avec MSYS et Cygwin
Utilisez JDBC avec Java et Scala.
Bibliothèque de mappage d'objets JAVA
Utiliser des couches Lambda avec Java
Cartographie de Bean avec MapStruct Partie 1
Cartographie Bean avec MapStruct Partie 3
Cartographie de Bean avec MapStruct Partie 2
Utiliser SpatiaLite avec Java / JDBC
Traçage distribué avec OpenCensus et Java
Installez Java et Tomcat avec Ansible
Utiliser Microsoft Graph avec Java standard
Utiliser Git avec SourceTree et Eclipse
Utiliser Azure Bing SpellCheck avec Java
Utiliser Java 11 avec Google Cloud Functions
Bibliothèque de cache Java et politique d'éviction
Sortie PDF et TIFF avec Java 8
Présentation de Lightsleep, une bibliothèque de mappage O / R qui fonctionne uniquement avec les pilotes Java Runtime et JDBC
Crypter avec Java et décrypter avec C #
Surveillez les applications Java avec jolokia et hawtio
Appeler la bibliothèque Java à partir de C avec JNI
Lier le code Java et C ++ avec SWIG
Bibliothèque de tests unitaires Java Artery-Easy to use
Essayons WebSocket avec Java et javascript!
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
[Java] Lecture et écriture de fichiers avec OpenCSV
[JaCoCo (Java Code Coverage)] Utilisation avec NetBeans
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Créez et testez des applications Java + Gradle avec Wercker
Essayez d'intégrer Ruby et Java avec Dapr
Comment utiliser le framework Java avec AWS Lambda! ??
JSON avec Java et Jackson Part 2 XSS mesures
Je veux utiliser java8 forEach avec index
Comment utiliser l'API Java avec des expressions lambda
Utilisez Matplotlib depuis Java ou Scala avec Matplotlib4j
Préparer un environnement de scraping avec Docker et Java
Mock et stub avec minitest (utilisez RR, WebMock, MiniTest :: Mock)
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
Utilisez une bibliothèque Java externe pour le moment
KMS) Chiffrement d'enveloppe avec décryptage openssl et java
Crypter / décrypter avec AES256 en PHP et Java
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
[Review] Lecture et écriture de fichiers avec java (JDK6)
[Java] Comment utiliser la classe Calendar et la classe Date
[Kotlin] La bibliothèque de mappage basée sur la réflexion basée sur Java ne fonctionne fondamentalement pas avec Kotlin.
Code à utiliser lorsque vous souhaitez traiter Json en Java avec uniquement des bibliothèques standard