首页 > 其他分享 >关于mapStruct-高阶用法

关于mapStruct-高阶用法

时间:2023-10-30 11:11:38浏览次数:36  
标签:Mapper 映射 mapStruct 高阶 用法 source 注解 方法 表达式

描诉:符合应用场景的实用的mapStruct对于bean映射的方法
1.使用自定义转换器(Converters): 如果你需要自定义映射逻辑,可以创建自定义转换器类,并使用@Mapper注解的uses属性来引用它们。这允许你在映射中使用自定义方法,以满足特定需求.

@Mapper(uses = {CustomConverter.class})
public interface MyMapper {
    MyDto entityToDto(MyEntity entity);
}

 

2.使用expression属性: 在@Mapping注解中,你可以使用expression属性来定义更复杂的映射表达式,包括Java表达式和方法引用。这对于执行特定的映射逻辑非常有用。

@Mapping(target = "fullName", expression = "java(entity.getFirstName() + ' ' + entity.getLastName())")
MyDto entityToDto(MyEntity entity);

 

3. 映射继承: 如果你有多个映射接口,并且它们具有相似的映射规则,你可以使用@InheritInverseConfiguration@InheritConfiguration来继承映射配置。这减少了代码重复并提高了可维护性。

  3.1 @InheritConfiguration: 这个注解用于继承源映射方法的配置,以便将其应用于目标映射方法。这是在目标映射方法上使用的注解。

  • 在源映射方法上定义配置(通常是在源映射接口中)。
  • 使用@InheritConfiguration注解在目标映射方法上引用源映射方法的配置。
@Mapper
public interface CarMapper {
    @InheritConfiguration
    CarDto carToCarDto(Car car);

    // Other mapping methods
}

@Mapper
public interface PersonMapper {
    @InheritConfiguration
    PersonDto personToPersonDto(Person person);

    // Other mapping methods
}

  3.2 @InheritInverseConfiguration: 这个注解用于继承目标映射方法的逆向映射配置。逆向映射是指从目标类型到源类型的映射,通常用于更新操作。这是在目标映射方法的逆向映射方法上使用的注解。

  • 在目标映射方法的逆向映射方法上定义配置。
  • 使用@InheritInverseConfiguration注解在源映射方法上引用逆向映射方法的配置。
@Mapper
public interface CarMapper {
    @InheritInverseConfiguration
    Car updateCarFromDto(CarDto carDto, @MappingTarget Car car);

    // Other mapping methods
}

@Mapper
public interface PersonMapper {
    @InheritInverseConfiguration
    Person updatePersonFromDto(PersonDto personDto, @MappingTarget Person person);

    // Other mapping methods
}

 

4. 条件映射: 使用condition属性在@Mapping注解中定义条件,以便仅在满足条件时进行映射。

//编写条件表达式: 在条件属性中,你可以编写一个Java表达式,该表达式应该返回一个布尔值(true或false)。这个表达式通常包括在java()方法中,以便在MapStruct中进行评估。

@Mapping(source = "sourceField", target = "targetField", condition = "java(source.getCondition() == 1)")
TargetDto sourceToTarget(SourceEntity source);

//在上面的示例中,条件表达式检查sourceField的某个属性是否等于1。如果等于1,则条件为//真,映射将执行;否则,映射将被跳过。

//在条件表达式中使用源对象的属性: 你可以在条件表达式中使用源对象的属性,以便根据源//对象的状态或值来决定是否执行映射。


@Mapping(source = "sourceField", target = "targetField", condition = "java(source.getSomeFlag() == true)")
TargetDto sourceToTarget(SourceEntity source);

 

5. 映射构造函数: MapStruct支持通过构造函数进行映射,可以通过@Mapper注解的componentModel属性设置为"spring""cdi"来启用构造函数映射。这对于将数据直接注入到DTO或实体中非常有用。

6. 后处理映射: 使用@AfterMapping注解来标记一个方法,该方法会在映射完成后执行,允许你执行额外的处理步骤。

标签:Mapper,映射,mapStruct,高阶,用法,source,注解,方法,表达式
From: https://www.cnblogs.com/origin-zy/p/17797314.html

相关文章

  • es查询script 用法
    在Elasticsearch中,可以使用脚本(Script)来执行自定义的逻辑和计算。脚本可以用于查询、过滤、排序等各种操作。下面是关于脚本使用语法的详细说明,并附上示例说明:脚本语言:Elasticsearch支持多种脚本语言,如Painless、Groovy等。但从Elasticsearch7.0版本开始,默认只支持Painless脚本语......
  • SQL多表联合查询用法介绍
    SQL多表联合查询用法介绍一、联合查询基本概念联合查询,又称为多表查询,是指针对两个或多个表进行查询,并将结果集合并起来展示的过程。在实际应用中,联合查询是很常见的查询方式,因为单张表无法满足复杂的查询需求。二、联合查询的语法联合查询的语法格式如下:SELECTcolumn1,co......
  • 列表包裹元组,指定元组中数字大小排序字段operator用法
    importoperatorsomelist=[(1,5,8),(6,2,4),(9,7,5)]somelist.sort(key=operator.itemgetter(0))print(somelist)#[(1,5,8),(6,2,4),(9,7,5)]somelist.sort(key=operator.itemgetter(1))print(somelist)#[(6,2,4),(1,5,8),(9,7,5)]somelist.sor......
  • multiset 用法
    头文件#include<set>代码#include<set>#include<iostream>usingnamespacestd;intmain(){ multiset<int>ms; ms.insert(1); ms.insert(5); ms.insert(5); ms.insert(5); ms.insert(2); ms.insert(1); for(autoiter=ms.be......
  • 深入理解Java IO流: 包括字节流和字符流的用法、文件读写实践
    (文章目录)......
  • Python reversed函数及用法
    reserved()是Pyton内置函数之一,其功能是对于给定的序列(包括列表、元组、字符串以及range(n)区间),该函数可以返回一个逆序序列的迭代器(用于遍历该逆序序列)。reserved()函数的语法格式如下:reversed(seq)其中,seq可以是列表,元素,字符串以及range()生成的区间列表。下面程......
  • string的相关用法
    string的相关用法一、string对象初始化  常见的初始化有两种方式:拷贝初始化和直接初始化。点击查看代码strings1="hello";//拷贝初始化strings2("world");//直接初始化strings3(10,c);//十个c,cccccccccc二、string对象的运算 string运算左右位必须要有一个str......
  • Python中的equals用法介绍
      一、使用场景在Python中,equals(等于)经常用于比较两个对象是否相等。在Python中,使用==可以判断两个对象的值是否相等,使用is可以判断两个变量是否引用同一个对象。但是对于不同类型的对象,使用==方法可能会出现意想不到的结果。因此,在使用==判断两个对象是否相等时,需要注意以......
  • update-alternatives用法
    sudoupdate-alternatives--listgo现实go有哪些替换版本sudoupdate-alternatives--configgo选择特定版本gosudoupdate-alternatives--install/usr/bin/gogo/usr/local/go/bin/go1 --slave/usr/bin/gofmtgofmt/usr/local/go/bin/gofmt添加go的新配置,后跟子配......
  • iview Dropdown用法事例
    <Dropdowntransfer="true"@on-click="dropdownAction($event,params.row)"><ahref="javascript:void(0)">...</a><Dropdown-menuslot=&qu......