成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MapStruct教程-映射器之間的嵌套調(diào)用

開發(fā) 前端
我們定義一個(gè)Article類和Person類,Person類包含兩個(gè)簡(jiǎn)單字段,Article類包含兩個(gè)簡(jiǎn)單字段,引用一個(gè)Person類字段,然后再定義對(duì)應(yīng)的DTO類。

MapStruct是一個(gè)幫助我們?cè)谔幚鞪ava Bean映射時(shí),盡量減少樣板代碼的效率工具,只需要定義接口,他會(huì)自動(dòng)生成映射邏輯。之前介紹的目標(biāo)都是需要映射的對(duì)象,本文我們一起看看如何構(gòu)建復(fù)雜的映射器。

一、準(zhǔn)備對(duì)象

我們定義一個(gè)Article類和Person類,Person類包含兩個(gè)簡(jiǎn)單字段,Article類包含兩個(gè)簡(jiǎn)單字段,引用一個(gè)Person類字段,然后再定義對(duì)應(yīng)的DTO類。

為了驗(yàn)證效果,Person類和對(duì)應(yīng)的DTO類字段名不同。

以下是源類:

@Getter
@Setter
public class Article {
    private int id;
    private String name;
    private Person author;
}

@Getter
@Setter
public class Person {
    private String id;
    private String name;
}

以下是目標(biāo)類:

@Getter
@Setter
public class ArticleDTO {
    private int id;
    private String name;
    private PersonDTO author;
}

@Getter
@Setter
public class PersonDTO {
    private String personId;
    private String personName;
}

基礎(chǔ)類準(zhǔn)備好了,接下來開始定義映射器。

二、將嵌套映射器定義為方法

讓我們從定義一個(gè)簡(jiǎn)單的映射器開始,操作Article類:

@Mapper
public interface ArticleMapper {

    ArticleMapper INSTANCE = Mappers.getMapper(ArticleMapper.class);

    ArticleDTO articleToArticleDto(Article article);
}

我們看下生成的映射代碼:

public class ArticleMapperImpl implements ArticleMapper {

    @Override
    public ArticleDTO articleToArticleDto(Article article) {
        if ( article == null ) {
            return null;
        }

        ArticleDTO articleDTO = new ArticleDTO();

        articleDTO.setId( article.getId() );
        articleDTO.setName( article.getName() );
        articleDTO.setAuthor( personToPersonDTO( article.getAuthor() ) );

        return articleDTO;
    }

    protected PersonDTO personToPersonDTO(Person person) {
        if ( person == null ) {
            return null;
        }

        PersonDTO personDTO = new PersonDTO();

        return personDTO;
    }
}

這里會(huì)自動(dòng)生成Person到PersonDTO的轉(zhuǎn)換。但是,因?yàn)樽侄蚊Q不對(duì)應(yīng),無法自動(dòng)映射,需要我們自己定義字段映射關(guān)系。

我們定義一個(gè)PersonMapper映射器:

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

    @Mapping(source = "id", target = "personId")
    @Mapping(source = "name", target = "personName")
    PersonDTO personToPersonDTO(Person person);
}

三、定義映射方法

映射器已經(jīng)定義好了,如何在ArticleMapper中引用PersonMapper呢?有兩種方式。

(一)手動(dòng)編寫映射方法

我們可以使用Mappers.getMapper()方法,在ArticleMapper中直接調(diào)用PersonMapper的映射方法:

default PersonDTO personToPersonDto(Person person) {
    return Mappers.getMapper(PersonMapper.class).personToPersonDTO(person);
}

MapStruct將自動(dòng)獲取此方法并使用它來映射author字段,生成的代碼為:

@Override
public ArticleDTO articleToArticleDto(Article article) {
    if ( article == null ) {
        return null;
    }

    ArticleDTO articleDTO = new ArticleDTO();

    articleDTO.setId( article.getId() );
    articleDTO.setName( article.getName() );
    articleDTO.setAuthor( personToPersonDto( article.getAuthor() ) );

    return articleDTO;
}

