欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MapStruct實體轉(zhuǎn)換及List轉(zhuǎn)換的方法講解

 更新時間:2019年03月13日 14:03:10   作者:雙斜杠少年  
今天小編就為大家分享一篇關(guān)于MapStruct實體轉(zhuǎn)換及List轉(zhuǎn)換的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

開發(fā)中,我們經(jīng)常需要將PO轉(zhuǎn)DTO、DTO轉(zhuǎn)PO等一些實體間的轉(zhuǎn)換。比較出名的有BeanUtil 和ModelMapper等,它們使用簡單,但是在稍顯復雜的業(yè)務場景下力不從心。MapStruct這個插件可以用來處理domin實體類與model類的屬性映射,可配置性強。只需要定義一個 Mapper 接口,MapStruct 就會自動實現(xiàn)這個映射接口,避免了復雜繁瑣的映射實現(xiàn)。MapStruct官網(wǎng)地址: http://mapstruct.org/

引入依賴

    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct-jdk8</artifactId>
      <version>1.1.0.Final</version>
    </dependency>

需求

我們假設有學生student 類 需要轉(zhuǎn)換成 用戶 user 類,將學生信息存入用戶信息庫

此時Student 類內(nèi)容如下:

public class Student {
  private Integer id;
  private String name;
  private Integer age;
  private String sex;
  //setters, getters, toString() 方法此處省略不寫,但是實際開發(fā)需要寫的哦 
  }

此時User 類內(nèi)容如下:

public class User {
  private Integer id;
  private String name;
  private Integer age;
  private String sex;
  //setters, getters, toString() 方法此處省略不寫,但是實際開發(fā)需要寫的哦 
 }

轉(zhuǎn)換model

此時 Student 和 User 的屬性名字都相同那么轉(zhuǎn)換接口就是

import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface UserMapping {
  /**
   * Student 轉(zhuǎn)化為 User
   * @param Student
   * @return
   */
   User studentToUser(Student student);
}

程序運行前要先編譯 mvn clean compile , 從而mapstruct框架生成UserMappingImpl 實現(xiàn)類。

轉(zhuǎn)換model 屬性不匹配

如果 User 和 Student 的屬性名不對應例如:

此時Student 類內(nèi)容如下:

public class Student {
  private Integer id;
  private String sname;
  private Integer age;
  private String sex;
  //setters, getters, toString() 方法此處省略不寫,但是實際開發(fā)需要寫的哦 
  }

此時User 類內(nèi)容如下:

public class User {
  private Integer id;
  private String uname;
  private Integer age;
  private String sex;
  //setters, getters, toString() 方法此處省略不寫,但是實際開發(fā)需要寫的哦 
 }

那么轉(zhuǎn)換接口為

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
@Mapper(componentModel = "spring")
public interface UserMapping {
  /**
   * Student 轉(zhuǎn)化為 User
   * @param Student
   * @return
   */
   @Mappings({
      @Mapping(target = "uname", source = "sname")
     // 多個屬性不對應可以用 "," 隔開編寫多個@Mapping
     // ,@Mapping(target = "uname", source = "sname")
  })
   User studentToUser(Student student);
}

轉(zhuǎn)換model 屬性類型不匹配

比如說user 類的sex字段類型改為boolean

此時User 類內(nèi)容如下:

public class User {
  private Integer id;
  private String uname;
  private Integer age;
  private boolean sex;
  //setters, getters, toString() 方法此處省略不寫,但是實際開發(fā)需要寫的哦 
 }

這個轉(zhuǎn)換需求有點變態(tài),所以 需要我門自己寫個轉(zhuǎn)換類

public class UserTransform {
  public String booleanToString(boolean value){
    if(value){
      return "男";
    }
    return "女";
  }
  public boolean strToBoolean(String str){
    if ("男".equals(str)) {
      return true;
    }
    return false;
  }
}

那么轉(zhuǎn)換接口為(使用 UserTransform.class 類)

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
@Mapper(componentModel = "spring",uses = UserTransform.class)
public interface UserMapping {
  /**
   * Student 轉(zhuǎn)化為 User
   * @param Student
   * @return
   */
   @Mappings({
      @Mapping(target = "uname", source = "sname")
     // 多個屬性不對應可以用 "," 隔開編寫多個@Mapping
     // ,@Mapping(target = "uname", source = "sname")
  })
   User studentToUser(Student student);
}

轉(zhuǎn)換list

當user 和 student 都是集合形式list 時應當如下轉(zhuǎn)換

轉(zhuǎn)化 List<> 集合時必須有 實體轉(zhuǎn)化,因為在實現(xiàn)中,List 轉(zhuǎn)換是 for循環(huán)調(diào)用 實體轉(zhuǎn)化的。所以當屬性名不對應時,應該在 實體轉(zhuǎn)化進行 @Mappings 的屬性名映射配置,然后list的轉(zhuǎn)換也會繼承這和屬性的映射。

例如 屬性名相同

