亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

MapStruct實體間轉換的簡單用法

2024-07-14 08:43:41
字體:
來源:轉載
供稿:網友

摘要: 在實際項目中,我們經常需要將PO轉DTO、DTO轉PO等一些實體間的轉換。比較出名的有BeanUtil 和ModelMapper等,它們使用簡單,但是在稍顯復雜的業務場景下力不從心。MapStruct這個插件可以用來處理domin實體類與model類的屬性映射,可配置性強。

建立Maven項目

MapStruct需要醒目構建工具(如Maven)支持,如果項目結構不標準,可能無法生成對應的轉換類。這里我使用Maven構建工程。

<properties><org.mapstruct.version>1.2.0.CR1</org.mapstruct.version></properties>

MapStruct是一個一直在進步的工具,后面的版本不斷改進之前版本的不足,修復之前版本的bug,使用的時候最好最新的穩定版。

<dependencies>  <dependency>    <groupId>org.mapstruct</groupId>    <artifactId>mapstruct-jdk8</artifactId>    <version>${org.mapstruct.version}</version>  </dependency></dependencies>

需要引入的依賴包,可以看到使用到了java8,最新版甚至已經支持了java9。當然這不以為著你必須使用java8,java版本高于java6都是可以的。

<build>  <plugins>    <plugin><groupId>org.apache.maven.plugins</groupId>      <artifactId>maven-compiler-plugin</artifactId>      <version>3.5.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>        </annotationProcessorPaths>      </configuration>    </plugin>  </plugins></build>

Maven插件必不可少,格式也是固定的。

簡單示例

有一個實體類-用戶User

