zoukankan      html  css  js  c++  java
  • 第三节MapStruct翻译--Defining a mapper

    第三节MapStruct--Defining a mapper

    在这一章节你将学到如何用mapstruct和它的一些必要的操作选项来定义一个bean mapper。

    3.1 Basic mappings

    创建一个java接口类,使用必要的方法和注解来创建一个简单的mapper,其中要用到org.mapstruct.Mapper包的注解:

    例6:

    @Mapper
    public interface CarMapper {
      @Mappings({
      @Mapping(source = "make", target = "manufacturer"),
      @Mapping(source = "numberOfSeats", target = "seatCount")
      })
      CarDto carToCarDto(Car car);
    
      @Mapping(source = "name", target = "fullName")
      PersonDto personToPersonDto(Person person);
    }
    

    @Mapper注解可以致使MapStruct代码生成器在编译时期创建一个CarMapper接口的实现类。

    在生成的实现方法中,会从Car类源中读取所有可读属性字段,复制并绑定到目标类CarDto中。如果等价属性间(类源--目标类)出现字段变量名不同的情况,我们可以使用@Mapper注解来自定义指定。

    为了更好的理解MapStruct都做了些什么,可以查看接下来的例子:

    例7.MapStruct生成的代码(carToCarDto)

    // GENERATED CODE
    public class CarMapperImpl implements CarMapper {
      
      @Override
      public CarDto carToCarDto(Car car) {
        if ( car == null ) {
          return null;
        }
        CarDto carDto = new CarDto();
        if ( car.getFeatures() != null ) {
          carDto.setFeatures( new ArrayList<String>( car.getFeatures() ) );
        }
        carDto.setManufacturer( car.getMake() );
        carDto.setSeatCount( car.getNumberOfSeats() );
        carDto.setDriver( personToPersonDto( car.getDriver() ) );
        carDto.setPrice( String.valueOf( car.getPrice() ) );
        if ( car.getCategory() != null ) {
          carDto.setCategory( car.getCategory().toString() );
        }
        carDto.setEngine( engineTtoEngineDto( car.getEngine() ) );
        return carDto;
      }
      
      @Override
      public PersonDto personToPersonDto(Person person) {
      	//...
      }
      
      private EngineDto engineToEngineDto(Engine engine) {
        if ( engine == null ) {
        	return null;
        }
        EngineDto engineDto = new EngineDto();
        engineDto.setHorsePower(engine.getHorsePower());
        engineDto.setFuel(engine.getFuel());
        return engineDto;
      }
    }
    

    通常MapStruct的代码生成策略是尽可能多的查看用户的自定义策略。特别是这意味着所有的这些值都将有计划的通过getter/seter方法从源类复制到目标类,而不是通过反射或者其他方式。

    从例子中可以发现,所有通过注解指定的映射都被MapStruct作用到了代码生成中。如果映射属性的类型在源和目标实体中是不同的,MapStruct将要么应用自动转换,要么可选地调用/创建另一映射方法。当且仅当源和目标属性是简单的bean属性(即变量类型不是集合或字典类型),MapStruct才会创建一个新映射。

    MapStruct映射策略中包括源和目标类型的所有公共属性,也包括在父类上声明的属性。

    3.2. Adding custom methods to mappers(在映射器中添加自定义方法)

    后面添加

  • 相关阅读:
    JAVA编程-------29、求3*3矩阵对角线元素之和
    JAVA编程---------28、对10个数进行排序(冒泡排序)
    JAVA编程-------------27、100以内的素数
    JAVA编程----------26、请输入星期几的第一个字母来判断一下星期几, 第一个字母相同,则判断第二个字母,以此类推
    JAVA编程-----------25、查找5位数的回文数
    JAVA编程---------24、输入一个数,判断位数,并逆序输出
    JAVA编程------------23、递归
    JAVA编程------------22、利用递归求5!
    JAVA编程--------21、求1!+2!+....+20!=
    JAVA编程------------20、计算2/1+3/2+5/3+8/5+...求前20项之和
  • 原文地址:https://www.cnblogs.com/wzk1992/p/9164760.html
Copyright © 2011-2022 走看看