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負責數據之間的共享。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM