亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

<optgroup id="cczp1"><ruby id="cczp1"><cite id="cczp1"></cite></ruby></optgroup>
  • <acronym id="cczp1"></acronym>
    <acronym id="cczp1"><option id="cczp1"><ol id="cczp1"></ol></option></acronym>
    <delect id="cczp1"></delect>
    <center id="cczp1"></center>
    <delect id="cczp1"></delect><em id="cczp1"><button id="cczp1"><blockquote id="cczp1"></blockquote></button></em>
    1. <optgroup id="cczp1"><td id="cczp1"><dfn id="cczp1"></dfn></td></optgroup>

      重磅,MapStruct 1.5 發(fā)布,這次終于支持Map轉(zhuǎn)為Bean了

      本月三號,MapStruct 1.5.0 Final發(fā)布,本次正式版距離上次正式版發(fā)布已經(jīng)過去了快7年(上個正式版發(fā)布于2015年11月),此次發(fā)布除了修復了110多個bug外,還有以下新特性值得關(guān)注:

      • 支持了Map到bean的轉(zhuǎn)換
      • 支持更加完備條件轉(zhuǎn)換(Conditional mapping)
      • 支持子類之間的轉(zhuǎn)換(Support for subclass mapping)

      1. 新增Map到Java bean的轉(zhuǎn)換(Mapping from Map to Bean)

      如果我們有以下Java Bean

      public class Customer { private Long id; private String name; //getters and setter omitted for brevity}

      相應(yīng)的MapStruct代碼如下:

      @Mapperpublic interface CustomerMapper { @Mapping(target = “name”, source = “customerName”) Customer toCustomer(Map map);}

      那最終會生成類似如下的轉(zhuǎn)換代碼:

      // GENERATED CODEpublic class CustomerMapperImpl implements CustomerMapper { @Override public Customer toCustomer(Map map) { // … if ( map.containsKey( “id” ) ) { customer.setId( Integer.parseInt( map.get( “id” ) ) ); } if ( map.containsKey( “customerName” ) ) { customer.setName( source.get( “customerName” ) ); } // … }}

      不過需要注意,待轉(zhuǎn)換的Map的key必須是String類型的,否則,轉(zhuǎn)換代碼會跳過這個key

      2. 更加完備的條件轉(zhuǎn)換(Conditional Mapping)

      從1.5.0 Final版本之前,如果Java bean中含有hasXXX或者isXXX的這類方法(XXX是bean中的屬性名),則MapStruct生成的代碼中則會調(diào)用這類方法來判斷是否在轉(zhuǎn)換后的bean中是否包含原來的屬性,但是遺憾的是,大多數(shù)情況下,我們并不能直接修改原bean的代碼。基于此,1.5.0 Final版本引入了org.mapstruct.Condition注解來實現(xiàn)條件轉(zhuǎn)換。例如我們有如下轉(zhuǎn)換代碼:

      @Mapperpublic interface CarMapper { CarDto carToCarDto(Car car); @Condition default boolean isNotEmpty(String value) { return value != null && !value.isEmpty(); }}

      則Map Struct 1.5.0 Final生成的代碼是:

      // GENERATED CODEpublic class CarMapperImpl implements CarMapper { @Override public CarDto carToCarDto(Car car) { if ( car == null ) { return null; } CarDto carDto = new CarDto(); if ( isNotEmpty( car.getOwner() ) ) { carDto.setOwner( car.getOwner() ); } // Mapping of other properties return carDto; }}

      org.mapstruct.Condition除了作用到整個bean外還可以修飾具體的屬性值,實現(xiàn)bean屬性維度的條件轉(zhuǎn)換。

      3. 增加對子類轉(zhuǎn)換的支持(Subclass Mapping)

      假如有父類Fruit和兩個子類Apple和Banana,在新特性的支持下我們的轉(zhuǎn)換代碼可以寫的更加簡潔

      @Mapperpublic interface FruitMapper { @SubclassMapping( source = AppleDto.class, target = Apple.class ) @SubclassMapping( source = BananaDto.class, target = Banana.class ) Fruit map( FruitDto source );}

      如果Fruit是抽象類或者是接口,則會報編譯錯誤。

      原文鏈接:https://mp.weixin.qq.com/s/DuMBy5fqpldm8vxD-v_NpQ

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年6月21日 15:24
      下一篇 2022年6月21日 15:25

      相關(guān)推薦

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息