精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MapStruct 超神進階用法,讓你的代碼效率提升十倍!

開發(fā) 前端
MapStruct 是一個 Java 編譯時注解處理框架,用來自動化將一種 Java Bean 對象映射成另一種類型的對象。

前言

MapStruct 是一個 Java 編譯時注解處理框架,用來自動化將一種 Java Bean 對象映射成另一種類型的對象。

該框架的主要目標(biāo)是使開發(fā)人員在盡可能少的代碼和最低的運行時間成本下實現(xiàn)屬性映射。MapStruct 通過在編譯時生成代碼來實現(xiàn)這點,這與大多數(shù)其他 Java Bean 映射框架在運行時通過反射進行映射形成了鮮明對比。

MapStruct 具有以下主要特性:

  • 簡潔: 簡化了 Java Beans 之間轉(zhuǎn)換的代碼,自動生成使用簡單的賦值語句完成的映射實現(xiàn)。
  • 性能優(yōu)秀: 由于 MapStruct 是在編譯時生成代碼,不涉及任何反射,因此執(zhí)行映射的性能優(yōu)越。
  • 安全: 通過在編譯時生成映射代碼,MapStruct 提供了類型安全的映射,并能在編譯時就發(fā)現(xiàn)潛在的錯誤。
  • 靈活: 可通過自定義轉(zhuǎn)換方法、類型轉(zhuǎn)換和映射策略等來滿足復(fù)雜的映射需求。
  • 良好的 IDE 支持: 由于 MapStruct 是編譯時工具,所以擁有良好的 IDE 集成,如代碼自動完成、錯誤高亮等。

總的來說, MapStruct 是一個強大且靈活的映射框架,很好的解決有關(guān)對象轉(zhuǎn)換的問題,實現(xiàn)了代碼的簡潔和性能的兼顧。MapStruct的常規(guī)用法,網(wǎng)上有很多教程了,本文將列舉一些進階用法,方便日常開發(fā)使用。

expression

在轉(zhuǎn)化的時候,執(zhí)行 java 表達式,直接看例子:

@Mapper(componentModel = "spring")
public interface MyMapper {
    @Mapping(target = "createTime", expression = "java(System.currentTimeMillis())")
    Target toTarget(Source source);
}

轉(zhuǎn)化成 target 對象時,createTime字段的值,會設(shè)置為System.currentTimeMillis(),生成的代碼如下:

@Component
public class MyMapperImpl implements MyMapper {

    @Override
    public Target toTarget(Source source) {
        Target target = new Target();
        target.setCreateTime( System.currentTimeMillis() );
        return target;
    }
}

qualifiedByName

做映射時,默認(rèn)情況下,從source 字段到target 字段是直接使用 get/set,如下:

@Data
publicclass Source {
    private String name;
}

@Data
publicclass Target {
    private String name;
}
    

@Mapper(componentModel = "spring")
publicinterface MyMapper {
    Target toTarget(Source source);
}

生成的轉(zhuǎn)化代碼類如下:

@Component
publicclass MyMapperImpl implements MyMapper {

    @Override
    public Target toTarget(Source source) {
        if ( source == null ) {
            returnnull;
        }

        Target target = new Target();

        // 無腦 set/get
        target.setName( source.getName() );

        return target;
    }
}

如果這種直接的 set/get 無法滿足需求,比如需要把 name 轉(zhuǎn)化成大寫格式,那么可以使用qualifiedByName:

@Mapper(componentModel = "spring")
public interface MyMapper {
    @Mapping(target = "name", source = "name", qualifiedByName = "toUpperCase")
    Target toTarget(Source source);

    @Named("toUpperCase")
    default String toUpperCase(String value) {
        // 這里寫轉(zhuǎn)換大寫的邏輯
        return value == null ? null : value.toUpperCase();
    }
}

生成的代碼如下:

@Component
publicclass MyMapperImpl implements MyMapper {

    @Override
    public Target toTarget(Source source) {
        if ( source == null ) {
            returnnull;
        }

        Target target = new Target();

        target.setName( toUpperCase( source.getName() ) );

        return target;
    }
}

nullValueMappingStrategy

如果 source 為 null 時,對應(yīng)的 target 的處理策略,默認(rèn)是 NullValueMappingStrategy.RETURN_NULL,即 target 中對應(yīng)的字段也設(shè)置為 null。

