mapstruct使用,mapstruct高级用法

  mapstruct使用,mapstruct高级用法

  

目录

1 MapStruct配置2原理性能2.1实现原理3用法3.1检索转换器3.1.1由Mappers Factory获取3.1.2由Dependent Injection获取3.2简单映射3.2.1基本映射3.2.2多源参数映射3.2.3更新对象3.3数据类型转换3.3.1对于基本数据类类型将自动进行隐式转换。3.3.2指定转换格式。3.3.3属性是复杂对象的映射。定制转换器。3.3.5使用限定符来限制使用转换方法3.4映射的映射。3.5枚举值之间的转换。3.6自定义Bean生成。3.7默认值和常数3.8有继承关系。结果处理。3.9映射关系继承了3.10复杂映射的实现。3.10.1使用java表达式的映射3.10.2使用decorators的映射3.10.3使用前后处理的复杂映射

 

  

1 MapStruct配置

MapStuct的使用非常简单,只需介绍相应的jar包即可。

 

  属性map struct . version 1 . 3 . 1 . final/map struct . version/properties dependency groupIdorg.mapstruct/groupId artifactId map struct/artifactId version $ { map struct . version }/version/dependency dependency groupIdorg.mapstruct/groupId artifactId map struct-processor/artifactId version $ { map struct . version }/version/dependency

  

2 原理性能

 

  00-1010对象复制工具一般分为两种类型:

  (1)运行时,通过反射调用set/get方法或者直接给成员变量赋值。

  (2)编译时,生成调用get/set方法赋值的代码,生成相应的类文件。

  MapStrut属于第二种,编译时消耗一点时间,换取运行时的高性能。

  接口声明:

  @ mapper public interface product assembler { Sku dto toto(Sku Sku);}编辑生成的类反编译

  公共类ProductAssemblerImpl实现product assembler { @ Override public Sku dto tod to(Sku Sku){ if(Sku==null){ return null;} SKU dto SKU dto=new SKU dto();SKU dto . sets kuid(SKU . gets kuid());返回skuDTO}}

  00-1010使用@Mapper注释声明Mapper,可以是接口,也可以是抽象类。

  使用@Mapping注释实现灵活的字段映射,自定义映射规则。

  00-1010在声明转换接口后,MapStruct提供了几种方法来获取生成的映射器。

  00-1010您可以通过提供的Mappers工厂类获得指定的类型。

  @ Mapper公共接口assembler {//使用工厂方法获取Mapper实例assembler instance=mappers . get Mapper(assembler . class);ProductDTO toDTO(产品产品);}

  

2.1 实现原理

MapStuct同时支持与其他框架的结合,通过依赖

 

  注入的方式获取Mapper实例。目前支持spring和cdi。

  

@Mapper(componentModel = "spring")public interface Assembler { ProductDTO toDTO(Product product);}
@Component public class AssemblerImpl implements Assembler { @Override public ProductDTO toDTO(Product product) { if ( product == null ) { return null; } ProductDTO productDTO = new ProductDTO(); productDTO.setProductId( product.getProductId() ); return productDTO; }}

 

  

3.2 简单映射

 

  

3.2.1 基本映射

对于同名同属性的字段,无需特别声明指定,自动转换。

 

  对于不同名相同属性的字段,可以使用Mapping注解指定。

  

@Data@NoArgsConstructor@AllArgsConstructorpublic class Product { private String productId; private String name;}
@Data@NoArgsConstructor@AllArgsConstructorpublic class ProductDTO implements Serializable { private static final long serialVersionUID = -6780322740093464581L; private String productId; private String productName;}pre>定义映射器:

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: