欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

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

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

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、德令哈網(wǎng)站維護(hù)、網(wǎng)站推廣。

引入依賴

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

需求

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

此時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

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

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

@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

總結(jié)

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

網(wǎng)站名稱:MapStruct實體轉(zhuǎn)換及List轉(zhuǎn)換的方法講解
標(biāo)題路徑:http://aaarwkj.com/article22/iijgjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、做網(wǎng)站網(wǎng)站策劃、企業(yè)建站域名注冊、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
日本韩国欧美成人精品| 免费在线成人av观看| 日本一区二区高清在线观看| 免费女同一区二区三区| 日韩新片免费专区在线| 日本老太老熟妇一级特黄| 精品久久人妻中文字幕免费 | 粗暴蹂躏中文一区二区三区| 国内精品人妻久久毛片| 日韩人妻有码中文字幕| 国产欧美亚洲精品一区二区| 夜夜爽精品国产亚洲av成人| 久久亚洲av麻衣北条麻妃| 男女搞j视频网站免费观看| 亚洲天堂网免费在线看| 天天操天天射夜夜爽| 亚洲欧美一区二区国产| 在线观看免费国产不卡| 日韩av手机在线不卡| 亚洲国产日韩欧美在线| 亚洲精品熟女一区二区三区| 人妻鲁丝一区二区三区| 亚洲精品国产第一区第二区| 公侵犯人妻中文字幕一区| 97门久欧美日韩久久| 日韩一卡一卡在线观看| 色偷拍亚洲偷自拍二区| 成人日韩av免费在线观看| 色六月婷婷六月久久六月| 欧美国产成人精品一区| 国产三级视频在线观看视频 | 国产一区二区精品久久岳 | 日本黄色免费在线观看网站| 亚洲精品乱码精品乱码不卡| 在线激情视频一区二区| 一区二区精品福利视频| 色悠悠色综合视频在线| 自拍偷拍亚洲精品第一页| 成人av高清在线观看| 亚洲精品小视频在线观看| 尤物欧美精品一区二区三区|