MapStruct

作者: AbsurdOS | 来源:发表于2017-04-12 20:13 被阅读0次

在mvc层经常会遇到这样的一种情况,是否使用DTO(数据传输对象),还是直接使用model返回?其实这都可以,前者叫封闭领域模型风格,后者叫开放领域模型风格。因为前者可以排除一些不需要返回的字段但是需要进行拷贝,后者就不需要经过处理。另外,都会遭遇到一种情况:如性别在后台是通过0和1,但是需要返回前端男或者女。这种情况可以使用数据字典做一个良好的处理,这个这里不谈。
MapStruct可以很好的处理封闭领域模型风格的model到DTO的拷贝。
https://github.com/mapstruct/mapstruct

public class CycleAvoidingMappingContext {
    private Map<Object, Object> knownInstances = new IdentityHashMap<Object, Object>();

    @BeforeMapping
    public <T> T getMappedInstance(Object source, @TargetType Class<T> targetType) {
        return (T) knownInstances.get( source );
    }

    @BeforeMapping
    public void storeMappedInstance(Object source, @MappingTarget Object target) {
        knownInstances.put( source, target );
    }

public class Car {
 
    private String make;
    private int numberOfSeats;
    private CarType type;
     private List<Car> team;
 
    //constructor, getters, setters etc.
}
public class CarDto {
 
    private String make;
    private int seatCount;
    private String type;
    private List<CarDto> team;
 
    //constructor, getters, setters etc.
}
@Mapper 
public interface CarMapper {
 
    CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); 
  @Mappings( {
        @Mapping(source = "numberOfSeats", target = "seatCount")
    } )
    
    CarDto carToCarDto(Car car, @Context CycleAvoidingMappingContext context); 
   @InheritInverseConfiguration
    Car fromCar(CarDto carDto, @Context CycleAvoidingMappingContext context);
}
@Test
public void shouldMapCarToDto() {
    //given
    Car car = new Car( "Morris", 5, CarType.SEDAN );
 
    //when
    CarDto carDto = CarMapper.INSTANCE.carToCarDto( car );
 
    //then
    assertThat( carDto ).isNotNull();
    assertThat( carDto.getMake() ).isEqualTo( "Morris" );
    assertThat( carDto.getSeatCount() ).isEqualTo( 5 );
    assertThat( carDto.getType() ).isEqualTo( "SEDAN" );
}

相关文章

  • mapstruct 和lombok 结合之后mapstruct生

    lombok和mapstruct配合转换bean后,mapstruct生成空的实现. 如果出现mapstruct和...

  • mapStruct使用

    https://mapstruct.org/

  • 简化mapstruct代码: mapstruct-spring-

    mapstruct MapStruct 是一个属性映射工具,只需要定义一个 Mapper 接口,MapStruc...

  • Java mapstruct生成实现

    1.注意:lombok和mapstruct一定要注意引用顺序,lombok一定要在mapstruct前面,不然生成...

  • 推荐一个神器,MapStruct,你用过吗?

    官网地址:http://mapstruct.org/ MapStruct是一个代码生成器,简化了不同的Java B...

  • MapStruct实现对象映射

    1 序 MapStruct是一个属性映射工具,只需要使用@Mapper注解标注的映射接口。MapStruct就会自...

  • MapStruct

    概述 MapStruct 可以将某几种类型的对象映射为另外一种类型,如将多个 DO(业务实体对象) 对象转换为 D...

  • MapStruct

    在mvc层经常会遇到这样的一种情况,是否使用DTO(数据传输对象),还是直接使用model返回?其实这都可以,前者...

  • MapStruct使用

    背景 在一个成熟可维护的工程中,细分模块后,domian工程最好不要被其他工程依赖,但是实体类一般存于domain...

  • MapStruct 使用

    对象映射工具的由来 大型项目采用分层开发,每层的数据模型都不同:在持久化层,模型层为 PO(Persistent ...

网友评论

      本文标题:MapStruct

      本文链接:https://www.haomeiwen.com/subject/zdxvattx.html