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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MapStruct:将数据从一个bean传输到另一个bean

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapStruct:将数据从一个bean传输到另一个bean 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將數據從一種形式轉換為另一種形式在IT行業中是一種被高度利用的概念。 MapStruct通過在編譯時生成映射器實現,允許基于注釋的Bean轉換。 這樣可以確保在運行時沒有性能開銷。

什么是MapStruct?

MapStruct是一個代碼生成器,它基于約定優于配置的方法大大簡化了Java Bean類型之間的映射的實現。

生成的映射代碼使用簡單的方法調用,因此速度快,類型安全且易于理解。

為什么選擇MapStruct?

多層應用程序通常需要在不同的對象模型(例如實體和DTO)之間進行映射。 編寫此類映射代碼是一項繁瑣且容易出錯的任務。 MapStruct旨在通過使其盡可能自動化來簡化這項工作。

與其他映射框架相比,MapStruct在編譯時生成Bean映射,以確保高性能,允許快速的開發人員反饋和徹底的錯誤檢查。

實作

pom.xml

在web.xml中,添加“ maven-compiler-plugin ”,并使用組ID“ org.apache.maven.plugins ”。 您可以添加特定的jdk源/目標版本,并從以下位置獲取最新版本
MapStruct網站 。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>1.6</source> <!-- or higher, depending on your project --><target>1.6</target> <!-- or higher, depending on your project --><annotationProcessorPaths><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.1.0.Beta1</version></path></annotationProcessorPaths></configuration> </plugin>

現在添加mapstruct jar作為依賴項。

<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>1.1.0.Beta1</version> </dependency>

問題陳述與解決方案

假設我們有兩個表示個人和業務聯系的pojo,如下所述,并且我們都在特定的jsps上使用這兩個pojo。 現在,對于兩個聯系人都相同的功能,我們需要將數據從一種pojo傳輸到另一種。

PrimaryContact.java

public class PrimaryContact {private String name;private String phone;private String email;public PrimaryContact() {super();}public PrimaryContact(String name, String phone, String email) {super();this.name = name;this.phone = phone;this.email = email;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "PrimaryContact [name=" + name + ", phone=" + phone + ", email=" + email + "]";}}

BusinessContact.java

public class BusinessContact {private String firstName;private String lastName;private String businessPhone;private String businessEmail;private String businessCountry;public BusinessContact() {super();}public BusinessContact(String firstName, String lastName, String businessPhone, String businessEmail,String businessCountry) {super();this.firstName = firstName;this.lastName = lastName;this.businessPhone = businessPhone;this.businessEmail = businessEmail;this.businessCountry = businessCountry;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getBusinessPhone() {return businessPhone;}public void setBusinessPhone(String businessPhone) {this.businessPhone = businessPhone;}public String getBusinessEmail() {return businessEmail;}public void setBusinessEmail(String businessEmail) {this.businessEmail = businessEmail;}public String getBusinessCountry() {return businessCountry;}public void setBusinessCountry(String businessCountry) {this.businessCountry = businessCountry;}@Overridepublic String toString() {return "BusinessContact [firstName=" + firstName + ", lastName=" + lastName + ", businessPhone=" + businessPhone+ ", businessEmail=" + businessEmail + ", businessCountry=" + businessCountry + "]";}}

我們編寫一個Mapper來傳輸數據,如下所示。 注釋@Mappings定義了將源pojo中的哪些屬性轉移到目標pojo中的特定屬性。 批注定義@InheritInverseConfiguration反向映射要完成。

ContactMapper.java

/*** @author javareferencegv*/ @Mapper @DecoratedWith(ContactMapperDecorator.class) public interface ContactMapper {ContactMapper INSTANCE = Mappers.getMapper(ContactMapper.class);/*** We define only those mappings which doesn't have same signature in source and target*/ @Mappings({ @Mapping(source = "phone", target = "businessPhone"),@Mapping(source = "email", target = "businessEmail"),@Mapping(target = "businessCountry", constant="USA")})BusinessContact primaryToBusinessContact(PrimaryContact primary);@InheritInverseConfigurationPrimaryContact businessToPrimaryContact(BusinessContact business);}

在某些情況下,映射不是直接的,我們需要在將一個屬性映射到另一個屬性之前使用自定義邏輯。 這里的一個例子是主要聯系人有全名,而業務聯系人有名和姓。 在這種情況下,我們使用裝飾器添加自定義實現。 這是在映射器中添加定義的注釋@DecoratedWith。 裝飾器的實現如下:

ContactMapperDecorator.java

public abstract class ContactMapperDecorator implements ContactMapper{private final ContactMapper delegate;public ContactMapperDecorator(ContactMapper delegate) {this.delegate = delegate;}@Overridepublic BusinessContact primaryToBusinessContact(PrimaryContact primary){BusinessContact business = delegate.primaryToBusinessContact(primary); //Executes the mapperString[] names = primary.getName().split(" ");business.setFirstName(names[0]);business.setLastName(names[1]);return business;}@Overridepublic PrimaryContact businessToPrimaryContact(BusinessContact business){PrimaryContact primary = delegate.businessToPrimaryContact(business); //Executes the mapperprimary.setName(business.getFirstName() + " " + business.getLastName());return primary;}}

執行方式:

一旦我們構建了一個實現類文件,它將由mapstruct生成。 我們都準備運行映射器。

public class ContactConvertor {public static void main(String[] args) {PrimaryContact primary = new PrimaryContact("Jack Sparrow","9999999999","test@javareferencegv.com");BusinessContact business = ContactMapper.INSTANCE.primaryToBusinessContact(primary);System.out.println(business);PrimaryContact primaryConverted = ContactMapper.INSTANCE.businessToPrimaryContact(business);System.out.println(primaryConverted);}}

輸出:

BusinessContact [firstName=Jack, lastName=Sparrow, businessPhone=9999999999, businessEmail=test@javareferencegv.com, businessCountry=USA] PrimaryContact [name=Jack Sparrow, phone=9999999999, email=test@javareferencegv.com]

翻譯自: https://www.javacodegeeks.com/2016/12/mapstruct-transferring-data-one-bean-another.html

總結

以上是生活随笔為你收集整理的MapStruct:将数据从一个bean传输到另一个bean的全部內容,希望文章能夠幫你解決所遇到的問題。

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