但有時候設(shè)置為 null 可能不符合我們的需求,關(guān)注工眾號:碼猿技術(shù)專欄,回復(fù)關(guān)鍵詞:1111 獲取阿里內(nèi)部Java性能調(diào)優(yōu)手冊!比如 target 中有個 List ids,我們希望如果 source 中ids 為 null 時,target 的 ids 設(shè)置為空 list。這時候可以使用nullValueMappingStrategy策略中的NullValueMappingStrategy.RETURN_DEFAULT

nullValueMappingStrategy 可以使用在某個方法上(只對該方法生效),也可以使用在類上(對類中的所有方法都生效),如下:

@Component
publicclass MyMapperImpl implements MyMapper {

    @Override
    public Target toTarget(Source source) {
        if ( source == null ) {
            returnnull;
        }

        Target target = new Target();

        target.setName( source.getName() );
        List<Integer> list = source.getIds();
        if ( list != null ) {
            target.setIds( new ArrayList<Integer>( list ) );
        }
        else {
            target.setIds( null );
        }

        return target;
    }
}

指定NullValueMappingStrategy.RETURN_DEFAULT策略后:

@Mapper(componentModel = "spring",
        nullValueMappingStrategy = org.mapstruct.NullValueMappingStrategy.RETURN_DEFAULT)
publicinterface MyMapper {

    Target toTarget(Source source);
}

@Component
publicclass MyMapperImpl implements MyMapper {
    @Override
    public Target toTarget(Source source) {

        Target target = new Target();

        if ( source != null ) {
            target.setName( toUpperCase( source.getName() ) );
            List<Integer> list = source.getIds();
            if ( list != null ) {
                target.setIds( new ArrayList<Integer>( list ) );
            }
            else {
                target.setIds( new ArrayList<Integer>() );
            }
        }

        return target;
    }
}

可以看到,當(dāng) source 或者 source.ids 為 null 時,返回的 target 和 target.ids 都是默認(rèn)的空值(空對象+空 list)。

Decorator

你可以通過創(chuàng)建一個 Decorator 類來對你的方法進行修飾并實現(xiàn)全局處理。

以下是一個例子:

public abstractclass YourMapperDecorator implements YourMapper {

    privatefinal YourMapper delegate;

    public YourMapperDecorator(YourMapper delegate) {
        this.delegate = delegate;
    }

    @Override
    public Target toTarget(Source source) {
        Target result = delegate.toTarget(source);
        if (result != null) {
            if (result.getField() == null) {
                result.setField("");
            }
            // 你可以在這里對其他字段進行同樣的處理...
        }
        return result;
    }
}

然后你只需在你的 Mapper 接口上添加 @DecoratedWith 注解:

@Mapper
@DecoratedWith(YourMapperDecorator.class)
public interface YourMapper {
    Target toTarget(Source source);
}

這樣,每次調(diào)用 toTarget 方法時,YourMapperDecorator 中的實現(xiàn)會被調(diào)用。在這里,你可以實現(xiàn)任何你想要的邏輯,例如對空字段賦予特定的默認(rèn)值。

責(zé)任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2024-10-09 12:18:38

2024-06-27 11:22:34

2023-06-13 13:52:00

Java 7線程池

2022-10-27 07:09:34

DjangoAPIRedis

2017-12-06 08:06:47

IBMGPU機器學(xué)習(xí)

2023-02-06 07:17:22

2024-12-06 06:20:00

代碼枚舉

2023-05-31 07:24:48

2017-09-26 14:56:57

MongoDBLBS服務(wù)性能

2020-09-16 16:07:34

Chrome插件瀏覽器

2023-09-07 11:29:36

API開發(fā)

2020-07-08 17:06:00

Python開發(fā)工具

2025-05-26 00:02:00

TypeScriptGo 語言前端

2022-12-13 08:45:01

3F傾聽模型

2023-05-16 06:50:50

prompt郵件語法

2018-09-27 15:42:15

Python編程語言技術(shù)

2021-08-17 14:30:09

Windows電腦微軟

2025-10-17 08:00:00

2025-02-27 09:46:55

2020-07-21 15:40:55

NginxJava服務(wù)器
點贊
收藏

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

