欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的MapStruct實(shí)現(xiàn)詳解

 更新時(shí)間:2023年11月27日 10:20:12   作者:一碼評(píng)川  
這篇文章主要介紹了Java中的MapStruct實(shí)現(xiàn)詳解,MapStruct 是一個(gè)代碼生成器,它基于約定優(yōu)先于配置的方法大大簡(jiǎn)化了 JavaBean 類型之間映射的實(shí)現(xiàn),生成的映射代碼使用普通方法調(diào)用,需要的朋友可以參考下

簡(jiǎn)單實(shí)現(xiàn)

引入依賴

<dependency>
 <groupId>org.mapstruct</groupId>
 <artifactId>mapstruct-jdk8</artifactId>
 <version>1.3.0.Final</version>
</dependency>
//注解處理器,根據(jù)注解自動(dòng)生成mapper的實(shí)現(xiàn)
<dependency>
 <groupId>org.mapstruct</groupId>
 <artifactId>mapstruct-processor</artifactId>
 <version>1.2.0.Final</version>
</dependency>

我們?cè)诰幾g時(shí)會(huì)報(bào) java: No property named “numberOfSeats” exists in source parameter(s). Did you mean “null”? 錯(cuò)誤,經(jīng)過查閱資料發(fā)現(xiàn) mapstruct-processor 和 Lombok 的版本需要統(tǒng)一一下:mapstruct-processor:1.2.0.Final , Lombok:1.16.14。

準(zhǔn)備實(shí)體類

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 處理器在編譯期間啟動(dòng)。這里的 @Mapper 注解不是 mybatis 的注解,而是 org.mapstruct.Mapper 的;
  • 實(shí)際映射方法 carToCarDto() 期望源對(duì)象 Car 作為參數(shù),并返回目標(biāo)對(duì)象 CarDto ,方法名可以自由選擇;
  • 對(duì)于源對(duì)象和目標(biāo)對(duì)象中具有不同名稱的屬性,可以使用 @Mapping 注釋來配置名稱;
  • 對(duì)于源對(duì)象和目標(biāo)對(duì)象中具有不同類型的屬性,也可以使用 @Mapping 注釋來進(jìn)行轉(zhuǎn)換,比如:類型屬性將從枚舉類型轉(zhuǎn)換為字符串;
  • 一個(gè)接口中可以有多個(gè)映射方法,對(duì)于所有的這些方法,MapStruct 將生成一個(gè)實(shí)現(xiàn);
  • 該接口的實(shí)現(xiàn)實(shí)例可以從 Mappers 中獲得,接口聲明一個(gè) INSTANCE,為客戶端提供對(duì)映射器實(shí)現(xiàn)的訪問。

實(shí)現(xiàn)類

我們可以將代碼進(jìn)行編譯,然后會(huì)發(fā)現(xiàn)在 target 文件中生成了 CarMapperImpl.class 文件:

在這里插入圖片描述

從代碼中可以看出 MapStruct 為我們自動(dòng)生成了 set/get 代碼,并且對(duì)枚舉類進(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 接口,在編譯期動(dòng)態(tài)生成 set/get 代碼的 class 文件 ,在運(yùn)行時(shí)直接調(diào)用該 class 文件。

到此這篇關(guān)于Java中的MapStruct實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)MapStruct實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux(centos7)安裝jdk1.8的詳細(xì)步驟

    Linux(centos7)安裝jdk1.8的詳細(xì)步驟

    Linux的使用相信大家都要用到j(luò)ava吧,在使用java前我們得先安裝jdk以及配置環(huán)境變量等工作,下面這篇文章主要給大家介紹了關(guān)于Linux(centos7)安裝jdk1.8的詳細(xì)步驟,需要的朋友可以參考下
    2023-10-10
  • 一文掌握Spring的創(chuàng)建與使用

    一文掌握Spring的創(chuàng)建與使用

    這篇文章詳細(xì)介紹了spring的創(chuàng)建與使用,文章中有詳細(xì)的代碼示例和圖片介紹,對(duì)學(xué)習(xí)有一定的而參考價(jià)值,需要的同學(xué)可以參考一下
    2023-04-04
  • 如何在IDEA中快速解決Jar沖突詳解

    如何在IDEA中快速解決Jar沖突詳解

    相信很多同學(xué)在過去做項(xiàng)目都遇到過Jar沖突的問題,在本地環(huán)境沒問題,一旦部署到測(cè)試或生產(chǎn)環(huán)境突然就啟動(dòng)報(bào)錯(cuò),報(bào)類似classNotFound的Exception,本文詳細(xì)整理了如何在IDEA中快速解決Jar沖突,需要的朋友可以參考下
    2021-06-06
  • Java Class 解析器實(shí)現(xiàn)方法示例

    Java Class 解析器實(shí)現(xiàn)方法示例

    這篇文章主要通過對(duì)class文件的分析,介紹了Java Class 解析器實(shí)現(xiàn)方法示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • java文件上傳下載功能實(shí)現(xiàn)代碼

    java文件上傳下載功能實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了java文件上傳下載功能實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2016-06-06
  • spring-redis-session 自定義 key 和過期時(shí)間

    spring-redis-session 自定義 key 和過期時(shí)間

    這篇文章主要介紹了spring-redis-session 自定義 key 和過期時(shí)間,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解Spring循環(huán)依賴的解決方案

    詳解Spring循環(huán)依賴的解決方案

    這篇文章主要介紹了詳解Spring循環(huán)依賴的解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Springboot+Poi導(dǎo)入Excel表格實(shí)現(xiàn)過程詳解

    Springboot+Poi導(dǎo)入Excel表格實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Springboot+Poi導(dǎo)入Excel表格實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • grpc-java?k8s下的負(fù)載均衡處理方法

    grpc-java?k8s下的負(fù)載均衡處理方法

    這篇文章主要為大家介紹了grpc-java?k8s下的負(fù)載均衡的處理方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • Java編程中10個(gè)最佳的異常處理技巧

    Java編程中10個(gè)最佳的異常處理技巧

    這篇文章主要介紹了Java編程中10個(gè)最佳的異常處理技巧,在本文中,將討論Java異常處理最佳實(shí)踐,這些Java最佳實(shí)踐遵循標(biāo)準(zhǔn)的JDK庫,和幾個(gè)處理錯(cuò)誤和異常的開源代碼,這還是一個(gè)提供給java程序員編寫健壯代碼的便利手冊(cè),需要的朋友可以參考下
    2015-01-01

最新評(píng)論