最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • springIOC的使用流程及spring中使用類型轉(zhuǎn)換器的方式

    springIOC的使用流程及spring中使用類型轉(zhuǎn)換器的方式

    Spring IOC是Spring框架的核心原理之一,它是一種軟件設(shè)計(jì)模式,用于管理應(yīng)用程序中的對(duì)象依賴關(guān)系,這篇文章主要介紹了springIOC的使用流程以及spring中如何使用類型轉(zhuǎn)換器,需要的朋友可以參考下
    2023-06-06
  • java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn)

    java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn)

    這篇文章主要介紹了java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java將中文轉(zhuǎn)化為拼音的簡(jiǎn)單代碼示例

    Java將中文轉(zhuǎn)化為拼音的簡(jiǎn)單代碼示例

    在我們使用手機(jī)通訊錄或各種APP的搜索功能時(shí),既可以根據(jù)中文搜索,也可以根據(jù)拼音搜索,這種時(shí)候就使用到了中文轉(zhuǎn)拼音的功能了,下面這篇文章主要給大家介紹了關(guān)于Java將中文轉(zhuǎn)化為拼音的簡(jiǎn)單代碼示例,需要的朋友可以參考下
    2024-03-03
  • springboot2如何集成ElasticSearch6.4.3

    springboot2如何集成ElasticSearch6.4.3

    這篇文章主要介紹了springboot2如何集成ElasticSearch6.4.3問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java獲取IP地址以及MAC地址的示例代碼

    Java獲取IP地址以及MAC地址的示例代碼

    IP地址是用于在網(wǎng)絡(luò)上識(shí)別設(shè)備的唯一地址,而MAC地址是設(shè)備的物理地址,本文主要介紹了Java獲取IP地址以及MAC地址的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Java位集合之BitMap實(shí)現(xiàn)和應(yīng)用詳解

    Java位集合之BitMap實(shí)現(xiàn)和應(yīng)用詳解

    這篇文章主要介紹了Java位集合之BitMap實(shí)現(xiàn)和應(yīng)用的相關(guān)資料,BitMap是一種高效的數(shù)據(jù)結(jié)構(gòu),適用于快速排序、去重和查找等操作,通過簡(jiǎn)單的數(shù)組和位運(yùn)算,可以在Java中實(shí)現(xiàn)BitMap,從而節(jié)省存儲(chǔ)空間并提高性能,需要的朋友可以參考下
    2024-12-12
  • Java實(shí)現(xiàn)批量修改文件名和重命名的方法

    Java實(shí)現(xiàn)批量修改文件名和重命名的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)批量修改文件名和重命名的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析

    springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析

    這篇文章主要介紹了springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • protobuf與json轉(zhuǎn)換小結(jié)

    protobuf與json轉(zhuǎn)換小結(jié)

    protobuf對(duì)象不能直接使用jsonlib去轉(zhuǎn),因?yàn)閜rotobuf生成的對(duì)象的get方法返回的類型有byte[],而只有String類型可以作為json的key,protobuf提供方法進(jìn)行轉(zhuǎn)換
    2017-07-07
  • Netty分布式高性能工具類FastThreadLocal和Recycler分析

    Netty分布式高性能工具類FastThreadLocal和Recycler分析

    這篇文章主要為大家介紹了Netty分布式高性能工具類FastThreadLocal和Recycler分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03

最新評(píng)論

旅游| 南丰县| 沅江市| 四会市| 涡阳县| 宜良县| 关岭| 广丰县| 临海市| 南丹县| 白水县| 陵水| 喜德县| 黄骅市| 呼和浩特市| 吐鲁番市| 湘潭县| 扬州市| 洛浦县| 鄢陵县| 临安市| 铁力市| 灵丘县| 中西区| 泽普县| 德钦县| 邯郸县| 海林市| 平湖市| 文成县| 安义县| 融水| 丰都县| 镇远县| 米林县| 蕉岭县| 安西县| 会同县| 盖州市| 南郑县| 大丰市|