https://plugins.jetbrains.com/plugin/10036-mapstruct-support
)
PS:这里用到Lombok,因此也需要下载idea插件市场的一个Lombok插件
确保您idea版本至少为 2018.2.x(由于对maven-compiler-plugin的注解处理器的支持来自该版本,因此是必需的)。
在IntelliJ中启用注释处理(Build, Execution, Deployment -> Compiler -> Annotation Processors)
数据来源实体,数据库实体(this) 转换到 DTO
|
CarDto
|
转换目标实体,DTO 转换到 响应实体(this)
|
映射interface
|
CarMapper
|
定义用于转换映射的interface,MapStruct会实现这个接口
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
package raven.spring.study;
import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; import lombok.ToString; import org.junit.jupiter.api.Test; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers;
class MapStructTests {
@Test public void shouldMapCarToDtoTest() {
Car car = new Car( "Morris", 5, CarType.SEDAN ,200.19);
CarDto carDto = CarMapper.INSTANCE.carToCarDto(car);
System.out.println(car); System.out.println(carDto);
System.out.println("同类型同名:" + carDto.getMake().equals("Morris")); System.out.println("同类型非同名" + (carDto.getSeatCount() == (5))); System.out.println("字符串-枚举:" + carDto.getType().equals("SEDAN")); System.out.println("非同类型非同名:" + carDto.getMaxCarSpeed().equals(String.valueOf(car.getMaxSpeed())));
}
}
@Data @AllArgsConstructor @ToString class Car {
private String make; private int numberOfSeats; private CarType type; private double maxSpeed; }
@Data @ToString class CarDto {
private String make; private int seatCount; private String type; private String maxCarSpeed; }
@AllArgsConstructor @Getter enum CarType { SEDAN("SEDAN"); private String key; }
@Mapper interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
@Mapping(source = "numberOfSeats", target = "seatCount") @Mapping(source = "maxSpeed", target = "maxCarSpeed") CarDto carToCarDto(Car car); }
|