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

關(guān)于MapStruct的使用教程

 更新時(shí)間:2025年02月08日 15:28:09   作者:wujiada001  
MapStruct 是一個(gè)用于 Java Bean 映射的代碼生成器,通過注解處理器自動(dòng)生成映射代碼,以下是 MapStruct 的基本使用方法:添加依賴、定義映射接口、使用映射方法、定義自定義映射方法、處理復(fù)雜映射、集成 Spring 等

MapStruct的使用

MapStruct 是一個(gè)代碼生成器,它使用注解處理器來實(shí)現(xiàn) Java bean 之間的映射。

MapStruct 通過在編譯時(shí)自動(dòng)生成映射代碼,減少了手動(dòng)編寫映射代碼的工作量,并幫助保持代碼的一致性和準(zhǔn)確性。

以下是 MapStruct 的基本使用方法:

1. 添加依賴

首先,你需要在項(xiàng)目的構(gòu)建配置中添加 MapStruct 的依賴。對(duì)于 Maven 和 Gradle,添加如下依賴:

  • Maven:
<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.4.2.Final</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>1.4.2.Final</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>
  • Gradle:
dependencies {
    implementation 'org.mapstruct:mapstruct:1.4.2.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
}

2. 定義映射接口

創(chuàng)建一個(gè)接口,并使用 @Mapper 注解標(biāo)注,這個(gè)接口將定義源對(duì)象和目標(biāo)對(duì)象之間的映射規(guī)則。

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

@Mapper
public interface MyMapper {
    MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);

    // 定義從源對(duì)象到目標(biāo)對(duì)象的映射方法
    TargetObject map(SourceObject source);
}

3. 使用映射方法

在業(yè)務(wù)邏輯中,你可以使用定義的映射接口來轉(zhuǎn)換對(duì)象。

public class MyService {
    public TargetObject convert(SourceObject source) {
        return MyMapper.INSTANCE.map(source);
    }
}

4. 定義自定義映射方法

如果需要自定義映射邏輯,可以定義一個(gè)帶有 @Mapping 注解的方法,并在其中指定映射規(guī)則。

@Mapper
public interface MyMapper {
    @Mapping(target = "targetProperty", source = "sourceProperty")
    @Mapping(target = "targetProperty2", expression = "java(String.valueOf(source.getSourceProperty2()))")
    TargetObject map(SourceObject source);
}

5. 處理復(fù)雜映射

在這個(gè)例子中,@Mapping注解用于指定源對(duì)象和目標(biāo)對(duì)象之間的屬性映射關(guān)系。source屬性指定源對(duì)象的屬性名,target屬性指定目標(biāo)對(duì)象的屬性名。

@Mapper
public interface MyMapper {
    @Mapping(target = "dateOfBirth", source = "birthYear", qualifiedByName = "yearToCalendar")
    TargetObject map(SourceObject source);

    @Named("yearToCalendar")
    default Date yearToCalendar(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, Calendar.JANUARY, 1);
        return calendar.getTime();
    }
}

對(duì)于更復(fù)雜的映射場(chǎng)景,比如需要轉(zhuǎn)換數(shù)據(jù)類型或者調(diào)用方法,MapStruct 也提供了相應(yīng)的注解來支持。

  1. 自定義映射:可以使用@Mapping注解的expressionqualifiedByName屬性來自定義映射邏輯。
  2. 集合映射:可以使用@IterableMapping@MapMapping注解來處理集合類型的映射。
  3. 枚舉映射:可以直接映射枚舉類型,或者通過@Mapping注解的enumNamed屬性來指定枚舉的映射規(guī)則。
  4. 使用構(gòu)造函數(shù)映射:如果目標(biāo)類有構(gòu)造函數(shù),可以使用@Mapping注解的constructor屬性來指定使用構(gòu)造函數(shù)進(jìn)行映射。
  5. 嵌套屬性映射:可以映射嵌套的對(duì)象屬性。
  6. 反向映射:可以定義一個(gè)反向映射方法,并使用@Mapping注解的inverse屬性來引用正向映射方法。
  7. 使用裝飾器增強(qiáng)Mapper:可以使用@DecoratedWith注解來裝飾Mapper接口,以實(shí)現(xiàn)更復(fù)雜的映射邏輯。
  8. 映射繼承:可以通過繼承來共享映射配置。
  9. 使用@BeforeMapping和@AfterMapping進(jìn)行預(yù)處理和后處理:可以在映射方法執(zhí)行前后執(zhí)行自定義的邏輯。
  10. 使用@Context傳遞上下文參數(shù):可以在映射方法中傳遞額外的上下文參數(shù)。

