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

MapStruct 進階技巧:提升代碼效率

開發 前端
MapStruct 是一個 Java 編譯時注解處理框架,用來自動化將一種 Java Bean 對象映射成另一種類型的對象。該框架的主要目標是使開發人員在盡可能少的代碼和最低的運行時間成本下實現屬性映射。MapStruct 通過在編譯時生成代碼來實現這點,這與大多數其他 Java Bean 映射框架在運行時通過反射進行映射形成了鮮明對比。

前言

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

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

MapStruct 具有以下主要特性:

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

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

expression

在轉化的時候,執行 java 表達式,直接看例子:

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

轉化成 target 對象時,createTime字段的值,會設置為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

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

@Data
public class Source {
    private String name;
}

@Data
public class Target {
    private String name;
}
    

@Mapper(componentModel = 'spring')
public interface MyMapper {
    Target toTarget(Source source);
}

生成的轉化代碼類如下:

@Component
public class MyMapperImpl implements MyMapper {

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

        Target target = new Target();

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

        return target;
    }
}

如果這種直接的 set/get 無法滿足需求,比如需要把 name 轉化成大寫格式,那么可以使用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) {
        // 這里寫轉換大寫的邏輯
        return value == null ? null : value.toUpperCase();
    }
}

生成的代碼如下:

@Component
public class MyMapperImpl implements MyMapper {

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

        Target target = new Target();

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

        return target;
    }
}

nullValueMappingStrategy

如果 source 為 null 時,對應的 target 的處理策略,默認是 NullValueMappingStrategy.RETURN_NULL,即 target 中對應的字段也設置為 null。

但有時候設置為 null 可能不符合我們的需求,比如 target 中有個 List ids,我們希望如果 source 中ids 為 null 時,target 的 ids 設置為空 list。這時候可以使用nullValueMappingStrategy策略中的NullValueMappingStrategy.RETURN_DEFAULT。

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

@Component
public class MyMapperImpl implements MyMapper {

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

        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)
public interface MyMapper {

    Target toTarget(Source source);
}

@Component
public class 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;
    }
}

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

Decorator

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

以下是一個例子:

public abstract class YourMapperDecorator implements YourMapper {

    private final 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);
}

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

責任編輯:武曉燕 來源: 一安未來
相關推薦

2025-05-26 04:00:00

2025-01-10 08:38:16

2024-06-27 11:22:34

2025-01-07 10:48:08

2024-11-19 15:28:15

2021-04-30 07:33:35

效率提升技巧

2020-07-08 17:06:00

Python開發工具

2017-03-07 14:26:19

Eclipse技巧效率

2022-04-29 08:15:40

Python技巧Max

2023-11-06 16:08:24

JavaList開發

2025-03-03 00:15:00

JavaScript開發效率

2009-06-05 15:04:36

Eclipse代碼模版

2022-09-23 08:00:00

開發安全低代碼平臺

2023-09-26 00:00:20

JS簡寫技巧

2011-05-07 14:00:44

打印效率提升技巧

2022-07-18 08:08:16

Go?語言技巧

2024-12-16 17:20:17

MySQL通配符

2024-01-03 18:01:48

Code技巧開發

2025-03-04 13:00:00

JavaScrip代碼語言

2023-09-19 10:31:09

算法數據
點贊
收藏

51CTO技術棧公眾號