上面這種是純手動(dòng)的操作,有些粗糙,我們?cè)诳纯碝apStruct中如何更加優(yōu)雅一些。

(二)優(yōu)(zi)雅(dong)的映射

我們可以直接在@Mapper注解中使用uses參數(shù)指向我們想要使用的映射器,而不是定義一個(gè)新方法:

@Mapper(uses = PersonMapper.class)
public interface ArticleUsingPersonMapper {
    
    ArticleUsingPersonMapper INSTANCE = Mappers.getMapper(ArticleUsingPersonMapper.class);
    
    ArticleDTO articleToArticleDto(Article article);
}

自動(dòng)生成的映射代碼為:

public class ArticleUsingPersonMapperImpl implements ArticleUsingPersonMapper {

    private final PersonMapper personMapper = PersonMapper.INSTANCE;

    @Override
    public ArticleDTO articleToArticleDto(Article article) {
        if ( article == null ) {
            return null;
        }

        ArticleDTO articleDTO = new ArticleDTO();

        articleDTO.setId( article.getId() );
        articleDTO.setName( article.getName() );
        articleDTO.setAuthor( personMapper.personToPersonDTO( article.getAuthor() ) );

        return articleDTO;
    }
}

從生成的映射代碼看到,雖然沒有指定author字段的映射,但是MapStruct會(huì)自動(dòng)從PersonMapper中找到映射方法。

是不是很方便,這才是優(yōu)雅的實(shí)現(xiàn)。

責(zé)任編輯:武曉燕 來源: 看山的小屋
相關(guān)推薦

2025-01-16 00:00:00

MapStruct映射

2022-04-06 09:10:40

映射器代理類接口

2023-01-31 15:17:44

copyMapStruct

2011-09-28 10:17:54

2022-09-02 08:17:40

MapStruct代碼工具

2025-01-13 00:00:00

MapStruct枚舉映射

2022-01-25 08:36:29

array.flat映射函數(shù)數(shù)組

2023-10-26 14:34:32

2021-10-14 18:15:38

BeanUtils對(duì)象生成器

2025-01-13 00:00:00

MapStruct繼承關(guān)系Java

2024-04-19 08:49:50

微服務(wù)RPC事件驅(qū)動(dòng)

2020-12-10 08:21:27

XML映射Mybatis

2010-03-26 15:55:47

Python腳本

2010-01-28 15:22:12

C++嵌套類

2025-01-24 00:00:00

MapStruct子類型Mapper

2013-05-14 09:28:34

網(wǎng)吧路由器映射端口映射

2024-10-09 12:18:38

2017-01-23 15:06:32

戴爾服務(wù)器

2020-08-10 10:40:03

工具類MapStructJava

2009-06-02 14:46:26

Hibernate關(guān)系映射教程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: h视频在线免费观看 | 一级欧美一级日韩片 | 91一区二区 | 国产精品高潮呻吟久久av野狼 | 亚洲一区视频在线 | 一级女毛片 | 亚洲va欧美va天堂v国产综合 | 精品一区av | 久久精品国产一区老色匹 | av网站在线播放 | 国产一区高清 | 国产精品看片 | 亚洲在线一区 | 狠狠操狠狠干 | 欧美黄页 | 黄视频网站在线 | 麻豆一区 | av大片在线| 成人av网站在线观看 | 久久久久久久久久久福利观看 | 成人在线视频免费观看 | 一级黄色片在线免费观看 | 免费电影av | 午夜在线观看视频 | 视频在线亚洲 | 成人国产在线观看 | 97成人在线 | 亚洲精品视频在线 | 亚欧性视频| 国产精品一区二区福利视频 | 午夜精品久久 | 欧美一区二区三区视频 | 成人国产精品久久久 | 国产一区久久精品 | 国产日产欧产精品精品推荐蛮挑 | 九九久久这里只有精品 | 国产视频在线观看一区二区三区 | 日日噜噜夜夜爽爽狠狠 | 国产高清在线精品 | 亚洲一卡二卡 | 亚洲国产高清在线 |