日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何解决mapstruct和lombok冲突问题

發布時間:2025/1/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何解决mapstruct和lombok冲突问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、沖突如何產生

在按照官網配置mapstruct,使用lombok。當我們在maven install時候會出現屬性找不到錯誤。

二、解決配置如下

  • 確保 Lombok 最低版本為 1.18.16
  • annotationProcessorPaths 中,要配置lombok
  • <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><annotationProcessorPaths><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${org.mapstruct.version}</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></path><!-- This is needed when using Lombok 1.18.16 and above --><path><groupId>org.projectlombok</groupId><artifactId>lombok-mapstruct-binding</artifactId><version>0.2.0</version></path></annotationProcessorPaths></configuration></plugin></plugins></build>

    三、mapstruct簡單例子

    MapStruct就是這樣的一個屬性映射工具,只需要定義一個 Mapper 接口,MapStruct 就會自動實現這個映射接口,避免了復雜繁瑣的映射實現。

    • 創建兩個對象Person 和 PersonDto
    @Data @NoArgsConstructor @AllArgsConstructor @ToString public class Person {private String username;private String address;private int age;private String idCard;private String email;}@Data @AllArgsConstructor @NoArgsConstructor @ToString public class PersonDto {private String username;private String address;private int age;private String identityCard;private String email;}
    • 寫一個 Mapper 接口 PersonConverter是單實體映射方法

    若源對象屬性與目標對象屬性名字一致,會自動映射對應屬性,不一樣的需要指定,也可以用 format 轉成自己想要的類型,也支持表達式的方式,可以看到像 name、email等這些名詞一致的我并沒有指定 source-target,而idCard指定了。

    @Mapper public interface PersonConver {PersonConver INSTANCE = Mappers.getMapper(PersonConver.class);@Mapping(source = "idCard",target = "identityCard")PersonDto converDto(Person person);}
    • 編譯MapStruct之后,手工編譯或者啟動 IDE 的時候 IDE 也會幫我們編譯, 會自動target/classes 下生成對應的實現類PersonConverImpl?
    @Generated(value = "org.mapstruct.ap.MappingProcessor",date = "2022-01-06T22:05:16+0800",comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_202 (Oracle Corporation)" ) public class PersonConverImpl implements PersonConver {@Overridepublic PersonDto converDto(Person person) {if ( person == null ) {return null;}PersonDto personDto = new PersonDto();personDto.setIdentityCard( person.getIdCard() );personDto.setUsername( person.getUsername() );personDto.setAddress( person.getAddress() );personDto.setAge( person.getAge() );personDto.setEmail( person.getEmail() );return personDto;} }
    • 寫一個單元測試類 Test 測試一下,看看效果
    @org.junit.Testpublic void test() {Person person = new Person();person.setUsername("張三");person.setAge(20);person.setEmail("20003@qq.com");person.setIdCard("2333");person.setAddress("北京市豐臺區");PersonDto personDto = PersonConver.INSTANCE.converDto(person);System.out.println(personDto);}

    ?詳細代碼地址為:mapstruct

    總結

    以上是生活随笔為你收集整理的如何解决mapstruct和lombok冲突问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。