Java中的MapStruct實現(xiàn)詳解
簡單實現(xiàn)
引入依賴
<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.3.0.Final</version> </dependency> //注解處理器,根據(jù)注解自動生成mapper的實現(xiàn) <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.2.0.Final</version> </dependency>
我們在編譯時會報 java: No property named “numberOfSeats” exists in source parameter(s). Did you mean “null”? 錯誤,經(jīng)過查閱資料發(fā)現(xiàn) mapstruct-processor 和 Lombok 的版本需要統(tǒng)一一下:mapstruct-processor:1.2.0.Final , Lombok:1.16.14。
準(zhǔn)備實體類
Car.java 和 數(shù)據(jù)傳輸類 CarDto.java
@NoArgsConstructor @AllArgsConstructor @Data public class Car { private String make; private int numberOfSeats; private CarType type; } @Data @NoArgsConstructor @AllArgsConstructor public class CarDto { private String make; private int seatCount; private String type; }
創(chuàng)建映射器接口
定義映射方法
@Mapper public interface CarMapper { CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); @Mapping(source = "numberOfSeats", target = "seatCount") CarDto carToCarDto(Car car); }
解析分析:
- @Mapper 將接口標(biāo)記為映射接口,并允許 MapStruct 處理器在編譯期間啟動。這里的 @Mapper 注解不是 mybatis 的注解,而是 org.mapstruct.Mapper 的;
- 實際映射方法 carToCarDto() 期望源對象 Car 作為參數(shù),并返回目標(biāo)對象 CarDto ,方法名可以自由選擇;
- 對于源對象和目標(biāo)對象中具有不同名稱的屬性,可以使用 @Mapping 注釋來配置名稱;
- 對于源對象和目標(biāo)對象中具有不同類型的屬性,也可以使用 @Mapping 注釋來進(jìn)行轉(zhuǎn)換,比如:類型屬性將從枚舉類型轉(zhuǎn)換為字符串;
- 一個接口中可以有多個映射方法,對于所有的這些方法,MapStruct 將生成一個實現(xiàn);
- 該接口的實現(xiàn)實例可以從 Mappers 中獲得,接口聲明一個 INSTANCE,為客戶端提供對映射器實現(xiàn)的訪問。
實現(xiàn)類
我們可以將代碼進(jìn)行編譯,然后會發(fā)現(xiàn)在 target 文件中生成了 CarMapperImpl.class 文件:
從代碼中可以看出 MapStruct 為我們自動生成了 set/get 代碼,并且對枚舉類進(jìn)行了特殊處理。
客戶端
@Test public void shouldMapCarToDto() { Car car = new Car( "Morris", 5, CarType.SEDAN ); CarDto carDto = CarMapper.INSTANCE.carToCarDto( car ); System.out.println(carDto); }
執(zhí)行結(jié)果:
小結(jié): MapStruct 基于 mapper 接口,在編譯期動態(tài)生成 set/get 代碼的 class 文件 ,在運(yùn)行時直接調(diào)用該 class 文件。
到此這篇關(guān)于Java中的MapStruct實現(xiàn)詳解的文章就介紹到這了,更多相關(guān)MapStruct實現(xiàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中MapStruct的使用詳解
- Java中MapStruct使用方法解析
- Java中的MapStruct知識點(diǎn)總結(jié)
- Java中的MapStruct的使用方法代碼實例
- Java中MapStruct入門使用及對比
- Java高效映射工具M(jìn)apStruct的使用示例
- Java中MapStruct映射處理器報錯的問題解決
- Java高性能實體類轉(zhuǎn)換工具M(jìn)apStruct的使用教程詳解
- SpringBoot中MapStruct實現(xiàn)優(yōu)雅的數(shù)據(jù)復(fù)制
- SpringBoot使用MapStruct生成映射代碼的示例詳解
- MapStruct升級遇到的問題及解決方案
相關(guān)文章
Linux(centos7)安裝jdk1.8的詳細(xì)步驟
Linux的使用相信大家都要用到j(luò)ava吧,在使用java前我們得先安裝jdk以及配置環(huán)境變量等工作,下面這篇文章主要給大家介紹了關(guān)于Linux(centos7)安裝jdk1.8的詳細(xì)步驟,需要的朋友可以參考下2023-10-10spring-redis-session 自定義 key 和過期時間
這篇文章主要介紹了spring-redis-session 自定義 key 和過期時間,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Springboot+Poi導(dǎo)入Excel表格實現(xiàn)過程詳解
這篇文章主要介紹了Springboot+Poi導(dǎo)入Excel表格實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09