Lombok 및 Java11에서 고속 Mapping Live Mapstruct 사용

Mapstruct란?


Enity(또는 Domain)에서 DTO로 변환하는 데 도움이 되는 라이브러리입니다.
유명한 사과나무로, Structs1.엑스의 빈유틸스, 모델매퍼·도저 등이 있다.
Mapstruct의 특징은 Lombok과 같습니다. 왜냐하면 모방 프로세서를 사용하여 자동으로 코드를 생성하기 때문입니다.
특징은 속도가 Getter/setter로 스스로 비치는 것처럼 빠르다는 것이다.
성능에 관해서는 아래 보도에서 소개하였다.
Performance of Java Mapping Frameworks
주관성이 있지만 성능뿐만 아니라 다른 매핑 도구에 비해 코드도 직관적이고 알기 쉽다.
그토록 훌륭한 매핑 도구였지만 살짝 끼워 넣은 & 같은 기사를 찾지 못해 이 기사를 실었다.

컨디션


Lombok Changelog, 1.8.2에 따라 Integration에 대한 Mapstruct 오류 수정
・Pleiades Eclipse 2018-09(※Loombok 1.8.2)
・AdoptOpenJDK11
・Lombok1.8.2
・Mapstruct 1.2.0.Final 및 1.3.0Beta1

OK 버튼 설정


결론은 mapstruct-lombok의 샘플 코드로 실행
Mapstruct용 Readme에서 움직이지 않는다(이미 곤경에 빠졌다).
다음과 같은pom
eclipse에서 항목을 선택하고 다음 마벤트 설치나 마벤트에서 코트를 생성합니다
mapstruct-lombok에 기재된 테스트 코드가 성공했습니다.
유감스럽게도 eclipse의 자동 구축이나 정제형 구축에서 코드가 생성되지 않습니다
IDE Support 준비되어 있으며, "annotation processs"를 자동으로 실행하기 위해 제작되었습니다.
중요한'annotation processor'를 Maven으로 설정하면 움직일 수 없기 때문이다
pom.xml

    <properties>
        <org.mapstruct.version>1.3.0.Beta1</org.mapstruct.version> ※ 1.2.0.Finalも動作することを確認済み
        <org.projectlombok.version>1.18.2</org.projectlombok.version>
    </properties>
<!-- 省略 -->
        <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> ※Readmeとの差異になります
            <version>${org.mapstruct.version}</version>
            <scope>provided</scope> ※ コンパイル時に実行するように記載されています
        </dependency>
<!-- 省略 -->
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId> ※ ポイント Readmeで記載されているAnnotation-processorが記載されていない
                    <version>3.6.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

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> ※ ← 少なくとも、Java11では動かないようです
                        <version>${org.mapstruct.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>

Java11의 영향


공식 문서에 using_mapstruct_on_java_9 항목에 'java.annotations.common' 을 사용합니다.
저기,java.annotations.common은 Java9,java입니다.xml.ws .애너타이션으로 개명됐지만
자바 11, 자바라니.xml.ws.annotation 삭제됨
현재, OK 모드의pom.xml을 설명하고 마ven 구축을 실행하면 코드를 생성합니다
기대한 대로 움직이는 건 확인했지만 위험 가능성은 양해해 주십시오

총결산


이 글에는 럼백과 자바11에서 맵스트럭트를 사용하는 방법이 실렸다.
실제 Mapstruct의 사용 방법에 대해서는 다른 Qita 기사와 본가의 견본 코드를 참조하십시오.
살짝 끼는 것도 있어요.
자신의 힘으로 Getter/setter를 쓰면 버그를 꺼낼 가능성보다 몇 백 배의 코드를 쓰는 것이 더 재미있다.
당신의 자바 생활에 조금이나마 기여할 수 있다면 좋겠습니다.

좋은 웹페이지 즐겨찾기