激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - MapStruct實體轉換及List轉換的方法講解

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

2021-07-22 15:41雙斜杠少年 Java教程

今天小編就為大家分享一篇關于MapStruct實體轉換及List轉換的方法講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

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

引入依賴

?
1
2
3
4
5
<dependency>
  <groupid>org.mapstruct</groupid>
  <artifactid>mapstruct-jdk8</artifactid>
  <version>1.1.0.final</version>
</dependency>

需求

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

此時student 類內容如下:

?
1
2
3
4
5
6
7
public class student {
  private integer id;
  private string name;
  private integer age;
  private string sex;
  //setters, getters, tostring() 方法此處省略不寫,但是實際開發需要寫的哦
  }

此時user 類內容如下:

?
1
2
3
4
5
6
7
public class user {
  private integer id;
  private string name;
  private integer age;
  private string sex;
  //setters, getters, tostring() 方法此處省略不寫,但是實際開發需要寫的哦
 }

轉換model

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

?
1
2
3
4
5
6
7
8
9
10
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 類內容如下:

?
1
2
3
4
5
6
7
public class student {
  private integer id;
  private string sname;
  private integer age;
  private string sex;
  //setters, getters, tostring() 方法此處省略不寫,但是實際開發需要寫的哦
  }

此時user 類內容如下:

?
1
2
3
4
5
6
7
public class user {
  private integer id;
  private string uname;
  private integer age;
  private string sex;
  //setters, getters, tostring() 方法此處省略不寫,但是實際開發需要寫的哦
 }

那么轉換接口為

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 類內容如下:

?
1
2
3
4
5
6
7
public class user {
  private integer id;
  private string uname;
  private integer age;
  private boolean sex;
  //setters, getters, tostring() 方法此處省略不寫,但是實際開發需要寫的哦
 }

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 類)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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的轉換也會繼承這和屬性的映射。

例如 屬性名相同

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);

屬性名不同:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 后自動生成)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@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://www.zmynmublwnt.cn/article/178072.html

總結

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

原文鏈接:https://blog.csdn.net/u012373815/article/details/88367456

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 麻豆蜜桃在线观看 | 成人国产精品久久久 | 久久久综 | 精品久久久久久亚洲精品 | 91成人午夜性a一级毛片 | 中文字幕在线视频日本 | 亚洲人成中文字幕在线观看 | 日日爱影院 | 日本在线不卡一区二区 | 天天操综 | 在线亚州 | 国产色爱综合网 | 欧美精品一级 | 欧美综合成人 | 高清视频91 | 国产亚洲精品久久久久婷婷瑜伽 | 欧美视频一级 | 欧美一级黄色免费 | 国产精品久久久久国产精品三级 | chinese hd xxxx tube | 国产精品片www48888 | 欧美人与物videos另类 | 国产日产精品一区四区介绍 | 中文字幕在线永久 | 黄色特级一级片 | 成人在线观看免费观看 | 国产亚洲在线 | 男女隐私免费视频 | 国产羞羞视频在线观看 | 久久91亚洲人成电影网站 | 国产三级精品最新在线 | 国产高清成人久久 | 午夜国产在线 | 91女上位 在线播放 性欧美日本 | 天天操天天看 | 日本成年网 | 九九热九九热 | 精品一区在线视频 | 在线观看国产免费视频 | 黄污在线看 | 毛片网站视频 |