public class User {  private int id;  private String name;  private boolean married;// setters, getters, toString}

有一個實體類-雇員Employee,雇員也是用戶,只是比用戶多一個屬性-職位position

public class Employee {  private int id;  private String name;  private String position;  private boolean married;// setters, getters, toString}

在具體業務場景下,需要User 對象轉換為Employee對象,有時候需要Employee對象轉換為User對象。

使用MapStrut的話,需要寫一個接口:

@Mapperpublic interface UserMapper {  UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);  Employee userToEmployee(User user);  User employeeToUser(Employee employee);}

運行示例

首先需要mvn compile,自動生成轉換代碼。生成的代碼放在target/annotations下面。大致代碼如下:

import com.training.mapstrut.model.Employee;import com.training.mapstrut.model.User;import javax.annotation.Generated;@Generated(  value = "org.mapstruct.ap.MappingProcessor",  date = "2017-08-26T17:08:23+0800",  comments = "version: 1.2.0.CR1, compiler: javac, environment: Java 1.8.0_92 (Oracle Corporation)")public class UserMapperImpl implements UserMapper {  @Override  public Employee userToEmployee(User user) {    if ( user == null ) {      return null;    }    Employee employee = new Employee();    employee.setId( user.getId() );    employee.setName( user.getName() );    employee.setMarried( user.isMarried() );    return employee;  }  @Override  public User employeeToUser(Employee employee) {    if ( employee == null ) {      return null;    }    User user = new User();    user.setId( employee.getId() );    user.setName( employee.getName() );    user.setMarried( employee.isMarried() );    return user;  }}

簡單的寫個測試類實驗一下。

public class AppTest{  @Test  public void appTest(){    User user = new User();    user.setId(125);    user.setName("Chao");    user.setMarried(false);    Employee e = UserMapper.INSTANCE.userToEmployee(user);    System.out.println(e);    Assert.assertFalse(e.isMarried());  }}

結果輸出:

Employee [id=125, name=Chao, position=null, married=false]

效果不錯,需要轉換的字段都準確無誤,不過有人要吐糟了,這樣的用法比BeanUtil 復雜多了,還只是達到相同的效果。這種簡單的轉化確實不需要MapStruct,它要做的是更為復雜的業務場景。

MapStruct問題

1.MapStruct轉換不準確。

MapStruct一直在更新,一些特性在舊版本中無法識別,在使用的時候最要使用比較新的版本。

2.在Eclipse下,需要M2E plug-in的支持,如果Eclipse中沒有集成,需要去Eclipse Marketplace中下載安裝,有時候還需要指定下面的配置在pom.xml的properties中,以啟用Annotation Processing 
<m2e.apt.activation>jdt_apt</m2e.apt.activation>

3.在Eclipse下,Maven compile提示Nothing to compile - all classes are up to date,你可以試一下在Golds中填寫clean install compile。

4.Maven 編譯的時候,必須使用JDK,不能使用JRE,且版本要高于jdk6.

5.在Eclipse中,確定已經生成了*MapperImpl.java,但是運行時報錯ClassNotFoundException: Cannot find implementation for com...*Mapper 
在項目上右鍵 – > properties – > Java Compiler – > Annotation Processing (Enable 所有項) – > Factory Path (Enable) – > Add External JARS – > 選擇mapstruct-processor-*.jar(大概在計算機的目錄.m2/repository/org/mapstruct/mapstruct-processor) – > OK

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品揄拍一区二区| 国产美女91呻吟求| 国产精品免费一区豆花| 日韩在线观看成人| 亚洲综合日韩中文字幕v在线| 97免费中文视频在线观看| 日韩经典中文字幕| 中文字幕亚洲图片| 国产亚洲精品久久久久久777| 日韩电影中文字幕| 亚洲美女性生活视频| 国产精品久久不能| 中文字幕九色91在线| 亚洲精品欧美一区二区三区| 日本最新高清不卡中文字幕| 成人国产精品日本在线| 国产日韩中文字幕在线| 久久精品成人动漫| 欧洲永久精品大片ww免费漫画| 色婷婷综合久久久久| 黑人巨大精品欧美一区二区| 丝袜美腿精品国产二区| 国产视频福利一区| 欧亚精品在线观看| 亚洲人午夜色婷婷| 中文字幕日韩欧美精品在线观看| 成人a在线观看| 久久久久久久一区二区三区| 久久久91精品| 国产欧美精品xxxx另类| 色播久久人人爽人人爽人人片视av| 国产精品久久久久久久久免费| 日韩在线观看免费高清| 亚洲日韩欧美视频| 亚洲大胆美女视频| 久久久亚洲国产天美传媒修理工| 国产精品久久久久久久7电影| 欧美日韩在线视频一区| 91精品国产高清自在线| 亚洲精品91美女久久久久久久| 欧美人成在线视频| 成人精品在线观看| 成人有码在线播放| 国产精品久久久久久久久久尿| 亚洲精品美女网站| 亚洲无线码在线一区观看| 国产精品免费视频xxxx| 永久免费精品影视网站| 欧美视频13p| 久久中文字幕视频| 国产精品69精品一区二区三区| 欧美黑人性视频| 亚洲精品国产精品乱码不99按摩| 国产精品欧美日韩| 国产精品日韩在线观看| 久久精品一本久久99精品| 一本大道香蕉久在线播放29| 亚洲国产91精品在线观看| 欧美人与性动交a欧美精品| 97免费在线视频| 日韩av免费网站| 色伦专区97中文字幕| 久久精视频免费在线久久完整在线看| 成人444kkkk在线观看| 综合国产在线视频| 最近2019年日本中文免费字幕| 在线亚洲男人天堂| 久久久久久午夜| 久久av中文字幕| 亚洲成人国产精品| 久久中文字幕在线| 欧美裸体xxxx极品少妇| 亚洲女同性videos| 久久久精品免费| 久久久国产91| 亚洲成人久久久| 亚洲福利精品在线| 国产精品久久久久aaaa九色| 亚洲自拍欧美色图| 欧美日韩国产一区二区三区| 992tv成人免费视频| 国产精品亚洲一区二区三区| 国产精品久久不能| 久久精品视频中文字幕| 国产精品女视频| 亚洲最新av在线网站| 亚洲日本欧美日韩高观看| 日本三级久久久| 中文字幕精品影院| 日韩电影在线观看免费| 国产精品久久久久久中文字| 精品免费在线视频| 欧美激情xxxx| 欧美精品videosex极品1| 亚洲第一区第二区| 自拍亚洲一区欧美另类| 97人洗澡人人免费公开视频碰碰碰| 57pao成人永久免费视频| 久热精品视频在线| 九九九久久国产免费| 欧美视频裸体精品| 久久久久久久久久亚洲| 欧美激情精品久久久| 国产精品自产拍在线观看| 成人国产在线激情| 成人激情视频在线| 国产黑人绿帽在线第一区| 亚洲激情视频在线播放| 97精品国产97久久久久久春色| 日韩精品在线免费观看视频| 精品在线欧美视频| 日韩一区二区三区国产| 欧美在线视频网| 欧美一区二区大胆人体摄影专业网站| 78色国产精品| 亚洲欧美另类国产| 国产成人精品一区二区| 欧美成人精品一区二区三区| 国产日韩精品视频| 91九色国产在线| 国产91对白在线播放| 久久久国产精彩视频美女艺术照福利| 韩国欧美亚洲国产| 欧美精品电影免费在线观看| 精品亚洲va在线va天堂资源站| 久久久免费电影| 精品久久久av| 国产日韩在线观看av| 国产欧美在线视频| 免费av在线一区| 黑人与娇小精品av专区| 久久99青青精品免费观看| 欧美午夜丰满在线18影院| 97在线看免费观看视频在线观看| 亚洲成av人片在线观看香蕉| 在线精品国产成人综合| 国产网站欧美日韩免费精品在线观看| 国产精品入口日韩视频大尺度| 国产精品亚洲第一区| 国产精品福利在线观看| 精品美女永久免费视频| 亚洲天堂男人天堂| 一区二区三区视频免费| 欧美日韩精品中文字幕| 久久免费视频观看| 精品一区二区三区电影| 最近免费中文字幕视频2019| 国产精品视频网站| 亚洲精品视频免费在线观看| 在线丨暗呦小u女国产精品| 欧美成人午夜激情在线| 啊v视频在线一区二区三区| 91产国在线观看动作片喷水| 亚洲欧洲av一区二区| 欧美性猛交xxxx黑人| 午夜精品福利视频| 97在线视频一区| 精品动漫一区二区三区| 亚洲www永久成人夜色| 91社区国产高清| 久久精品久久精品亚洲人| 欧美一区二区影院| 午夜精品理论片| 国产精品吊钟奶在线|