3.3. Mapping methods with several source parameters(具有多个源参数的映射方法)
Posted Autumn trousers
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类型,被更新的这个属性将被清空,然后把入参源参数中的集合属性填充到已清空的目标属性上。
以上是关于3.3. Mapping methods with several source parameters(具有多个源参数的映射方法)的主要内容,如果未能解决你的问题,请参考以下文章
springmvc搭建环境时报No mapping found for HTTP request with URI [/exam3/welcome] in DispatcherServlet with
No mapping found for HTTP request with URI [/HelloWeb/] in DispatcherServlet with name 'HelloWeb
Ambiguous mapping. Cannot map *** method 报错解决
Ambiguous mapping. Cannot map *** method 报错解决
Thymeleaf with Spring MVC error No mapping found for HTTP request with URI
Persisting data with object-relational mapping-002设置JPA的EntityManagerFact