麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > Java > 正文

MapStruct實(shí)體間轉(zhuǎn)換的簡(jiǎn)單用法

2024-07-14 08:43:41
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

摘要: 在實(shí)際項(xiàng)目中,我們經(jīng)常需要將PO轉(zhuǎn)DTO、DTO轉(zhuǎn)PO等一些實(shí)體間的轉(zhuǎn)換。比較出名的有BeanUtil 和ModelMapper等,它們使用簡(jiǎn)單,但是在稍顯復(fù)雜的業(yè)務(wù)場(chǎng)景下力不從心。MapStruct這個(gè)插件可以用來(lái)處理domin實(shí)體類與model類的屬性映射,可配置性強(qiáng)。

建立Maven項(xiàng)目

MapStruct需要醒目構(gòu)建工具(如Maven)支持,如果項(xiàng)目結(jié)構(gòu)不標(biāo)準(zhǔn),可能無(wú)法生成對(duì)應(yīng)的轉(zhuǎn)換類。這里我使用Maven構(gòu)建工程。

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

MapStruct是一個(gè)一直在進(jìn)步的工具,后面的版本不斷改進(jìn)之前版本的不足,修復(fù)之前版本的bug,使用的時(shí)候最好最新的穩(wěn)定版。

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

需要引入的依賴包,可以看到使用到了java8,最新版甚至已經(jīng)支持了java9。當(dāng)然這不以為著你必須使用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插件必不可少,格式也是固定的。

簡(jiǎn)單示例

有一個(gè)實(shí)體類-用戶User

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

有一個(gè)實(shí)體類-雇員Employee,雇員也是用戶,只是比用戶多一個(gè)屬性-職位position

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

在具體業(yè)務(wù)場(chǎng)景下,需要User 對(duì)象轉(zhuǎn)換為Employee對(duì)象,有時(shí)候需要Employee對(duì)象轉(zhuǎn)換為User對(duì)象。

使用MapStrut的話,需要寫一個(gè)接口:

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

運(yùn)行示例

首先需要mvn compile,自動(dòng)生成轉(zhuǎn)換代碼。生成的代碼放在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;  }}

簡(jiǎn)單的寫個(gè)測(cè)試類實(shí)驗(yàn)一下。

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());  }}

結(jié)果輸出:

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

效果不錯(cuò),需要轉(zhuǎn)換的字段都準(zhǔn)確無(wú)誤,不過(guò)有人要吐糟了,這樣的用法比BeanUtil 復(fù)雜多了,還只是達(dá)到相同的效果。這種簡(jiǎn)單的轉(zhuǎn)化確實(shí)不需要MapStruct,它要做的是更為復(fù)雜的業(yè)務(wù)場(chǎng)景。

MapStruct問(wèn)題

1.MapStruct轉(zhuǎn)換不準(zhǔn)確。

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

2.在Eclipse下,需要M2E plug-in的支持,如果Eclipse中沒(méi)有集成,需要去Eclipse Marketplace中下載安裝,有時(shí)候還需要指定下面的配置在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 編譯的時(shí)候,必須使用JDK,不能使用JRE,且版本要高于jdk6.

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人精品视频网站 | 欧美 日本 在线 | 免费a级黄色片 | 午夜视频亚洲 | 一级成人欧美一区在线观看 | japan护士性xxxⅹhd | 国产 日韩 一区 | 久久久久久久久久美女 | 久久久久亚洲国产精品 | 久久精精品 | 亚洲国产一区二区三区 | 精品视频一区二区三区四区 | 亚洲国产高清视频 | 黄在线观看在线播放720p | 日本黄色大片免费观看 | 亚洲成人精品国产 | 毛片在线免费视频 | 精品中文字幕久久久久四十五十骆 | 一级免费在线 | 欧美激情综合在线 | 在线成人av观看 | 久久2019中文字幕 | 羞羞视频免费网站男男 | 一级免费特黄视频 | 97超级碰碰人国产在线观看 | 在线观看国产www | 欧美性生活免费视频 | 日韩av有码在线 | 毛片网站视频 | 日韩精品中文字幕在线播放 | 中文字幕在线观看精品 | 免费观看一级 | 欧美性色黄大片www 成人免费网站在线观看 | 久久艳片 | 91精品国产日韩91久久久久久360 | 成人在线视频黄色 | 日本黄色大片免费 | 欧美三级欧美成人高清www | 久久中出 | 91 免费看片 | 特级毛片免费 |