久久婷婷色综合| 日韩大片在线免费观看| 亚洲精品视频一区二区| 国产日韩三区| 久久久黄色大片| 99re6这里只有精品| 精品国产百合女同互慰| 男女视频一区二区三区| 国产网友自拍视频导航网站在线观看| 成人h动漫精品一区二区| 日本视频久久久| 午夜精品福利在线视频| 亚洲免费专区| 日韩精品在线网站| 亚洲一级片网站| 91福利在线免费| 最新久久zyz资源站| 免费精品视频一区二区三区| 亚洲综合免费视频| 西西裸体人体做爰大胆久久久| 久久久成人的性感天堂| a天堂中文字幕| 国产精品45p| 91.成人天堂一区| 色七七在线观看| www成人免费观看| 一区二区三区免费| 亚洲综合首页| 国产区视频在线| 99久久精品免费看| av在线亚洲男人的天堂| 国产又黄又爽视频| 日日夜夜免费精品| 欧美在线国产精品| 国产网友自拍视频| 综合视频在线| 精品国产一区二区三区久久狼黑人 | 新版中文在线官网| 国产精品视频一二三区| 欧美性大战久久久久| 天天操天天操天天操| 国产精品亚洲午夜一区二区三区| 国产精品美女999| 中文字幕黄色片| 国产精品综合| 91国语精品自产拍在线观看性色 | 91在线观看免费观看 | 久久国产夜色精品鲁鲁99| 国产www精品| 三级网站在线播放| 天堂一区二区在线免费观看| 97在线看免费观看视频在线观看| 精品一区免费观看| 亚洲婷婷在线| 久久免费精品日本久久中文字幕| 黄色小说在线观看视频| 亚洲国产二区| 97欧美精品一区二区三区| 午夜影院在线看| 一本久道久久综合狠狠爱| 97av在线影院| 日韩电影在线观看一区二区| 老司机亚洲精品| 国产精品一区二区三区久久久| 免费看av在线| 久久爱www久久做| 91色琪琪电影亚洲精品久久| www.国产.com| 99精品偷自拍| 欧洲久久久久久| 在线看黄色av| 一个色在线综合| 无罩大乳的熟妇正在播放| 免费h在线看| 在线视频一区二区三| www.xxx亚洲| 一区二区三区日本视频| 日韩三区在线观看| 亚洲av无码一区二区三区网址| 美女毛片一区二区三区四区| 国产一区二区免费| 久久久久亚洲av无码专区体验| 亚洲网站在线| 国产精品久久久久久久久久ktv| 6—12呦国产精品| 成人小视频在线| 欧美激情视频一区二区三区| 国产美女福利在线| 精品久久久视频| 奇米视频888| 国产精品对白久久久久粗| 亚洲天堂男人天堂| 精品无码久久久久成人漫画| 亚洲久久一区二区| 国产精品视频1区| 丰满人妻妇伦又伦精品国产| 久久久精品免费免费| 一道本在线观看视频| av剧情在线观看| 欧洲亚洲国产日韩| 精品1卡二卡三卡四卡老狼| 国产亚洲一区| 欧美激情欧美激情在线五月| 一区二区小视频| 99久久亚洲一区二区三区青草| 亚洲视频电影| 成人影院网站| 精品裸体舞一区二区三区| 国产欧美一区二区三区在线观看视频| 欧美日韩少妇| 国产精品自拍小视频| 日韩一级免费毛片| 亚洲天堂2014| 一区二区成人网| 日韩欧美四区| 欧美日韩999| 一区不卡在线观看| 久久久久国产一区二区三区四区| 草草草视频在线观看| 国产电影一区二区三区爱妃记| 精品国产一区二区三区四区四| 99久久久无码国产精品不卡| 久久精品三级| 精品无人区一区二区三区竹菊| 4438x成人网全国最大| 欧美丝袜自拍制服另类| 久久久久亚洲av无码专区桃色| 一本一道久久a久久精品蜜桃| 国产精品高清免费在线观看| 日韩欧美电影在线观看| 午夜国产精品影院在线观看| 欧美熟妇另类久久久久久多毛| 欧美亚洲国产激情| 国产成人精品在线| 女人天堂在线| 色婷婷综合久久久中文字幕| 污污内射在线观看一区二区少妇| 国内精品福利| 51国偷自产一区二区三区的来源| 黄色网在线播放| 欧美电影一区二区三区| 天天色天天综合| 久88久久88久久久| 中文字幕在线亚洲精品| **国产精品| 久久综合久久八八| 国产毛片毛片毛片毛片| 中文字幕日韩一区二区| 日本一二区免费| 天天影视综合| 亚洲wwwav| 影音先锋在线播放| 日韩精品一区二区三区四区 | 91免费国产视频| av片在线观看| 亚洲成人教育av| 日韩少妇高潮抽搐| 91麻豆国产自产在线观看| 国产成人无码a区在线观看视频| 日韩精品欧美大片| 国产成人激情小视频| av一区在线观看| 欧美日本在线观看| 欧美成人国产精品高潮| 波多野结衣亚洲一区| 久久亚洲中文字幕无码| 亚洲系列另类av| 国产精品视频中文字幕91| 巨大荫蒂视频欧美大片| 欧美va亚洲va香蕉在线| www亚洲视频| 欧美激情一区二区三区全黄| 国产精品嫩草影视| 亚洲欧洲日本mm| 欧美最大成人综合网| 成人在线日韩| 性色av一区二区三区| 国产中文在线观看| 欧美丰满少妇xxxbbb| 黄色小视频在线免费看| 91看片淫黄大片一级在线观看| 久草综合在线观看| 亚洲影视一区| 久久久综合亚洲91久久98| 成人做爰视频www网站小优视频| 深夜精品寂寞黄网站在线观看| 国产高清视频免费| 精品福利一区二区| 国产黄色录像片| 成人黄页毛片网站| 亚洲国产精品三区| 国产精品v亚洲精品v日韩精品 | 麻豆av电影在线观看| 欧美日韩国产小视频在线观看| 免费毛片在线播放免费| 国产亚洲视频系列| 国产精品一级无码| 蜜臀av在线播放一区二区三区| 人妻av无码专区| 久久中文亚洲字幕| 久久精品日产第一区二区三区| 成人黄色91| 欧美一区二区三区精品电影| 黄色成人影院| 一本久久综合亚洲鲁鲁| 人妻偷人精品一区二区三区| 欧美日韩精品三区| 91丝袜一区二区三区| 一区二区三区在线免费观看| 女人又爽又黄免费女仆| 成人av在线网站| 欧美国产日韩在线视频 | 青娱乐国产精品视频| 久久久久国产精品一区二区| 肉大捧一出免费观看网站在线播放 | 爱爱爱视频网站| 欧洲专线二区三区| 国内精品二区| 视频精品国内| 成人免费在线视频网站| **欧美日韩在线观看| 97在线看福利| av资源网在线播放| 欧美激情18p| caopeng在线| 日韩一中文字幕| www.中文字幕久久久| 亚洲精品一区二区在线| 少妇又色又爽又黄的视频| 欧美一区二区三区啪啪| 亚洲综合免费视频| 欧美调教femdomvk| 青青艹在线观看| 在线观看日韩av先锋影音电影院| 国产情侣自拍av| 亚洲444eee在线观看| xxxx 国产| 亚洲国产精品久久一线不卡| 亚洲国产成人精品综合99| 1000部国产精品成人观看| 99热6这里只有精品| 中文子幕无线码一区tr| wwwww黄色| 中国av一区二区三区| 91狠狠综合久久久久久| 久久精品一区二区三区av| 国产成人精品无码免费看夜聊软件| 9色porny自拍视频一区二区| 影音先锋黄色资源| 26uuuu精品一区二区| 真实乱视频国产免费观看| 久久久久久99精品| 精品一区二区6| 国产精品不卡在线| 岛国毛片在线观看| 一区二区成人在线| 日本视频免费在线| 色婷婷亚洲精品| 在线免费观看一级片| 91精品国产综合久久久久久久| 国产91视频在线| 亚洲黄色av女优在线观看| 欧美一区二区三区少妇| 中文字幕亚洲一区二区三区| 韩国中文字幕在线| 国语自产在线不卡| 欧美性xxx| 国产中文字幕日韩| 一区二区三区在线资源| 精品久久sese| 欧美亚洲激情| 黄色录像特级片| 国产精品丝袜xxxxxxx| 成人亚洲视频在线观看| 精品一区二区三区的国产在线播放 | 欧美日韩视频免费观看| 国产在线日韩在线| 好吊妞国产欧美日韩免费观看网站| 久久一区二区三区av| 日韩成人免费| www.av片| 九色porny丨国产精品| 污污免费在线观看| 国产欧美一二三区| 久久国产精品波多野结衣| 色综合久久久久综合体| 国产免费av电影| 精品视频一区在线视频| 欧美69xxx| 欧美一性一乱一交一视频| 青青国产精品| 精品在线视频一区二区| 天天av综合| 成年人黄色片视频| 成人综合在线观看| 国产又粗又硬视频| 天天影视网天天综合色在线播放 | 精品国产电影一区二区| av福利在线播放| 国内精品国产三级国产在线专| 国产精品伊人| 欧美精品免费观看二区| 综合天堂久久久久久久| 一级在线免费视频| 91视频在线观看免费| 麻豆视频在线观看| 欧美精品自拍偷拍| 风间由美一区| 欧美一区二区三区…… | 卡通欧美亚洲| 国产精品12| 艳女tv在线观看国产一区| 成人一区二区三| 91网上在线视频| 久久久精品视频在线| 欧美日韩第一区日日骚| 男女污视频在线观看| 97视频免费在线观看| 玖玖精品一区| 亚洲综合五月天| 麻豆中文一区二区| 无码人妻aⅴ一区二区三区69岛| 午夜精品福利一区二区三区蜜桃| 精品国产av一区二区三区| 久久精品国产欧美激情| 黄页免费欧美| 亚洲成人自拍| 日韩激情一二三区| av电影网站在线观看| 欧美性xxxx极品高清hd直播| 色wwwwww| 性欧美亚洲xxxx乳在线观看| 日本精品视频| 男人天堂新网址| 国产精品99久久久久久久女警| 三级黄色录像视频| 欧美久久一区二区| 日本黄色片在线观看| 国产精品自产拍在线观| 欧美电影免费观看高清| 亚洲36d大奶网| 国产精品久久免费看| 在线免费观看视频网站| 北条麻妃一区二区三区中文字幕| 欧洲午夜精品| 男人j进女人j| 国产成人啪午夜精品网站男同| 男人的天堂久久久| 日韩精品一区二区三区swag | 小日子的在线观看免费第8集| 国产精品久久久久久亚洲毛片 | 992tv快乐视频| 国产999精品久久久久久绿帽| 久久久久久久久久久久久久免费看 | 国产999在线观看| 国内精品久久久久久久久电影网| 手机看片福利盒子久久| 中文字幕一区日韩精品欧美| 国产视频一二三四区| 欧美激情视频一区二区| 日韩美女毛片| mm131国产精品| 伊人性伊人情综合网| 人妻一区二区三区| 欧美在线免费视频| 日韩在线观看| 又色又爽又黄18网站| 狠狠躁18三区二区一区| 国产爆初菊在线观看免费视频网站| 国产精品网址在线| 国一区二区在线观看| 不卡一区二区在线观看| 欧美性感一类影片在线播放| 国产视频在线播放| 精品一区2区三区| 久久精品国产一区二区| 欧美黑人一级片| 亚洲欧美在线一区| 自拍偷拍亚洲| 春日野结衣av| 日韩一区在线播放| 亚洲 小说区 图片区 都市| 国产精品稀缺呦系列在线| 亚洲午夜激情在线| 久久久久久久毛片| 日韩精品综合一本久道在线视频| 最新欧美色图| 韩国黄色一级大片| 91免费在线看| 精品国产av 无码一区二区三区 | 美国十次综合久久| 亚洲精品无码久久久久久| 中文字幕一区二区三区av| 日本激情一区二区| 国产一区视频在线| 亚洲自啪免费| 青青操视频在线播放| 在线观看精品国产视频| 国产三级精品三级在线观看国产| 欧美美女一级片|