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

喜新厭舊,是我的本性。今天就寵Mapstruct怎么了!

開發(fā) 后端
這些年寫Java寫多了,感覺Java是越來越丑。尤其是在玩了TypeScript之后,看到Java代碼總有一股想吐的感覺。這種思想的轉(zhuǎn)變,從側(cè)面上證明了,我并不是一個(gè)專一的人。

[[381393]]

本文轉(zhuǎn)載自微信公眾號(hào)「小姐姐味道」,作者姐養(yǎng)狗2號(hào) 。轉(zhuǎn)載本文請(qǐng)聯(lián)系小姐姐味道公眾號(hào)。   

這些年寫Java寫多了,感覺Java是越來越丑。尤其是在玩了TypeScript之后,看到Java代碼總有一股想吐的感覺。這種思想的轉(zhuǎn)變,從側(cè)面上證明了,我并不是一個(gè)專一的人。

因?yàn)槲沂且粭l狗。

喜新厭舊,是我的本性,即使我把自己表現(xiàn)的很純潔。

按理說,牛x的人物并不需要關(guān)注語言層面這種較低級(jí)的問題。但是,無論是什么語言,各種屬性拷貝,是在工程上繞不開的問題。比如折騰人的VO、BO、DTO、DO等。

項(xiàng)目中的代碼,有六成,是在做這些無用的轉(zhuǎn)換和各種數(shù)據(jù)驗(yàn)證。這個(gè)比例是我瞎謅的,但也相差無幾。

在Java中,有三種方式來處理這些屬性拷貝:

  1. 直接硬編碼,把代碼硬懟上去
  2. 使用各種BeanUtils,通過反射完成賦值
  3. 使用類似MapStruct的工具,直接在編譯期完成

其實(shí)嘛,哪一種都有利弊,有些東西雖然香,但實(shí)際用起來,還是要思量一下。個(gè)個(gè)打扮的花枝招展的,都是外在的皮囊。

本文主要介紹Mapstruct的使用,并從這香噴噴的工具中,聞一下其中變餿的味道。

1. 如何使用?

照例,需要在pom中加入依賴包,我們這里用的是1.4.1.Final版本。

  1. <dependency> 
  2.     <groupId>org.mapstruct</groupId> 
  3.     <artifactId>mapstruct</artifactId> 
  4.     <version>${org.mapstruct.version}</version> 
  5. </dependency> 

這還沒完,還需要在pom中的build部分,增加一個(gè)插件。搞這么復(fù)雜,是因?yàn)樗脑砗蚻ombok是一樣的,同樣通過APT在編譯器實(shí)現(xiàn)的。

 

這意味著,它的代碼,在編譯期就完成了。不需要反射,所以效率就和直接寫get、set,是一樣的。

  1. <plugin> 
  2.     <groupId>org.apache.maven.plugins</groupId> 
  3.     <artifactId>maven-compiler-plugin</artifactId> 
  4.     <version>3.8.1</version> 
  5.     <configuration> 
  6.         <source>1.8</source> 
  7.         <target>1.8</target> 
  8.         <annotationProcessorPaths> 
  9.             <path> 
  10.                 <groupId>org.mapstruct</groupId> 
  11.                 <artifactId>mapstruct-processor</artifactId> 
  12.                 <version>${org.mapstruct.version}</version> 
  13.             </path> 
  14.             <path> 
  15.                 <groupId>org.projectlombok</groupId> 
  16.                 <artifactId>lombok</artifactId> 
  17.                 <version>1.18.16</version> 
  18.             </path> 
  19.             <path> 
  20.                 <groupId>org.projectlombok</groupId> 
  21.                 <artifactId>lombok-mapstruct-binding</artifactId> 
  22.                 <version>0.2.0</version> 
  23.             </path> 
  24.         </annotationProcessorPaths> 
  25.     </configuration> 
  26. </plugin> 

