21 Ocak 2021 Perşembe

MapStruct Kullanımı

Giriş
Açıklaması şöyle
.. MapStruct generates bean mappings at compile-time which ensures a high performance, …

MapStruct is an annotation processor which is plugged into the Java compiler and can be used in command-line builds (Maven, Gradle etc.) as well as from within your preferred IDE.
MapStruct kütüphanesinin rakibi ModelMapper kütüphanesi.

Maven
Örnek - dependency
Şöyle yaparız. Bu kullanımda mapstruct-processor dependency tree'de görünür. Hatta alt projelerde de dependency olarak eklemek gerekir.
<dependency>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct</artifactId>
  <version>1.4.2.Final</version>
</dependency>

<dependency>  <!-- this one here -->
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct-processor</artifactId>
  <version>1.4.2.Final</version>
  <scope>provided</scope>
</dependency>
Örnek - maven-compiler-plugin ile kullanım
Şu satırı dahil ederiz
<dependency>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct</artifactId>
  <version>1.3.1.Final</version>
</dependency>
Örnek - plugin
Plugin için şu satırı dahil ederiz.  Burada Lombok eklentisi, MapStruct'tan önce tanımlanmalı
Sırayla ilgili bir uyarı burada. Bir başka uyarı da burada
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  <configuration>
    <source>1.8</source> <!-- depending on your project -->
    <target>1.8</target> <!-- depending on your project -->
    <annotationProcessorPaths>
      <path>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
      </path>
      <path>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.3.1.Final</version>
      </path>
    </annotationProcessorPaths>
  </configuration>
</plugin>
Örnek - plugin
Şöyle yaparız
<annotationProcessorPaths>
  <path>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${org.projectlombok.version}</version>
  </path>
  <!-- This is needed when using Lombok 1.18.16 and above -->
  <path>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-mapstruct-binding</artifactId>
    <version>0.2.0</version>
  </path>
  <!-- Mapstruct should follow the lombok path(s) -->
  <path>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>${org.mapstruct.version}</version>
  </path>
</annotationProcessorPaths>
Aslında annotationProcessorPaths için açıklama şöyle.  Bu kullanımda mapstruct-processor dependency tree'de görünmez. Ancak diğer annotation processorlar da varsa onları da artık otomatik bulunmadıkları için eklemek gerekir.
If specified, the compiler will detect annotation processors only in those classpath elements. If omitted, the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors.

Kullanım
- Bir tane POJO kodlanır
- Bir tane DTO sınıfı kodlanır
- Bir tane @Mapper anotasyonuna sahip interface kodlanır. Interface'in toDto isimli POJO alan ve DTO dönen bir metodu olur. Daha sonra kullanmak için şöyle yaparız
StudentMapper studentMapper = ...;

Student student = ...;
StudentDto studentDto = studentMapper.toDto(student);
@InheritInverseConfiguration Anotasyonu
@Mapper ile işaretli sınıf içine yerleştirilir. Ters yöne yani DTO'dan sınıfa çevrim kodunun da üretilmesini sağlar.

@Mapper Anotasyonu
@Mapper anotasyonu yazısına taşıdım

@Mapping Anotasyonu 
@Mapping anotasyonu yazısına taşıdım.

@ObjectFactory Anotasyonu
@ObjectFactory anotasyonu yazısına taşıdım

@BeforeMapping Anotasyonu
@BeforeMapping anotasyonu yazısına taşıdım









Hiç yorum yok:

Yorum Gönder