import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface UserMapping {
  /**
   * Student 轉(zhuǎn)化為 User
   * @param Student
   * @return
   */
   User studentToUser(Student student);
   /**
   * Students 轉(zhuǎn)化為 Users
   * @param Students
   * @return
   */
   List<User> studentsToUsers(List<Student> students);

屬性名不同:

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
@Mapper(componentModel = "spring")
public interface UserMapping {
  /**
   * Student 轉(zhuǎn)化為 User
   * @param Student
   * @return
   */
   @Mappings({
      @Mapping(target = "uname", source = "sname")
     // 多個屬性不對應可以用 "," 隔開編寫多個@Mapping
     // ,@Mapping(target = "uname", source = "sname")
  })
   User studentToUser(Student student);
  /**
   * 此時 studentsToUsers 的實現(xiàn)為循環(huán)調(diào)用 studentToUser 并繼承了 studentToUser 的屬性映射
   * Students 轉(zhuǎn)化為 Users
   * @param Students
   * @return
   */
   List<User> studentsToUsers(List<Student> students);
}

展示自動生成的 UserMappingImpl 實現(xiàn)(此類為 執(zhí)行 mvn clean compile 后自動生成)

@Component
public class UserMappingImpl implements UserMapping {
  @Override
  public User studentToUser(student student) {
    if ( student == null ) {
      return null;
    }
    User user = new User();
    User.setId(student.getId() );
    User.setName(student.getName() );
    // 如果配置了屬性映射則為
    //User.setUname(student.getSname() );
    User.setSex(student.getSex() );
    User.setAge(student.getAge() );
    return user;
  }
  @Override
  public List<User> studentsToUsers(List<student> students) {
    if ( students == null ) {
      return null;
    }
    List<User> list = new ArrayList<User>();
    for ( student student : students ) {
      list.add( studentToUser( student ) );
    }
    return list;
  }
}

參考資料 :http://www.dbjr.com.cn/article/157763.htm

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • maven在settings.xml和pom.xml中指定jdk版本編譯的方法

    maven在settings.xml和pom.xml中指定jdk版本編譯的方法

    在開發(fā)Java應用時,通常需要指定要使用的Java版本,下面這篇文章主要給大家介紹了關(guān)于maven在settings.xm和pom.xml中指定jdk版本編譯的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • 使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的問題

    使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的問題

    這篇文章主要介紹了使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • springboot2.5.6集成RabbitMq實現(xiàn)Topic主題模式(推薦)

    springboot2.5.6集成RabbitMq實現(xiàn)Topic主題模式(推薦)

    這篇文章主要介紹了springboot2.5.6集成RabbitMq實現(xiàn)Topic主題模式(推薦),pom.xml引入依賴和常量類創(chuàng)建,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-11-11
  • JAVA線程池專題(概念和作用)

    JAVA線程池專題(概念和作用)

    這篇文章主要介紹了Java線程池的概念和作用,文中講解非常詳細,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • Java封裝數(shù)組實現(xiàn)包含、搜索和刪除元素操作詳解

    Java封裝數(shù)組實現(xiàn)包含、搜索和刪除元素操作詳解

    這篇文章主要介紹了Java封裝數(shù)組實現(xiàn)包含、搜索和刪除元素操作,結(jié)合實例形式分析了java針對數(shù)組元素的查找、刪除、判斷等相關(guān)操作封裝與使用技巧,需要的朋友可以參考下
    2020-03-03
  • 解決idea中yml文件不識別的問題

    解決idea中yml文件不識別的問題

    這篇文章主要介紹了解決idea中yml文件不識別的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • java.lang.String類的使用

    java.lang.String類的使用

    這篇文章主要介紹了java.lang.String類的使用,以及字符串的相關(guān)知識,需要了解相關(guān)知識的小伙伴可以參考該篇文章
    2021-08-08
  • Java連接MySQL數(shù)據(jù)庫命令行程序過程

    Java連接MySQL數(shù)據(jù)庫命令行程序過程

    SQL編程包括兩種形式,一種是過程化編程,主要通過數(shù)據(jù)庫交互式工具,通過存儲過程、觸發(fā)器、函數(shù)等形式的編程;另一種是嵌入式SQL編程,將SQL語句嵌入到高級開發(fā)語言,完成數(shù)據(jù)的各種操作
    2021-10-10
  • Java中的隨機數(shù)Random

    Java中的隨機數(shù)Random

    這篇文章主要介紹了Java中的隨機數(shù)Random,關(guān)于隨機數(shù)的介紹不設置隨機數(shù)種子,你每次隨機抽樣得到的數(shù)據(jù)都是不一樣的。設置了隨機數(shù)種子,能夠確保每次抽樣的結(jié)果一樣,下面來了解具體的詳細內(nèi)容介紹吧
    2022-03-03
  • Session過期后實現(xiàn)自動跳轉(zhuǎn)登錄頁面

    Session過期后實現(xiàn)自動跳轉(zhuǎn)登錄頁面

    這篇文章主要介紹了Session過期后實現(xiàn)自動跳轉(zhuǎn)登錄頁面,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12

最新評論