MapStruct - 隱式型別轉換



MapStruct 在大多數情況下會自動處理型別轉換。例如,int 到 Long 或 String 的轉換。轉換也處理空值。以下是一些重要的自動轉換。

  • 基本型別和對應的包裝類之間。

  • 基本型別和字串之間。

  • 列舉型別和字串之間。

  • BigInt、BigDecimal 和字串之間。

  • Calendar/Date 和 XMLGregorianCalendar 之間。

  • XMLGregorianCalendar 和字串之間。

  • Joda 日期型別和字串之間。

示例

在 Eclipse 中開啟專案對映,如使用構造器的對映章節中更新的那樣。

使用以下程式碼更新 StudentEntity.java:

StudentEntity.java

package com.tutorialspoint.entity;

public class StudentEntity {
   private String id;
   private String name;
   private String classVal;
   private SubjectEntity subject;
   public String section;
   public String getId() {
      return id;
   }
   public void setId(String id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getClassVal() {
      return classVal;
   }
   public void setClassVal(String classVal) {
      this.classVal = classVal;
   }
   public SubjectEntity getSubject() {
      return subject;
   }
   public void setSubject(SubjectEntity subject) {
      this.subject = subject;
   }
}

Student.java 程式碼不變,如下:

Student.java

package com.tutorialspoint.model;

public class Student {
   private final String name;
   private final int id;

   protected Student(Student.Builder builder) {
      this.name = builder.name;
      this.id = builder.id;
   }
   public static Student.Builder builder() {
      return new Student.Builder();
   }
   public static class Builder {
      private String name;
      private int id;

      public Builder name(String name) {
         this.name = name;
         return this;
      }
      public Builder id(int id) {
         this.id = id;
         return this;
      }
      public Student create() {
         return new Student( this );
      }
   }
   public String getName() {
      return name;
   }
   public int getId() {
      ret+urn id;
   }
}

使用以下程式碼更新 DeliveryAddressMapperTest.java:

DeliveryAddressMapperTest.java

package com.tutorialspoint.mapping;

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import com.tutorialspoint.entity.AddressEntity;
import com.tutorialspoint.entity.StudentEntity;
import com.tutorialspoint.mapper.DeliveryAddressMapper;
import com.tutorialspoint.model.DeliveryAddress;

public class DeliveryAddressMapperTest {
   private DeliveryAddressMapper deliveryAddressMapper = Mappers.getMapper(DeliveryAddressMapper.class);

   @Test
   public void testEntityToModel() {
      StudentEntity student = new StudentEntity();
      student.setClassVal("X");
      student.setName("John");
      student.setId("1");

      AddressEntity address = new AddressEntity();
      address.setCity("Y");
      address.setState("Z");
      address.setHouseNo(1);

      DeliveryAddress deliveryAddress = deliveryAddressMapper.getDeliveryAddress(student, address);

      assertEquals(deliveryAddress.getName(), student.getName());
      assertEquals(deliveryAddress.getCity(), address.getCity());
      assertEquals(deliveryAddress.getState(), address.getState());
      assertEquals(deliveryAddress.getHouseNumber(), address.getHouseNo());
   }
}

使用以下程式碼更新 StudentMapperTest.java:

StudentMapperTest.java

package com.tutorialspoint.mapping;

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import com.tutorialspoint.entity.StudentEntity;
import com.tutorialspoint.entity.SubjectEntity;
import com.tutorialspoint.mapper.StudentMapper;
import com.tutorialspoint.model.Student;

public class StudentMapperTest {
   private StudentMapper studentMapper = Mappers.getMapper(StudentMapper.class);

   @Test
   public void testEntityToModel() {
      StudentEntity entity = new StudentEntity();
      entity.setName("John");
      entity.setId("1");

      Student model = studentMapper.getModelFromEntity(entity);
      assertEquals(entity.getName(), model.getName());
      assertEquals(Integer.parseInt(entity.getId()), model.getId());
   }
   @Test
   public void testModelToEntity() {
      Student.Builder builder = Student.builder().id(1).name("John");
      Student model = builder.create();
      StudentEntity entity = studentMapper.getEntityFromModel(model);

      assertEquals(entity.getName(), model.getName());
      assertEquals(Integer.parseInt(entity.getId()), model.getId());
   }
}

執行以下命令測試對映。

mvn clean test

輸出

命令成功後。驗證輸出。

mvn clean test
[INFO] Scanning for projects...
...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mapping ---
[INFO] Surefire report directory: \mvn\mapping\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.tutorialspoint.mapping.DeliveryAddressMapperTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec
Running com.tutorialspoint.mapping.StudentMapperTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec

Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
...
廣告