MapStruct - Mapping Multiple Objects



We can add map multiple objects as well. For Example, we want to get a DeliveryAddress Object using Student and Address object.

Now create a mapper interface which can map two objects into one.

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

Example

Open project mapping as updated in Custom Mapping chapter in Eclipse.

Create DeliveryAddress.java with following code −

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;
   }
}

Create AddressEntity.java with following code −

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;
   }
}

Create DeliveryAddressMapper.java with following code −

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);   
}

Create DeliveryAddressMapperTest.java with following code −

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());
   }
}

Run the following command to test the mappings.

mvn clean test

Output

Once command is successful. Verify the output.

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
...
Advertisements