zoukankan      html  css  js  c++  java
  • 3.3. Mapping methods with several source parameters(具有多个源参数的映射方法)

    3.3. Mapping methods with several source parameters(具有多个源参数的映射方法)

    MapStruct 还支持具有多个源参数的映射方法.这是比较实用的, 例如: 为了将多个实体合并为一个数据传输对象。下面显示了一个示例:

    Example 10. Mapping method with several source parameters

    @Mapper
    public interface AddressMapper {
    
        @Mappings({
            @Mapping(source = "person.description", target = "description"),
            @Mapping(source = "address.houseNo", target = "houseNumber")
        })
        DeliveryAddressDto personAndAddressToDeliveryAddressDto(Person person, Address address);
    }
    

    显示的映射方法采用两个源参数, 并返回一个组合的目标对象。与单参数映射方法一样, 属性按名称进行映射。

    如果多个源对象定义了同名的属性,必须使用 @Mapping 批注指定要从中检索属性的源参数,如示例中的描述属性所示。如果不解决此类歧义, 代码将报Error。对于仅在给定源对象中存在一次的属性, 可选择指定源参数的名称, 因为它可以自动确定。

    注意:在使用 @Mapping 注解时, 确定属性具体在哪一个参数是必需的。

    如果所有源参数都为 null, 则具有多个源参数的映射方法将返回 null。否则, 将会实例化目标对象, 并传播提供的参数中的所有属性。

    MapStruct 还提供了直接引用源参数的可能性。

    Example 11. Mapping method directly referring to a source parameter

    @Mapper
    public interface AddressMapper {
    
        @Mappings({
            @Mapping(source = "person.description", target = "description"),
            @Mapping(source = "hn", target = "houseNumber")
        })
        DeliveryAddressDto personAndAddressToDeliveryAddressDto(Person person, Integer hn);
    }
    

    上面这种情况下,就是源参数直接映射到目标对象。参数:hn, 即非 bean 类型 (在本例中为 java.lang.Integer) 映射到 DeliveryAddressDto的houseNumber。

    3.4. Updating existing bean instances(更新现有 bean 实例)

    在某些情况下, 您的映射不需要创建目标类型的新实例, 而是更新该类型的现有实例。通过为目标对象添加参数并使用 @MappingTarget 标记此参数, 可以实现此类映射。如下例:

    Example 12. Update method

    @Mapper
    public interface CarMapper {
    
        void updateCarFromDto(CarDto carDto, @MappingTarget Car car);
    }
    

    编译生成后的方法updateCarFromDto() ,将使用入参carDto的属性值,有目的地更新目标对象car。除了void,您还可以将方法的返回类型设置为目标参数的类型,这样生成的实现类,将会更新并返回入参中的目标对象。这种做法可以使映射方法进行流畅的调用。

    如果被更新目标对象的属性是个集合或者Map类型,被更新的这个属性将被清空,然后把入参源参数中的集合属性填充到已清空的目标属性上。

  • 相关阅读:
    每日英语:Here's Why You Won't Finish This Article
    每日英语:'Still Out Of Work?' How To Handle Holiday Small Talk
    每日英语:How to Spend Christmas in Asia
    每日英语:Losing It at the Movies: Silly Beats Sober in China's Box Office
    每日英语:How Do iPhone Photos Impact Our Experience?
    一种使用CSS固定表头和列的方法
    一个asp.net中使用的flash展示控件
    gridview中cell的选择和编辑
    asp.net 2.0中的profile对象简介
    gridview中使用方向键标记选中行
  • 原文地址:https://www.cnblogs.com/wzk1992/p/9197819.html
Copyright © 2011-2022 走看看