亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MapStruct實體轉換及List轉換的方法講解

發布時間:2020-08-29 09:52:15 來源:腳本之家 閱讀:383 作者:雙斜杠少年 欄目:編程語言

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

引入依賴

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

需求

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

此時Student 類內容如下:

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

此時User 類內容如下:

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

轉換model

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

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

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

轉換model 屬性不匹配

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

此時Student 類內容如下:

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

此時User 類內容如下:

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

那么轉換接口為

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

轉換model 屬性類型不匹配

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

此時User 類內容如下:

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

這個轉換需求有點變態,所以 需要我門自己寫個轉換類

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

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

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

轉換list

當user 和 student 都是集合形式list 時應當如下轉換

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

例如 屬性名相同

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

展示自動生成的 UserMappingImpl 實現(此類為 執行 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;
  }
}

參考資料 :https://www.jb51.net/article/157763.htm

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁远县| 高安市| 达拉特旗| 舒兰市| 库伦旗| 盘锦市| 忻州市| 永年县| 温宿县| 从化市| 黑龙江省| 舟曲县| 同仁县| 嫩江县| 曲阳县| 上林县| 天津市| 宜昌市| 云浮市| 金塔县| 资讯| 辽宁省| 秭归县| 夹江县| 游戏| 广河县| 玉门市| 墨脱县| 广安市| 蒙山县| 永安市| 汪清县| 亚东县| 左贡县| 西华县| 巴东县| 平遥县| 丽江市| 阿尔山市| 略阳县| 固镇县|