最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

開發(fā)中,我們經(jīng)常需要將PO轉(zhuǎn)DTO、DTO轉(zhuǎn)PO等一些實(shí)體間的轉(zhuǎn)換。比較出名的有BeanUtil 和ModelMapper等,它們使用簡(jiǎn)單,但是在稍顯復(fù)雜的業(yè)務(wù)場(chǎng)景下力不從心。MapStruct這個(gè)插件可以用來處理domin實(shí)體類與model類的屬性映射,可配置性強(qiáng)。只需要定義一個(gè) Mapper 接口,MapStruct 就會(huì)自動(dòng)實(shí)現(xiàn)這個(gè)映射接口,避免了復(fù)雜繁瑣的映射實(shí)現(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è)有學(xué)生student 類 需要轉(zhuǎn)換成 用戶 user 類,將學(xué)生信息存入用戶信息庫

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

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

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

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

轉(zhuǎn)換model

此時(shí) 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);
}

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

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

如果 User 和 Student 的屬性名不對(duì)應(yīng)例如:

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

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

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

public class User {
  private Integer id;
  private String uname;
  private Integer age;
  private String sex;
  //setters, getters, toString() 方法此處省略不寫,但是實(shí)際開發(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")
     // 多個(gè)屬性不對(duì)應(yīng)可以用 "," 隔開編寫多個(gè)@Mapping
     // ,@Mapping(target = "uname", source = "sname")
  })
   User studentToUser(Student student);
}

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

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

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

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

這個(gè)轉(zhuǎn)換需求有點(diǎn)變態(tài),所以 需要我門自己寫個(gè)轉(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")
     // 多個(gè)屬性不對(duì)應(yīng)可以用 "," 隔開編寫多個(gè)@Mapping
     // ,@Mapping(target = "uname", source = "sname")
  })
   User studentToUser(Student student);
}

轉(zhuǎn)換list

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

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

例如 屬性名相同

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")
     // 多個(gè)屬性不對(duì)應(yīng)可以用 "," 隔開編寫多個(gè)@Mapping
     // ,@Mapping(target = "uname", source = "sname")
  })
   User studentToUser(Student student);
  /**
   * 此時(shí) studentsToUsers 的實(shí)現(xiàn)為循環(huán)調(diào)用 studentToUser 并繼承了 studentToUser 的屬性映射
   * Students 轉(zhuǎn)化為 Users
   * @param Students
   * @return
   */
   List<User> studentsToUsers(List<Student> students);
}

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

@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://m.fzitv.net/article/157763.htm

總結(jié)

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

相關(guān)文章

  • idea2019導(dǎo)入maven項(xiàng)目中的某些問題及解決方法

    idea2019導(dǎo)入maven項(xiàng)目中的某些問題及解決方法

    這篇文章主要介紹了idea2019導(dǎo)入maven項(xiàng)目中的某些問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot多數(shù)據(jù)源配置的全過程記錄

    SpringBoot多數(shù)據(jù)源配置的全過程記錄

    在用SpringBoot開發(fā)項(xiàng)目時(shí),隨著業(yè)務(wù)量的擴(kuò)大,我們通常會(huì)進(jìn)行數(shù)據(jù)庫拆分或是引入其他數(shù)據(jù)庫,從而我們需要配置多個(gè)數(shù)據(jù)源,下面這篇文章主要給大家介紹了關(guān)于SpringBoot多數(shù)據(jù)源配置的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • SpringBoot整合JWT框架,解決Token跨域驗(yàn)證問題

    SpringBoot整合JWT框架,解決Token跨域驗(yàn)證問題

    Json web token (JWT), 是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)((RFC 7519).定義了一種簡(jiǎn)潔的,自包含的方法用于通信雙方之間以JSON對(duì)象的形式安全的傳遞信息。
    2021-06-06
  • java中循環(huán)遍歷刪除List和Set集合中元素的方法(推薦)

    java中循環(huán)遍歷刪除List和Set集合中元素的方法(推薦)

    下面小編就為大家?guī)硪黄猨ava中循環(huán)遍歷刪除List和Set集合中元素的方法(推薦)。小編覺得挺不錯(cuò)的,在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類操作

    java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類操作

    這篇文章主要介紹了java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java中synchronized鎖升級(jí)的過程

    Java中synchronized鎖升級(jí)的過程

    本文主要介紹了Java中synchronized鎖升級(jí)的過程,synchronized相對(duì)于早期的synchronized做出了優(yōu)化,從以前的加鎖就是重量級(jí)鎖優(yōu)化成了有一個(gè)鎖升級(jí)的過,下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-05-05
  • Java使用泛型Class實(shí)現(xiàn)消除模板代碼

    Java使用泛型Class實(shí)現(xiàn)消除模板代碼

    Class作為實(shí)現(xiàn)反射功能的類,在開發(fā)中經(jīng)常會(huì)用到,然而,當(dāng)Class遇上泛型后,事情就變得不是那么簡(jiǎn)單了,所以本文就來講講Java如何使用泛型Class實(shí)現(xiàn)消除模板代碼,需要的可以參考一下
    2023-06-06
  • 解決springboot環(huán)境切換失效的問題

    解決springboot環(huán)境切換失效的問題

    這篇文章主要介紹了解決springboot環(huán)境切換失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在

    mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在

    這篇文章主要介紹了mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在,具有很好的參考價(jià)值,希望對(duì)的有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java?Servlet實(shí)現(xiàn)表白墻的代碼實(shí)例

    Java?Servlet實(shí)現(xiàn)表白墻的代碼實(shí)例

    最近用Servlet做了個(gè)小項(xiàng)目,分享給大家,下面這篇文章主要給大家介紹了關(guān)于Java?Servlet實(shí)現(xiàn)表白墻的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02

最新評(píng)論

克什克腾旗| 锡林浩特市| 沙湾县| 牙克石市| 措美县| 洞头县| 九寨沟县| 鸡西市| 兴宁市| 句容市| 香港| 东兰县| 青阳县| 扶沟县| 中宁县| 乌拉特前旗| 沾化县| 罗城| 龙山县| 昭苏县| 普陀区| 伊春市| 乌拉特前旗| 松江区| 淳安县| 临西县| 清新县| 巴青县| 重庆市| 隆德县| 望城县| 布尔津县| 闻喜县| 镇原县| 竹北市| 新津县| 修水县| 北辰区| 遂溪县| 南昌县| 且末县|