1. spring 工具類
BeanUtils.copyProperties 簡單的實體類之間的轉換,不能copy Date類型,利用java反射的原理來進行屬性的復制。如果兩個實體的類的里面嵌套實體類的類型不一樣,copy后實體類的變為原實體類的類型,當在此使用
目標實體類的時候會發生類型的轉化異常。
2.
MapStruct是一個代碼生成器的工具類,簡化了不同的Java Bean之間映射的處理,所以映射指的就是從一個實體變化成一個實體。在實際項目中,我們經常會將PO轉DTO、DTO轉PO等一些實體間的轉換。在轉換時大部分屬性都是相同的,只有少部分的不同,這時我們可以通過mapStruct的一些注解來匹配不同屬性,可以讓不同實體之間的轉換變的簡單。
<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>${org.mapstruct.version}</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </dependency>
要生成一個PeopleDTO與PeopleEntity對象相互轉換的映射器,我們需要定義一個mapper接口。像這兩個實體類有些屬性不一樣時,我們可以通過@Mapping注解來進行轉換.
@Mapper注解標記這個接口作為一個映射接口,並且是編譯時MapStruct處理器的入口。
@Mapping解決源對象和目標對象中,屬性名字不同的情況。
Mappers.getMapper自動生成的接口的實現可以通過Mapper的class對象獲取,從而讓客戶端可以訪問Mapper接口的實現。
MapStruct是以Java編譯器插件的形式來處理注解,生成mapper接口的實現。因此在使用之前我們要手工編譯或啟動程序時IDEA也會幫我們編譯了,這里最好還是手動編譯。