2、MapStruct 深入理解

在深入学习MapStruct之前,我们先设想下实体转换场景,在一般的实体转换的场景下,我们需要考虑一下的问题:

1、字段名称之间的映射,比如:Person实体中的name属性需要映射到PersonDto实体中的name属性

2、属性值之间的映射,比如:Person实体中age属性为short,PersonDto实体中的age属性为int。两个类型之间的转换存在数据的缺失

3、空值问题

4、类的聚合问题。比如Person中还有country实体,两个实体间的country怎么映射

5、部分属性之间不想被映射:比如deptName不需要转换

@Data
public class Person{
String name ;
short age ;
String deptName ;
Country country; }
@Data
public class PersonDto{
String name ;
int age ;
Country country; }

MapStruct具有强大的注解,我们通过注解均可以解决上述问题。

@Mapper
public interface SourceTargetMapper {
    @Mapping(source = "name",target = "name")
    @Mapping(source = "age",target = "age")
    @Mapping(target = "deptName" , ignore = true)
    PersonDto toDto(Person person);
}

编译完成后,MapStruct会自动生成代码,方便我们调试程序,我们在target中可以找到相应的程序代码。

Mapper注解:表示这个接口做为一个转换器,Mapping:表示字段之间的映射关系。当然框架中还有更多的注解,下面是我做的思维导图。

下面是对MapStruct的注解做的思维导图,方便对此框架的理解。

 重点介绍下:BeforeMapping 、 AfterMapping 、 ObjectFactory 、Context

1、BeforeMapping、AfterMapping:表示的是转换动作之前或是之后需要执行的动作

2、ObjectFactory:由于我们转换到目标对象,一般执行都是目标对象的默认构造函数。此方法帮助我们生成一个对象

3、Context:我们在转换动作之前或是之后需要执行一系列的动作,那么数据怎么传送。context负责数据之间的共享。

原文地址:https://www.cnblogs.com/sunxianbiao/p/12706666.html