6. 集成 Spring

MapStruct還可以與Spring框架集成,允許在映射器中注入Spring管理的bean。

這需要在Mapper接口上使用@Mapper(componentModel = "spring")注解來指定Spring作為組件模型。然后,可以使用@Autowired注解來注入Spring管理的bean。

@Mapper(componentModel = "spring")
public interface MyMapper {
    TargetObject map(SourceObject source);
}

這樣,MapStruct 映射器就可以作為 Spring Bean 進(jìn)行自動(dòng)裝配。

通過使用 MapStruct,你可以減少手動(dòng)編寫的樣板代碼,提高開發(fā)效率,并減少因手動(dòng)映射而產(chǎn)生的錯(cuò)誤。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA安裝阿里巴巴編碼規(guī)范插件的兩種方式詳解(在線安裝和離線安裝)

    IDEA安裝阿里巴巴編碼規(guī)范插件的兩種方式詳解(在線安裝和離線安裝)

    這篇文章主要介紹了IDEA安裝阿里巴巴編碼規(guī)范插件的兩種方式詳解(在線安裝和離線安裝),本文通過截圖給大家展示的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Java中常見的XML解析方法與應(yīng)用詳解

    Java中常見的XML解析方法與應(yīng)用詳解

    XML(eXtensible Markup Language)是一種用于存儲(chǔ)和傳輸數(shù)據(jù)的標(biāo)記語(yǔ)言,被廣泛應(yīng)用于表示和交換獨(dú)立于應(yīng)用程序和硬件平臺(tái)的結(jié)構(gòu)化信息,下面我們就來看看它的常見解析方法有哪些吧
    2024-01-01
  • Java使用字節(jié)流復(fù)制文件的方法

    Java使用字節(jié)流復(fù)制文件的方法

    這篇文章主要為大家詳細(xì)介紹了Java使用字節(jié)流復(fù)制文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java中泛型的使用和優(yōu)點(diǎn)解析

    Java中泛型的使用和優(yōu)點(diǎn)解析

    這篇文章主要介紹了Java中泛型的使用和優(yōu)點(diǎn)解析,泛型使用過程中,操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù),這種參數(shù)類型可以用在類、接口和方法中,分別被稱為泛型類、泛型接口、泛型方法,需要的朋友可以參考下
    2023-09-09
  • Maven中Could not find artifact XXXX的錯(cuò)誤解決

    Maven中Could not find artifact XXXX的錯(cuò)誤解決

    本文主要介紹了Maven中Could not find artifact XXXX的錯(cuò)誤解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 在SpringBoot中,如何使用Netty實(shí)現(xiàn)遠(yuǎn)程調(diào)用方法總結(jié)

    在SpringBoot中,如何使用Netty實(shí)現(xiàn)遠(yuǎn)程調(diào)用方法總結(jié)

    我們?cè)谶M(jìn)行網(wǎng)絡(luò)連接的時(shí)候,建立套接字連接是一個(gè)非常消耗性能的事情,特別是在分布式的情況下,用線程池去保持多個(gè)客戶端連接,是一種非常消耗線程的行為.那么我們?cè)撏ㄟ^什么技術(shù)去解決上述的問題呢,那么就不得不提一個(gè)網(wǎng)絡(luò)連接的利器——Netty,需要的朋友可以參考下
    2021-06-06
  • Spring Boot與Spring Security的跨域問題解決方案

    Spring Boot與Spring Security的跨域問題解決方案

    跨域問題是指在Web開發(fā)中,瀏覽器出于安全考慮,限制了不同域名之間的資源訪問,本文重點(diǎn)給大家介紹Spring Boot與Spring Security的跨域問題解決方案,感興趣的朋友一起看看吧
    2023-09-09
  • MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)

    MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)

    這篇文章主要給大家介紹了關(guān)于MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 解決java數(shù)值范圍以及float與double精度丟失的問題

    解決java數(shù)值范圍以及float與double精度丟失的問題

    下面小編就為大家?guī)硪黄鉀Qjava數(shù)值范圍以及float與double精度丟失的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • IDEA中安裝testng插件過程

    IDEA中安裝testng插件過程

    這篇文章主要介紹了IDEA中安裝testng插件過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論