采得百花成蜜后,为谁辛苦为谁甜。这篇文章主要讲述第三节MapStruct翻译--Defining a mapper相关的知识,希望能为你提供帮助。
第三节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(在映射器中添加自定义方法)
后面添加
推荐阅读
- for 循环的时候 append() 是移动不是复制
- 10.8 android输入系统_实战_使用GlobalKey一键启动程序
- Android之AAPT2 error: check logs for details
- Android开发学习——UI篇1.0
- 10.6 android输入系统_Dispatcher线程_总体框架
- 10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析
- Cannot find element: #App
- 安卓模拟器——AVDGenymotion逍遥安卓模拟器
- 安卓详细布局分析-从根布局到具体布局