MapStruct - 映射多个对象



我们还可添加映射多个对象。例如,我们想要使用 Student 和 Address 对象获取 DeliveryAddress 对象。

现在,创建一个映射器接口将能够将两个对象映射到一个对象。

@Mapper
public interface DeliveryAddressMapper {
   @Mapping(source = "student.name", target = "name")
   @Mapping(source = "address.houseNo", target = "houseNumber")
   DeliveryAddress getDeliveryAddress(StudentEntity student, AddressEntity address);   
}

示例

在 Eclipse 中,请在自定义映射章节中更新打开项目映射。

使用以下代码创建一个 DeliveryAddress.java −

DeliveryAddress.java

package com.tutorialspoint.model;

public class DeliveryAddress {   
   private String name;
   private int houseNumber;
   private String city;
   private String state;
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getHouseNumber() {
      return houseNumber;
   }
   public void setHouseNumber(int houseNumber) {
      this.houseNumber = houseNumber;
   }
   public String getCity() {
      return city;
   }
   public void setCity(String city) {
      this.city = city;
   }
   public String getState() {
      return state;
   }
   public void setState(String state) {
      this.state = state;
   }
}

使用以下代码创建一个 AddressEntity.java −

AddressEntity.java

package com.tutorialspoint.entity;

public class AddressEntity {
   private int houseNo;
   private String city;
   private String state;
   public int getHouseNo() {
      return houseNo;
   }
   public void setHouseNo(int houseNo) {
      this.houseNo = houseNo;
   }
   public String getCity() {
      return city;
   }
   public void setCity(String city) {
      this.city = city;
   }
   public String getState() {
      return state;
   }
   public void setState(String state) {
      this.state = state;
   }
}

使用以下代码创建一个 DeliveryAddressMapper.java −

DeliveryAddressMapper.java

package com.tutorialspoint.mapper;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import com.tutorialspoint.entity.AddressEntity;
import com.tutorialspoint.entity.StudentEntity;
import com.tutorialspoint.model.DeliveryAddress;

@Mapper
public interface DeliveryAddressMapper {
   @Mapping(source = "student.name", target = "name")
   @Mapping(source = "address.houseNo", target = "houseNumber")
   DeliveryAddress getDeliveryAddress(StudentEntity student, AddressEntity address);   
}

使用以下代码创建一个 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());
   }
}

运行以下命令测试映射。

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.011 sec
Running com.tutorialspoint.mapping.StudentMapperTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec

Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
...
广告
© . All rights reserved.