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

首頁 > 開發 > Java > 正文

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

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

開發中,我們經常需要將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 后自動生成)

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

總結

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久久电影| 久久91亚洲人成电影网站| 欧美成人三级视频网站| 国产精品27p| 欧美在线影院在线视频| 在线精品国产成人综合| 欧美国产日本高清在线| 久久久亚洲天堂| 精品美女永久免费视频| 欧美综合第一页| 久久久久五月天| 自拍视频国产精品| 欧美日本国产在线| 亚洲精品久久久久久久久久久久久| 欧美性极品少妇精品网站| 中文字幕亚洲欧美一区二区三区| 亚洲激情视频在线| 一区二区成人精品| 91久热免费在线视频| 久久91亚洲人成电影网站| 黑人巨大精品欧美一区免费视频| 色悠久久久久综合先锋影音下载| 亚洲国产一区二区三区四区| 亚洲成人a**站| 国产在线观看精品| 精品亚洲国产成av人片传媒| 精品久久久一区二区| 伊人久久久久久久久久久| 97精品国产97久久久久久免费| 美女啪啪无遮挡免费久久网站| 亚洲精品suv精品一区二区| 亚洲国产成人精品女人久久久| 一本色道久久综合狠狠躁篇怎么玩| 色综合久久悠悠| 欧美—级高清免费播放| 精品国内产的精品视频在线观看| 91精品国产高清| xxxx性欧美| 亚洲伊人一本大道中文字幕| 欧美国产一区二区三区| 久久99国产精品久久久久久久久| 亚洲精品suv精品一区二区| 富二代精品短视频| 国产欧美va欧美va香蕉在线| 久久久在线免费观看| 亚洲人高潮女人毛茸茸| 久久精品91久久香蕉加勒比| 日韩视频第一页| 精品福利在线看| 色综合影院在线| 欧美极品少妇xxxxⅹ裸体艺术| 国产精品丝袜久久久久久不卡| 亚洲在线www| 成人免费视频a| 黄色一区二区三区| 久久九九国产精品怡红院| 久热爱精品视频线路一| 影音先锋欧美在线资源| 狠狠操狠狠色综合网| 国产精品老女人精品视频| 尤物九九久久国产精品的分类| 欧美亚洲第一区| 国产亚洲精品久久久久动| 国产精品国产福利国产秒拍| 亚洲欧美日韩一区二区三区在线| 国产精品一区二区三区久久久| 国产精品高清在线| 国产精品a久久久久久| 国产日韩欧美视频在线| 插插插亚洲综合网| 国产美女精品视频免费观看| 亚洲影视中文字幕| 精品久久久久久久久久ntr影视| 国产精品三级美女白浆呻吟| 亚洲三级黄色在线观看| 全亚洲最色的网站在线观看| 最近2019中文字幕mv免费看| xvideos国产精品| 久久人人爽人人爽爽久久| 亚洲精品在线91| 国产精品中文字幕久久久| 亚洲97在线观看| 午夜精品美女自拍福到在线| 欧美最猛性xxxxx免费| 久久99国产精品久久久久久久久| 亚洲免费av网址| 国外成人性视频| 欧美疯狂做受xxxx高潮| 国产美女主播一区| 亚洲欧美变态国产另类| 日韩高清av在线| 中文字幕欧美精品日韩中文字幕| 在线电影欧美日韩一区二区私密| 欧美日韩国产成人高清视频| 欧美专区国产专区| 亚洲综合精品伊人久久| 久久久免费高清电视剧观看| 亚洲欧美日韩在线高清直播| 欧美亚洲国产视频| 国产一区红桃视频| 国产精品无码专区在线观看| 欧美影院在线播放| 久久久久久久久久久久久久久久久久av| 91性高湖久久久久久久久_久久99| 亚洲精品国产品国语在线| 久久精品成人动漫| 日韩成人在线免费观看| 成人性教育视频在线观看| 亚洲性夜色噜噜噜7777| 国产一区二区丝袜高跟鞋图片| 成人黄色av免费在线观看| 日韩精品在线播放| 日韩av在线网| 91视频免费网站| 自拍偷拍亚洲精品| 欧美日韩精品中文字幕| 久久九九国产精品怡红院| 91老司机精品视频| 成人中文字幕+乱码+中文字幕| 亚洲国产精品电影| 伊是香蕉大人久久| 精品福利视频导航| 国产精品白丝jk喷水视频一区| 亚洲精品丝袜日韩| 久久久久久999| 欧美日韩黄色大片| 久久久精品2019中文字幕神马| 久久久久国产精品免费网站| 国产主播喷水一区二区| 黄色一区二区在线| 日韩美女免费观看| 久久99久久亚洲国产| 最近2019中文字幕大全第二页| 91精品国产成人| 91在线观看免费高清| 欧美日韩视频在线| 91老司机精品视频| 欧美精品性视频| 色综合久久88| 亚洲人成网在线播放| 亚洲嫩模很污视频| 亚洲电影天堂av| 国产欧美中文字幕| 日韩电影中文字幕在线| 日韩av综合网| 韩国精品久久久999| 日韩中文字幕在线| 久久九九有精品国产23| 欧美极品少妇与黑人| 欧美俄罗斯性视频| 亚洲深夜福利在线| 国产欧美精品一区二区三区-老狼| 亚洲成人激情在线观看| 亚洲www永久成人夜色| 亚洲久久久久久久久久久| 26uuu日韩精品一区二区| 国产精品久久久久久久久久久久久久| 亚洲偷熟乱区亚洲香蕉av| 中文字幕日韩在线播放| 亚洲欧洲日产国产网站| 久久精品国产96久久久香蕉| 欧美成人精品h版在线观看| 高跟丝袜欧美一区| 欧美精品在线播放|