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

Java高效映射工具M(jìn)apStruct的使用示例

 更新時間:2023年12月25日 10:38:30   作者:一只愛擼貓的程序猿  
MapStruct 是一個 Java 注解處理器,用于在不同 Java Beans 或數(shù)據(jù)傳輸對象(DTOs)之間自動生成類型安全的映射代碼,這是一個編譯時映射框架,意味著它利用注解在編譯時生成代碼,本文將給大家介紹一下Java注解處理器MapStruct的使用示例,需要的朋友可以參考下

引言

MapStruct 是一個 Java 注解處理器,用于在不同 Java Beans 或數(shù)據(jù)傳輸對象(DTOs)之間自動生成類型安全的映射代碼。這是一個編譯時映射框架,意味著它利用注解在編譯時生成代碼,從而提高了性能和減少了運(yùn)行時的開銷。

它適用于 Java 8 和更高版本。以下是一些 MapStruct 的基本使用示例:

1. 基本映射

假設(shè)你有兩個簡單的類 PersonPersonDTO,需要將 Person 實(shí)體映射到 PersonDTO 數(shù)據(jù)傳輸對象。

Person.java

public class Person {
    private String name;
    private int age;
    // getters and setters
}

PersonDTO.java

public class PersonDTO {
    private String name;
    private int age;
    // getters and setters
}

PersonMapper.java

@Mapper
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
    PersonDTO personToPersonDTO(Person person);
}

2. 復(fù)雜類型映射

如果你的對象包含復(fù)雜類型或自定義類型,MapStruct 也可以處理這些。

Address.java

public class Address {
    private String street;
    private String city;
    // getters and setters
}

Person.java (現(xiàn)在包含 Address)

public class Person {
    private String name;
    private int age;
    private Address address;
    // getters and setters
}

PersonDTO.java (同樣包含 Address)

public class PersonDTO {
    private String name;
    private int age;
    private String street;
    private String city;
    // getters and setters
}

PersonMapper.java

@Mapper
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
    
    @Mapping(source = "address.street", target = "street")
    @Mapping(source = "address.city", target = "city")
    PersonDTO personToPersonDTO(Person person);
}

3. 使用表達(dá)式

有時,你可能需要在映射過程中使用自定義邏輯。MapStruct 允許你使用 Java 表達(dá)式來實(shí)現(xiàn)這一點(diǎn)。

Person.java

public class Person {
    private String firstName;
    private String lastName;
    // getters and setters
}

PersonDTO.java

public class PersonDTO {
    private String fullName;
    // getters and setters
}

PersonMapper.java

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

    @Mapping(expression = "java(person.getFirstName() + ' ' + person.getLastName())", target = "fullName")
    PersonDTO personToPersonDTO(Person person);
}

4. 使用自定義方法

在某些情況下,你可能需要自定義映射邏輯。你可以在映射器接口中定義自己的方法來實(shí)現(xiàn)這一點(diǎn)。

Person.java

public class Person {
    private String birthdate; // 假設(shè)這是一個字符串
    // getters and setters
}

PersonDTO.java

public class PersonDTO {
    private LocalDate birthdate; // 在 DTO 中,我們使用 LocalDate
    // getters and setters
}

PersonMapper.java

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

    @Mapping(target = "birthdate", source = "birthdate", dateFormat = "yyyy-MM-dd")
    PersonDTO personToPersonDTO(Person person);

    default LocalDate stringToLocalDate(String date) {
        return LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
}

5. 映射集合

MapStruct 也能很好地處理集合映射。

PersonMapper.java

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

    List<PersonDTO> personsToPersonDTOs(List<Person> persons);
}

6. 使用依賴注入

如果你使用 Spring 或類似框架,可以將 MapStruct 與依賴注入框架結(jié)合使用。

PersonMapper.java

@Mapper(componentModel = "spring")
public interface PersonMapper {
    PersonDTO personToPersonDTO(Person person);
}

使用 componentModel = "spring",MapStruct 將生成一個 Spring 組件,可以被注入到你的服務(wù)中。

7. 更新現(xiàn)有對象

MapStruct 也可以用于更新現(xiàn)有對象,而不是創(chuàng)建新的。

PersonMapper.java

@Mapper
public interface PersonMapper {
    void updatePersonFromDTO(PersonDTO personDto, @MappingTarget Person person);
}

這個方法將會根據(jù) PersonDTO 中的數(shù)據(jù)更新一個已存在的 Person 對象,而不是創(chuàng)建一個新的。

8. 多源映射

你可以從多個源對象映射到一個目標(biāo)對象。

Address.java

public class Address {
    private String city;
    // getters and setters
}

PersonDTO.java