97久久精品人人澡人人爽| 婷婷国产精品| 亚洲自拍偷拍九九九| 国产欧美丝袜| 国产一级片一区二区| 久久久人成影片免费观看| 欧美精品一区二区久久久| 又色又爽又高潮免费视频国产| www.av在线| 国产精品一区三区| 欧洲午夜精品久久久| 四虎地址8848| 好吊妞国产欧美日韩免费观看网站| 一道本成人在线| 警花观音坐莲激情销魂小说 | 日韩欧美视频一区| 国产在线精品91| 日韩大片在线永久免费观看网站| 成人丝袜18视频在线观看| 国产精品久久久久久中文字| 久久久久久久久久99| 精品理论电影| 欧美精品一区二| 婷婷激情5月天| 波多野结衣亚洲| 一区二区高清免费观看影视大全| 日韩在线电影一区| 亚洲日本中文字幕在线| 国产剧情一区二区三区| 国产精品极品美女粉嫩高清在线| 国产精品成人免费一区二区视频| 97精品国产一区二区三区| 精品中文视频在线| 国产高潮失禁喷水爽到抽搐| 亚洲三级在线| 91搞黄在线观看| 黄色一级视频在线播放| 18加网站在线| 亚洲素人一区二区| 亚洲人体一区| 国产在线资源| 91欧美激情一区二区三区成人| av在线亚洲男人的天堂| 国产精品久久欧美久久一区| 日韩电影在线一区二区| 2019中文字幕在线| 日本五十熟hd丰满| 在线观看一区| 久久久久久这里只有精品| 99精品久久久久| 91久久夜色精品国产按摩| 亚洲深夜福利网站| 中文字幕一区二区三区人妻| 成人直播在线观看| 亚洲精品在线一区二区| 91超薄肉色丝袜交足高跟凉鞋| 国产精品麻豆| 91精品国产欧美一区二区| www.超碰97.com| 色综合久久久| 欧美日韩精品一区二区三区蜜桃| 黄色在线视频网| 成人国产在线| 欧美一区二区三区视频免费播放 | 丁香婷婷综合色啪| 粉嫩高清一区二区三区精品视频| 精品国产av一区二区| 国产精品一级在线| 成人欧美一区二区三区视频xxx| 国产av一区二区三区| 国产精品一二三四| 国产日韩一区二区三区| 香蕉视频911| 久久久国产精品午夜一区ai换脸| 日本不卡一二三区| 一区二区三区视频网站 | 日韩网红少妇无码视频香港| 亚洲国产精品一区制服丝袜| 777777777亚洲妇女| 天堂网一区二区| 免费成人美女在线观看| 成人高清视频观看www| av 一区二区三区| 成人精品鲁一区一区二区| 精品伊人久久大线蕉色首页| 你懂的视频在线免费| 中文字幕成人网| 亚洲国产一二三精品无码| 白白色在线观看| 在线免费不卡视频| 欧美熟妇另类久久久久久多毛| www.久久东京| 亚洲人成自拍网站| 日韩一级片av| 午夜在线播放视频欧美| 国产欧美精品日韩精品| 精品人妻午夜一区二区三区四区 | 精品人妻在线播放| 久久黄色网页| 91人成网站www| 五月婷婷狠狠干| 最新日韩在线视频| 欧美不卡在线播放| 91麻豆精品一二三区在线| 亚洲国产精品成人一区二区| 欧美人与禽zoz0善交| 亚洲手机视频| 国产乱人伦真实精品视频| 丰满大乳国产精品| 中文字幕永久在线不卡| 国产网站免费在线观看| 国产精品成人3p一区二区三区 | 国产精品视频久久久久| 欧美熟妇乱码在线一区| 国产精品超碰97尤物18| 美女av免费在线观看| 国产日韩欧美中文在线| 亚洲视频一区二区| 日韩精品乱码久久久久久| 国产在线不卡一区| 亚州欧美一区三区三区在线| caoprom在线| 欧美一区二区视频网站| 国产三级在线观看完整版| 亚洲久久一区| 成人av播放| 成人片在线看| 欧美日韩精品一区二区天天拍小说| 国产精品边吃奶边做爽| 你懂的视频一区二区| 国产精品久久久久久久久久免费| 日本黄色三级视频| 亚洲精品v日韩精品| 一道本视频在线观看| 国产欧美日韩精品一区二区免费 | 欧美 日韩 激情| 日本婷婷久久久久久久久一区二区| 欧美婷婷久久五月精品三区| 亚洲自拍偷拍网站| 五月天国产视频| 婷婷亚洲五月| 国产欧美日韩高清| eeuss影院www在线观看| 在线一区二区观看| 三上悠亚影音先锋| 噜噜噜在线观看免费视频日韩| 国产伦精品一区| 国产在线拍揄自揄拍视频 | 尤蜜粉嫩av国产一区二区三区| 国产伦精品一区二区三区免费优势| 美女国内精品自产拍在线播放| 国产精品无码在线播放 | 天天综合五月天| av在线成人| 久久综合免费视频| a在线观看免费| 亚洲精品视频一区二区| 亚洲国产日韩在线一区| 欧美淫片网站| 97人人干人人| 91jq激情在线观看| 亚洲福利视频专区| 日韩三级小视频| 久久伊人中文字幕| 日韩肉感妇bbwbbwbbw| 色男人天堂综合再现| 国产一区深夜福利| 在线中文字幕视频观看| 日韩美女一区二区三区四区| 国产在线观看免费视频今夜| 97精品久久久午夜一区二区三区| 浮妇高潮喷白浆视频| 久操国产精品| 国产精品网址在线| 激情视频在线观看| 精品国免费一区二区三区| 国产成人无码精品亚洲| 国产亚洲一二三区| 中文字幕线观看| 国产精品v亚洲精品v日韩精品| 韩国成人一区| 日韩电影av| 超碰精品一区二区三区乱码| 老司机午夜福利视频| 色综合久久久久综合体| 亚洲精品自拍视频在线观看| 五月婷婷伊人网| 久久综合999| 欧美日韩一区二区三区69堂| 欧美日韩第一区| 欧美精品成人一区二区在线观看| 国产精品麻豆成人av电影艾秋| 欧美乱妇40p| 蝌蚪视频在线播放| 欧美一区二区三区小说| 久久国产精品免费看| 国产精品久久久久桃色tv| 亚洲欧洲国产视频| 日韩国产在线观看一区| 中文字幕在线中文| 精品福利久久久| 91精品天堂| 成人私拍视频| 欧美福利小视频| 成黄免费在线| 日韩av网址在线| 国产精品爽爽久久久久久| 狠狠做深爱婷婷久久综合一区| 免费成人美女女在线观看| 91在线播放网址| 992kp免费看片| 爽好多水快深点欧美视频| 色婷婷777777仙踪林| 欧洲杯什么时候开赛| 精品久久久久久一区| 国产专区精品| 国产精品日韩久久久久| 在线观看网站免费入口在线观看国内| 不用播放器成人网| www.视频在线.com| 日韩精品视频在线| 亚洲黄色片视频| 9191国产精品| 在线免费看毛片| 色一情一伦一子一伦一区| 亚洲国产精一区二区三区性色| 亚洲女同女同女同女同女同69| 人妻一区二区视频| 91在线视频免费91| 亚洲av无码专区在线播放中文| 国产一区二区三区四区五区美女 | 国产福利精品一区二区| 一级片视频免费观看| 亚欧成人精品| 精品视频免费在线播放| 黄色亚洲大片免费在线观看| 做爰高潮hd色即是空| 99久久影视| 亚洲高清在线观看一区| 欧美少妇xxxx| 精品国产伦一区二区三区观看方式| 精品一卡二卡三卡| 亚洲黄色高清| 青青青在线视频播放| 伊人成人在线视频| 黄色一级片国产| 欧美va天堂在线| 日韩video| 午夜精品网站| 日韩极品视频在线观看| 国产一区二区三区四区老人| av磁力番号网| 欧美在线高清| 欧美另类videosbestsex日本| 欧美国内亚洲| 欧美日韩激情四射| 在线国产欧美| 18岁网站在线观看| 久久精品女人天堂| 国产日韩成人内射视频| 日本一不卡视频| 国产一级片自拍| 韩国一区二区三区| 亚洲av综合色区无码另类小说| 国产suv精品一区二区6| 亚洲男女在线观看| 久久亚洲精品小早川怜子| 熟女少妇内射日韩亚洲| 国产情人综合久久777777| 亚洲色图 激情小说| 亚洲天堂免费看| 久久黄色免费网站| 欧美视频中文字幕在线| 国产精品sm调教免费专区| 91麻豆精品国产自产在线| 亚洲精品一区二区口爆| 日韩二区三区在线| av网站大全在线观看| 欧美成人一二三| 狠狠操一区二区三区| 国产精品99久久久久久www| 五月天色综合| 国产欧美综合精品一区二区| 免费看成人吃奶视频在线| 一级做a爰片久久| 欧美日韩亚洲一区| 日韩一级在线免费观看| 久久成人精品无人区| 国产大学生视频| 国产人伦精品一区二区| 免费日韩在线视频| 在线观看亚洲专区| 朝桐光av在线一区二区三区| 亚洲人成网7777777国产| 在线中文字幕第一页| 秋霞午夜一区二区| 久久av偷拍| 日本一区二区三区精品视频| 午夜日韩在线| 天天摸天天碰天天添| 国产精品亚洲一区二区三区妖精 | 亚洲天堂一区二区在线观看| 不卡av电影在线播放| 欧美88888| 精品久久久久久中文字幕一区奶水 | 亚洲一区二区在线视频| 国产精品欧美综合| 精品国产乱子伦一区| 午夜免费播放观看在线视频| 91精品成人久久| 久久久久毛片免费观看| 日本一区二区精品| 亚洲国产高清一区| 亚洲高清视频免费| 亚洲国产成人一区二区三区| 日本在线观看视频网站| 7777女厕盗摄久久久| 国产免费av高清在线| 国产+成+人+亚洲欧洲| 国产精品18| 一本一道久久a久久综合精品| 欧美一级专区| 午夜剧场免费看| 亚洲猫色日本管| 911美女片黄在线观看游戏| 亚洲欧美日韩一区二区三区在线| 欧美一卡二卡| 91青草视频久久| 欧美高清视频在线观看mv| 无码人妻丰满熟妇区五十路百度| 成人高清视频免费观看| 免费人成在线观看| 7777精品伊人久久久大香线蕉完整版 | 国产色一区二区| 97久久久久久久| 亚洲国产日韩一区| 91禁在线看| 黑人中文字幕一区二区三区| 激情欧美亚洲| 在线观看免费视频国产| 亚洲一区在线观看免费| 国产99对白在线播放| 欧美精品免费在线| 成人短视频软件网站大全app| 曰韩不卡视频| 蜜桃精品视频在线观看| 青青操在线播放| 欧美日韩成人综合在线一区二区| 9色在线观看| 国产精品一区二区三区久久 | 伊人久久大香线蕉av一区二区| 久久人体大尺度| 欧美性bbwbbwbbwhd| 久久精品男女| 夫妇露脸对白88av| 欧美高清一级片在线| 日日噜噜夜夜狠狠久久波多野| 国产精品久久| 蜜桃视频无码区在线观看| 亚洲午夜在线视频| 日本成人动漫在线观看| 91国产高清在线| 妖精视频一区二区三区 | 蜜桃av一区二区三区电影| 无码人妻aⅴ一区二区三区69岛| 日本乱人伦aⅴ精品| 1024视频在线| 亚洲影视中文字幕| 亚洲国产专区| 国产毛片久久久久久久| 欧美唯美清纯偷拍| 在线观看男女av免费网址| 国产精品成人观看视频免费| 亚洲免费综合| 亚洲天堂岛国片| 欧美一区日韩一区| 8x8ⅹ拨牐拨牐拨牐在线观看| 欧美日韩国产高清视频| 久久精品国产免费| 青青草成人免费| 日韩久久免费视频| 伊人久久大香| 91免费黄视频| 日本一区二区三区在线不卡| 国产视频一区二区三| 97精品视频在线播放| 欧美呦呦网站| 极品白嫩的小少妇| 欧洲激情一区二区| 美女航空一级毛片在线播放| 欧美二区三区| 国产乱码精品一区二区三区五月婷 | 加勒比av中文字幕| 天涯成人国产亚洲精品一区av| 久久精品a一级国产免视看成人| 91久久国产精品| 免费欧美日韩| 九九热视频精品| 亚洲人成在线一二| 国产精品调教视频|