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

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:43:39
字體:
供稿:網(wǎng)友

開發(fā)中,我們經(jīng)常需要將PO轉(zhuǎn)DTO、DTO轉(zhuǎn)PO等一些實體間的轉(zhuǎn)換。比較出名的有BeanUtil 和ModelMapper等,它們使用簡單,但是在稍顯復雜的業(yè)務(wù)場景下力不從心。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>

需求

我們假設(shè)有學生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 的屬性名不對應(yīng)例如:

此時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")     // 多個屬性不對應(yīng)可以用 "," 隔開編寫多個@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")     // 多個屬性不對應(yīng)可以用 "," 隔開編寫多個@Mapping     // ,@Mapping(target = "uname", source = "sname")  })   User studentToUser(Student student);}

轉(zhuǎn)換list

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

轉(zhuǎn)化 List<> 集合時必須有 實體轉(zhuǎn)化,因為在實現(xiàn)中,List 轉(zhuǎn)換是 for循環(huán)調(diào)用 實體轉(zhuǎn)化的。所以當屬性名不對應(yīng)時,應(yīng)該在 實體轉(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")     // 多個屬性不對應(yīng)可以用 "," 隔開編寫多個@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 后自動生成)

@Componentpublic 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;  }}

總結(jié)

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


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 操碰视频在线观看 | 毛片大全在线观看 | 久久精品中文字幕一区 | 欧美性生活xxxxx | av国产片| 在线免费观看精品 | 欧美一级免费在线观看 | 国产在线观看91精品 | 亚洲小视频在线 | 成年人在线视频免费 | 久久综合伊人 | 91成人免费网站 | 黑人日比视频 | 九九看片 | av大全在线播放 | 欧美老逼| 中国女警察一级毛片视频 | 日韩黄色免费在线观看 | 欧美大屁股精品毛片视频 | 国产美女自拍av | 久久超| 美女黄视频在线观看 | hd日本xxxx| 国产成人精品午夜视频' | 毛片大全| 色屁屁xxxxⅹ在线视频 | 美国人成人在线视频 | 亚洲网站免费观看 | 91亚洲免费视频 | 日本高清在线播放 | 午夜视频你懂的 | 久久免费精品视频 | 日本一道aⅴ不卡免费播放 久久久久久久高清 | 蜜桃视频在线免费播放 | 最新av免费网址 | 美国一级毛片片aa久久综合 | 91精品观看91久久久久久国产 | 国产成人精品区一区二区不卡 | 日本羞羞的午夜电视剧 | 免费看污视频在线观看 | 黄色一级片在线观看 |