public class PersonDTO {
    private String name;
    private String city;
    // getters and setters
}

PersonMapper.java

@Mapper
public interface PersonMapper {
    @Mapping(source = "person.name", target = "name")
    @Mapping(source = "address.city", target = "city")
    PersonDTO personAndAddressToDTO(Person person, Address address);
}

總結(jié)

MapStruct 的主要優(yōu)點(diǎn)是它提供了一種高效、類型安全且易于使用的方式來自動化對象間的數(shù)據(jù)映射。這使得它成為處理 Java 應(yīng)用中數(shù)據(jù)轉(zhuǎn)換的理想選擇,尤其是在涉及復(fù)雜對象和多層架構(gòu)的場景中。通過減少手寫的樣板代碼和提供清晰的映射定義,MapStruct 可以幫助開發(fā)人員節(jié)省時間,減少錯誤,并提高代碼的可維護(hù)性。

以上就是Java注解處理器MapStruct的使用示例的詳細(xì)內(nèi)容,更多關(guān)于Java MapStruct使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • win10 64位 jdk1.8的方法教程詳解

    win10 64位 jdk1.8的方法教程詳解

    這篇文章主要介紹了win10 64位 jdk1.8的方法教程詳解,本文給大家介紹的非常詳細(xì),對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 解決SpringBoot運(yùn)行報錯:找不到或無法加載主類的問題

    解決SpringBoot運(yùn)行報錯:找不到或無法加載主類的問題

    這篇文章主要介紹了解決SpringBoot運(yùn)行報錯:找不到或無法加載主類的問題,具有很好的參考價值,對大家的學(xué)習(xí)或工作有一定的參考價值,需要的朋友可以參考下
    2023-09-09
  • java selenium教程環(huán)境搭建基于Maven

    java selenium教程環(huán)境搭建基于Maven

    本文主要介紹Java selenium 環(huán)境的安裝,這里介紹了基于Maven的環(huán)境搭建,有需要的小伙伴可以參考下
    2016-08-08
  • springboot 集成支付寶支付的示例代碼

    springboot 集成支付寶支付的示例代碼

    這篇文章主要介紹了springboot 集成支付寶支付的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java枚舉類型與泛型使用解讀

    Java枚舉類型與泛型使用解讀

    這篇文章主要介紹了Java枚舉類型與泛型使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java實(shí)現(xiàn)隨機(jī)抽獎的三種方法

    Java實(shí)現(xiàn)隨機(jī)抽獎的三種方法

    在Java中實(shí)現(xiàn)隨機(jī)抽獎的方法,通常我們會使用java.util.Random類來生成隨機(jī)數(shù),然后基于這些隨機(jī)數(shù)來選擇中獎?wù)?以下將給出幾種常見的隨機(jī)抽獎實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-09-09
  • 老生常談 java匿名內(nèi)部類

    老生常談 java匿名內(nèi)部類

    下面小編就為大家?guī)硪黄仙U刯ava匿名內(nèi)部類。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 新手易懂的Java客戶管理小項(xiàng)目

    新手易懂的Java客戶管理小項(xiàng)目

    本篇文章是作為一個很適合新手閱讀的初級小項(xiàng)目,客戶管理,它主要實(shí)現(xiàn)數(shù)據(jù)庫的增刪查改操作,管理每位客戶的不同信息,如果你也是開始學(xué)Java不久,這篇文章將很適合你
    2021-11-11
  • Java自定義異常_動力節(jié)點(diǎn)Java學(xué)院整理

    Java自定義異常_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java自定義異常_動力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 通過prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)的操作流程

    通過prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)的操作流程

    jmx_exporter用于從Java應(yīng)用程序中提取JMX指標(biāo),適用于SpringBoot應(yīng)用,通過下載jar包和配置文件,可以抓取JVM基礎(chǔ)指標(biāo),要獲取應(yīng)用級別指標(biāo),需要集成Prometheus客戶端庫并自定義指標(biāo),本文給大家介紹了如何通過prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)
    2025-02-02

最新評論

梁河县| 宁都县| 沽源县| 礼泉县| 盐城市| 普宁市| 夏津县| 伊宁县| 民丰县| 金昌市| 克拉玛依市| 汤阴县| 都匀市| 宜宾县| 新宁县| 鹿邑县| 石棉县| 新建县| 喀什市| 平果县| 武川县| 瑞丽市| 光泽县| 永宁县| 定边县| 无锡市| 交城县| 利川市| 若羌县| 桦甸市| 邵东县| 尖扎县| 讷河市| 龙川县| 陇西县| 松江区| 衡阳市| 古丈县| 新兴县| 阿克苏市| 阜南县|