這時(shí)候,我們就可以使用它提供的注解,方便的進(jìn)行屬性拷貝了。

  1. @Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) 
  2. public interface Transform { 
  3.     Transform T = Mappers.getMapper(Transform.class); 
  4.     Member fromMemberEntity(MemberEntity entity); 
  5.     MemberEntity fromMember(Member member); 

上面是一段示例代碼。Mapper注解,標(biāo)志著這是一個(gè)類型轉(zhuǎn)換工具(對(duì)象映射器),它提供了很多策略供我們選擇。直接寫接口文件,并不需要做一些額外的動(dòng)作,mapstruct就知道你要干什么!

在傳統(tǒng)的編程中,如果Member的屬性非常的多,我們需要手工完成這個(gè)過程,代碼會(huì)非常的多。

使用Mapperstruct之后,這部分重復(fù)的勞動(dòng),工具都替我們做了。

瞧瞧下面這張圖!

 

上面的圖表明了,代碼在target下的generated-source目錄下生成,這就是我們上面添加的插件的功勞;代碼的內(nèi)容,其實(shí)就是一些非空判斷和get、set等。相同字段名相同類型的屬性,將會(huì)無差別的拷貝過去。

如果你的bean屬性非常的多,這個(gè)工具會(huì)讓你的代碼由幾百行,變成幾行!

2. 與其他方式比較

那mapstruct有什么優(yōu)勢(shì)么?為什么不直接使用BeanUtils?它們的效果一樣的啊,而且后者各種類庫都有提供。

主要原因,就是效率問題。

BeanUtils是通過反射實(shí)現(xiàn)的,效率肯定很低;而mapstuct是基于APT實(shí)現(xiàn)的,沒有性能損耗。

BeanUtils的屬性拷貝,在判斷空值和不同類型的屬性時(shí),有很多障礙,會(huì)歇菜;而mapstruct有非常靈活的策略和轉(zhuǎn)化方式,自定義性比較強(qiáng)(后面會(huì)談到)。

3. 復(fù)雜場(chǎng)景

那下面我們就來看一個(gè)復(fù)雜的場(chǎng)景。

如果你的bean中,只有一些普通的屬性,那么使用mapstruct,就是如絲般的順滑。但總有一些異常情況,需要使用更高級(jí)的處理方式。

假設(shè)我想要由Unit轉(zhuǎn)化為ProductUnitEntity,但其中有個(gè)字段measureType它們的類型不一樣,我們就可以使用Mappings注解完成這個(gè)轉(zhuǎn)化。

  1. @Mappings({ 
  2.             @Mapping(source = "measureType.value", target = "measureType"
  3.     }) 
  4. ProductUnitEntity fromUnit(Unit v); 

編譯后的代碼如下所示。有了source和target,就可以實(shí)現(xiàn)比BeanUtils更加牛x的行為。你甚至可以通過dateFormat做一些日期轉(zhuǎn)化之類的。

 

其實(shí),上面的measureType是一個(gè)枚舉類型。如何將普通的類型轉(zhuǎn)化為枚舉類型呢?我們只需要提供一個(gè)default方法就ok了。mapstruct會(huì)判斷參數(shù)類型和返回值,所以說方法的名稱可以是任何合法的值。

  1. default Unit.MeasureType measureTypeIntegerToDomain(Integer value) { 
  2.         for (Unit.MeasureType s : Unit.MeasureType.values()) { 
  3.             if (s.getValue() == value) { 
  4.                 return s; 
  5.             } 
  6.         } 
  7.         return null

那mapstruct能實(shí)現(xiàn)List之間的轉(zhuǎn)化么?也是可以的。下面兩行代碼,就能夠自動(dòng)的補(bǔ)充for循環(huán),讓你的代碼更加簡(jiǎn)潔。

  1. List<StockKeepingUnit> fromSkuEntityList(List<StockKeepingUnitEntity> v); 
  2. List<StockKeepingUnitEntity> fromSkuList(List<StockKeepingUnit> v); 

End那么問題來了。

既然這么好的東西,那為什么現(xiàn)在的很多項(xiàng)目,都不用mapstruct,甚至連BeanUtils都不用,直接手工在那里get、set呢?

一種原因是,這些工具會(huì)大幅減少代碼量。mapstruct+hibernate-validate,一個(gè)管轉(zhuǎn)化,另一個(gè)管驗(yàn)證,簡(jiǎn)直就是以代碼行數(shù)論天下的公司的噩夢(mèng)。績(jī)效會(huì)降低的!

另一種原因就是,使用這些工具,并 不利于項(xiàng)目的重構(gòu) 。假如你在DTO里把a(bǔ)字段改成了b字段,mapstruct都貼心的為你忽略了這些變化。你的項(xiàng)目代碼并不會(huì)提示錯(cuò)誤,風(fēng)險(xiǎn)將直接帶到運(yùn)行時(shí)。

而使用get、set的方式,除了代碼量變的非常多以外,唯一的風(fēng)險(xiǎn)就是開發(fā)人員忘記了為某個(gè)新增的字段賦值。

在這種情況下,機(jī)器干的活,并不一定比人類可靠。所以使用mapstruct有一個(gè)大的前提:你的團(tuán)隊(duì),能夠通過約定,不給變量亂起名字,不亂重構(gòu)。如此,才能發(fā)揮它的價(jià)值。

作者簡(jiǎn)介:小姐姐味道 (xjjdog),一個(gè)不允許程序員走彎路的公眾號(hào)。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。我的個(gè)人微信xjjdog0,歡迎添加好友,進(jìn)一步交流。

 

責(zé)任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2018-02-24 23:19:31

iOSbug蘋果

2022-10-31 10:40:07

MySQLPostgreSQL數(shù)據(jù)庫

2011-12-07 10:16:45

Firefox新聞

2019-12-09 11:11:52

LoRaWi-Fi頻段

2009-09-27 10:59:23

UPS系統(tǒng)故障

2010-08-27 10:43:39

馬云

2023-11-14 07:40:36

阿里云服務(wù)中斷事件

2016-12-02 08:36:33

蘋果三星科技新聞早報(bào)

2017-12-25 23:38:42

2022-01-25 10:11:10

紅綠屏蘋果BUG

2012-06-08 09:57:25

2013-05-20 11:29:11

Windows 8

2013-05-06 09:19:10

Firefox火狐瀏覽器

2016-01-27 17:07:52

VMware

2022-04-12 13:30:56

云計(jì)算阿里互聯(lián)網(wǎng)行業(yè)

2011-01-13 10:50:42

AMD

2019-08-12 10:27:34

前端程序員網(wǎng)絡(luò)

2019-03-27 10:54:00

5G運(yùn)營(yíng)商設(shè)備制造商

2011-11-07 09:25:14

2022-05-05 09:23:21

裁員程序員危機(jī)
點(diǎn)贊
收藏

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

黑人一区二区三区四区五区| 久久久久亚洲精品中文字幕| 久久色.com| 国产精品视频白浆免费视频| 97成人资源站| 欧美大奶一区二区| 欧美视频在线一区| 国产日韩第一页| 五月激情丁香婷婷| 久久草av在线| 性欧美暴力猛交69hd| 国产亚洲精品熟女国产成人| 精品视频一区二区三区在线观看| 五月综合激情日本mⅴ| 亚洲精美视频| 天天爱天天干天天操| 麻豆成人免费电影| 97超级碰碰碰久久久| 制服丨自拍丨欧美丨动漫丨| 国产精品超碰| 5858s免费视频成人| 欧美 日韩 激情| dy888亚洲精品一区二区三区| 97久久精品人人做人人爽50路 | а√天堂8资源在线| 国产欧美精品一区二区色综合朱莉| 亚洲专区国产精品| 亚洲精品91天天久久人人| 亚洲私拍自拍| 久久亚洲国产精品| 国产一区二区三区精品在线| 麻豆精品少妇| 日韩免费视频一区二区| 亚洲欧美自偷自拍另类| 超碰一区二区| 图片区小说区区亚洲影院| 亚洲黄色网址在线观看| av中文字幕一区二区三区| 99久久伊人网影院| 成人免费91在线看| 国产美女免费看| 日韩av不卡在线观看| 91成人免费观看网站| 久久精品国产亚洲av麻豆色欲| 国产精品99在线观看| 国产一区二区三区网站| 久久久久久久久久久国产精品| a级日韩大片| 欧美高清精品3d| 亚洲综合日韩欧美| 国产精成人品2018| 欧美亚洲一区二区在线观看| 农村妇女精品一二区| 午夜影院在线播放| 狠狠躁18三区二区一区| 男女超爽视频免费播放| 黄网站在线观| 亚洲综合免费观看高清在线观看| 玖玖精品在线视频| 99热国产在线| 亚洲午夜在线视频| 国产美女在线一区| 国产美女高潮在线观看| 婷婷综合五月天| av动漫在线看| 日韩在线免费| 欧美三级电影在线看| 一区二区三区视频网| 2019中文亚洲字幕| 日韩欧美中文字幕制服| 国产精品熟妇一区二区三区四区 | 日韩欧美手机在线| 国产小视频免费在线网址| 国产视频一区不卡| 亚洲一区二区不卡视频| 久cao在线| 一区二区三区四区在线| 国产精品videossex国产高清| 久久五月精品中文字幕| 亚洲成av人片一区二区梦乃| 草草久久久无码国产专区| 韩国三级一区| 欧美日韩国产美女| 一起草最新网址| 欧美成人专区| 在线电影中文日韩| 欧美又粗又大又长| 香蕉精品999视频一区二区| 国产成人精品免费视频| 一级片在线观看视频| 国产成人久久精品77777最新版本| 国产精品一区二区三区在线观| 五月激情婷婷网| 国产精品国产三级国产a| 黄色网络在线观看| 美女91在线看| 在线播放亚洲一区| 午夜视频在线观看国产| 成人动漫免费在线观看| 精品中文字幕在线| 久久久精品毛片| 国产精品一级黄| 欧美日韩在线一二三| 欧洲美女少妇精品| 亚洲va韩国va欧美va| 狠狠躁狠狠躁视频专区| 中文字幕一区二区三区四区久久| 亚洲人成自拍网站| 欧美卡一卡二卡三| 免费成人性网站| 国产伦精品一区二区三区视频免费 | 日韩中文字幕在线看| 国产精品 欧美 日韩| 日韩va欧美va亚洲va久久| 成人免费在线看片| 色大18成网站www在线观看| 香港成人在线视频| 一级黄色在线播放| av永久不卡| 98精品在线视频| 国产黄色av片| 久久精品日韩一区二区三区| 日韩xxxx视频| 日本免费精品| 久久精品国产99国产精品澳门 | 日本一区免费在线观看| 久久99亚洲网美利坚合众国| 欧美日韩免费在线视频| 实拍女处破www免费看| 亚洲精华国产欧美| 91日韩在线视频| 尤物网址在线观看| 色综合天天综合网国产成人综合天| 性生活在线视频| 亚洲老妇激情| 91免费看片在线| 中文日本在线观看| 欧美中文字幕一区| 日本激情小视频| 另类av一区二区| 精品欧美国产| 美女搞黄视频在线观看| 亚洲国产天堂久久国产91| 久久久久久久黄色| 豆国产96在线|亚洲| 久久观看最新视频| 国产精品视频一区二区三区| 日韩网站免费观看| 中文字幕第一页在线播放| 国产视频一区不卡| 韩国中文字幕av| av在线不卡顿| 91精品久久久久久久久不口人| av在线电影观看| 欧美日韩国产小视频在线观看| xxxxx99| 麻豆精品久久精品色综合| 亚洲天堂电影网| 国产69精品久久| 精品国产自在精品国产浪潮| 国产精品久久久久久免费免熟 | 国产一级视频在线| 成人免费精品视频| 日本www在线视频| 美国一区二区| 日本一区二区在线播放| 毛片在线免费| 欧美日韩亚洲综合一区| 日本裸体美女视频| 国产精品一二三四五| 精品少妇在线视频| 日韩欧美天堂| 国产精品久久久久久久久久小说 | 狠狠人妻久久久久久综合麻豆| 亚洲图片欧美一区| 久久偷拍免费视频| 日本亚洲视频在线| 手机看片日韩国产| 成人香蕉社区| 日韩免费观看在线观看| 国产日产精品久久久久久婷婷| 欧美日韩久久不卡| 免费一级黄色大片| 99re热视频精品| 三级a三级三级三级a十八发禁止| 亚洲精品网址| 国产精品av一区| 视频在线日韩| 欧美夫妻性生活视频| 亚洲 另类 春色 国产| 在线一区二区观看| 欧美国产日韩在线观看成人| av不卡一区二区三区| 久久精品影视大全| 欧美日韩网站| 青娱乐一区二区| 中文久久电影小说| 国产精品黄色影片导航在线观看| av网址在线看| 亚洲男人天堂久| 国产又粗又猛又黄| 午夜成人免费电影| 精品国产视频在线观看| 91网页版在线| 国产xxxxhd| 日韩电影一区二区三区| www.九色.com| 久久中文视频| 免费一区二区三区在在线视频| 99精品视频在线免费播放| 欧美综合国产精品久久丁香| 成年人黄视频在线观看| 国产一区二区三区18| 蜜臀av在线观看| 51午夜精品国产| 久久久久久久久久成人| 亚洲成a人片综合在线| 欧美特黄一级片| 国产三级一区二区三区| 久久久久久久无码| 国产馆精品极品| 中文字幕在线观看第三页| 亚洲国内精品| 999久久欧美人妻一区二区| 成人影视亚洲图片在线| 麻豆精品视频| 精品久久ai| 91成人免费看| 综合久草视频| 成人国产在线视频| 精品视频一区二区三区四区五区| 777精品视频| 成全电影大全在线观看| 欧美成人午夜激情视频| 毛片在线播放a| 日韩在线观看精品| 成人18在线| 在线电影欧美日韩一区二区私密| 四虎精品成人免费网站| 亚洲国产高清福利视频| 精品国产亚洲AV| 日韩一区二区免费在线电影| 97人妻人人澡人人爽人人精品| 欧美无人高清视频在线观看| 欧美特级黄色片| 色天使色偷偷av一区二区| 国产乱国产乱老熟| 色综合激情五月| 男人天堂视频在线| 在线免费观看成人短视频| 日本中文字幕在线观看视频| 一本色道a无线码一区v| 欧美男人亚洲天堂| 91精品福利在线| 懂色av蜜臀av粉嫩av喷吹| 欧美伊人精品成人久久综合97 | 精品欧美一区二区三区精品久久| 国产三级在线观看视频| 日韩欧美亚洲国产另类 | 懂色av一区二区三区蜜臀| 欧美熟妇精品一区二区| 成人免费毛片片v| 熟女俱乐部一区二区| 国产欧美一区二区三区网站| 羞羞在线观看视频| 亚洲一区视频在线| 91精品国产乱码久久久张津瑜| 狠狠色狠狠色综合日日五| 免费观看日批视频| 在线播放视频一区| 少妇高潮久久久| 国产一区二区黑人欧美xxxx| 蜜芽在线免费观看| 久久免费国产视频| 超碰国产一区| 亚洲xxxxx电影| 欧美黄色影院| 一区二区成人国产精品| 欧美啪啪一区| 日韩中文字幕组| 国产精品亚洲综合一区在线观看| 逼特逼视频在线观看| 久久久亚洲午夜电影| 天堂av免费在线| 午夜一区二区三区视频| 中文字幕 视频一区| 日韩精品中文字幕一区| 久蕉在线视频| 欧美国产日韩一区| 经典三级一区二区| 国产精品10p综合二区| 日韩成人影院| 男女视频网站在线观看| 久草这里只有精品视频| 添女人荫蒂视频| 亚洲视频精选在线| 男人天堂2024| 日韩视频在线永久播放| 天堂网av在线播放| 日韩中文字幕在线观看| 蜜臀av在线| 国产在线拍偷自揄拍精品| 国产精品久av福利在线观看| 亚洲精品9999| 精品99视频| 欧美爱爱视频免费看| 激情成人综合网| aa一级黄色片| 亚洲一区电影777| 在线观看国产区| 精品国产乱码久久久久久蜜臀| 91最新在线| 91国语精品自产拍在线观看性色 | 91福利国产精品| www.天天干.com| 少妇久久久久久| 人在线成免费视频| 91亚洲精品一区| 波多野结衣在线播放一区| 日本福利视频一区| 久久先锋影音| 欧洲成人午夜精品无码区久久| 中文字幕欧美区| 无码人妻精品一区二区蜜桃色欲| 日韩欧美国产一区二区在线播放| www日韩tube| 国产精品99免视看9| 国产精品白浆| 亚洲 欧美 综合 另类 中字| 精品一区二区三区不卡| 久久av无码精品人妻系列试探| 亚洲国产视频一区二区| 亚洲一级视频在线观看| 一区二区三区无码高清视频| a级片免费在线观看| 亚洲a级在线观看| 亚洲精品网址| 欧美三级理论片| 94色蜜桃网一区二区三区| 久久久全国免费视频| 欧美一区二区三区色| 免费**毛片在线| 国产精品揄拍500视频| 久久中文字幕二区| 免费国产成人av| 91欧美一区二区| 69国产精品视频免费观看| 亚洲国产精品中文| 成人在线免费看片| 91麻豆桃色免费看| 亚洲91久久| 韩国三级与黑人| 亚洲免费在线看| 国产福利资源在线| 久久成人在线视频| 国产精品va视频| 乱熟女高潮一区二区在线| 国内精品不卡在线| 免费一级黄色大片| 精品成a人在线观看| 欧美13一16娇小xxxx| 亚洲www在线| 亚洲手机在线| 欧美熟妇精品黑人巨大一二三区| 亚洲综合一二三区| 午夜在线观看视频18| 91av在线网站| 九九综合在线| 又色又爽又黄视频| 亚洲免费成人av| 欧美一区二不卡视频| 91国内产香蕉| 57pao国产一区二区| 色欲av无码一区二区人妻| 久久久久国产精品人| 国产精品免费无遮挡| 欧美精品免费在线| 日韩美女国产精品| 国产综合免费视频| 中文在线资源观看网站视频免费不卡| 97人妻精品一区二区三区动漫 | 小泽玛利亚一区| 亚洲电影免费观看| 一区二区电影免费观看| 欧美主播一区二区三区美女 久久精品人| 男人的j进女人的j一区| 91麻豆免费视频网站| 日韩国产欧美精品在线 | 国产精品人人做人人爽| 牛夜精品久久久久久久99黑人| 亚洲最大视频网| 在线视频国内自拍亚洲视频| 九七久久人人| 欧美精品欧美精品| 激情五月婷婷综合网| 青娱乐av在线| 日韩电影中文字幕| 69久成人做爰电影| 国产精品一二三在线观看| 成人av电影在线播放|