MapStruct - 映射列表


使用 Mapstruct,我们可以以与映射基元类似的方式映射列表。要获取对象列表,我们应该提供一个可以映射对象的映射器方法。

句法

@Mapper
public interface CarMapper {
   List<String> getListOfStrings(List<Integer> listOfIntegers);
   List<Car> getCars(List<CarEntity> carEntities);
   Car getModelFromEntity(CarEntity carEntity);
}

以下示例演示了相同的内容。

例子

打开项目映射,如在Eclipse 中使用 defaultExpression 映射章节中更新的那样。

使用以下代码更新 CarEntity.java -

CarEntity.java

package com.tutorialspoint.entity;
import java.util.GregorianCalendar;

public class CarEntity {
   private int id;
   private double price;
   private GregorianCalendar manufacturingDate;
   private String name;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public double getPrice() {
      return price;
   }
   public void setPrice(double price) {
      this.price = price;
   }
   public GregorianCalendar getManufacturingDate() {
      return manufacturingDate;
   }
   public void setManufacturingDate(GregorianCalendar manufacturingDate) {
      this.manufacturingDate = manufacturingDate;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

使用以下代码更新 Car.java -

汽车.java

package com.tutorialspoint.model;

public class Car {
   private int id;
   private String price;
   private String manufacturingDate;
   private String brand;
   private String name;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public String getPrice() {
      return price;
   }
   public void setPrice(String price) {
      this.price = price;
   }
   public String getManufacturingDate() {
      return manufacturingDate;
   }
   public void setManufacturingDate(String manufacturingDate) {
      this.manufacturingDate = manufacturingDate;
   }
   public String getBrand() {
      return brand;
   }
   public void setBrand(String brand) {
      this.brand = brand;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

使用以下代码更新 CarMapper.java -

CarMapper.java

package com.tutorialspoint.mapper;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import com.tutorialspoint.entity.CarEntity;
import com.tutorialspoint.model.Car;
import java.util.List;
import java.util.UUID;

@Mapper( imports = UUID.class )
public interface CarMapper {
   @Mapping(source = "name", target = "name", defaultExpression = "java(UUID.randomUUID().toString())")
   @Mapping(target = "brand", constant = "BMW")
   @Mapping(source = "price", target = "price", numberFormat = "$#.00")
   @Mapping(source = "manufacturingDate", target = "manufacturingDate", dateFormat = "dd.MM.yyyy")
   Car getModelFromEntity(CarEntity carEntity);

   List<String> getListOfStrings(List<Integer> listOfIntegers);
   List<Car> getCars(List<CarEntity> carEntities);
}

使用以下代码更新 CarMapperTest.java -

CarMapperTest.java

package com.tutorialspoint.mapping;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.util.Arrays;
import java.util.GregorianCalendar;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import com.tutorialspoint.entity.CarEntity;
import com.tutorialspoint.mapper.CarMapper;
import com.tutorialspoint.model.Car;

public class CarMapperTest {
   private CarMapper carMapper = Mappers.getMapper(CarMapper.class);

   @Test
   public void testEntityToModel() {
      CarEntity entity = new CarEntity();
      entity.setPrice(345000);
      entity.setId(1);
      entity.setManufacturingDate(new GregorianCalendar(2015, 3, 5));

      CarEntity entity1 = new CarEntity();
      entity1.setPrice(445000);
      entity1.setId(2);
      entity1.setManufacturingDate(new GregorianCalendar(2015, 3, 5));

      List<CarEntity> carEntities = Arrays.asList(entity, entity1);

      Car model = carMapper.getModelFromEntity(entity);
      assertEquals("$345000.00",model.getPrice());
      assertEquals(entity.getId(), model.getId());

      assertEquals("BMW", model.getBrand());
      assertEquals("05.04.2015", model.getManufacturingDate());

      List<Integer> list = Arrays.asList(1,2,3);
      List<String> listOfStrings = carMapper.getListOfStrings(list);
      List<Car> listOfCars = carMapper.getCars(carEntities);

      assertEquals(3, listOfStrings.size());
      assertEquals(2, listOfCars.size());
   }
}

运行以下命令来测试映射。

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

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
...