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

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

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

服務器之家 - 編程語言 - Java教程 - MapStruct處理Java中實體與模型間不匹配屬性轉換的方法

MapStruct處理Java中實體與模型間不匹配屬性轉換的方法

2021-07-22 15:35cj96248 Java教程

今天小編就為大家分享一篇關于MapStruct處理Java中實體與模型間不匹配屬性轉換的方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

摘要: 前面介紹了mapstrut簡單用法,mapstrut的最重要的特點就是處理java中實體與模型間不匹配屬性的轉換。

實體模型

有一個user對象:

?
1
2
3
4
5
6
7
public class user {
  private integer id;
  private string name;
  private double account;
  private boolean married;
// setters, getters, tostring()
}

有一個employee 對象:

?
1
2
3
4
5
6
7
public class employee {
  private int id;
  private string ename;
  private string position;
  private string married;
// setters, getters, tostring()
}

業務場景

  • 需要user 與employee 對象之間轉換。
  • user 的name屬性對應employee 的ename屬性,其取值相同,類型相同,名稱不同
  • user 的married屬性(取值true和false)對應employee 的married屬性(取值y和n),其取值不同,類型不同,名稱相同。

分析與實現

最愚蠢的方式是自己寫一堆的setter方法與getter方法,大量get/set代碼堆積,增加了代碼長度和閱讀代碼的難度。利用工具beanutils是可以處理第一個需求的,但第三種需求就無能為力了。這時mapstrut就派上用場了,最簡單的配置可以像下面這樣:

?
1
2
3
4
5
6
@mapper
public interface usermapper {
  usermapper instance = mappers.getmapper(usermapper.class);
  employee usertoemployee(user user);
  user employeetouser(employee employee);
}

對于第二個需求,可以通過下面方式實現,注解@mapping可以指定需要把哪個字段source轉換為哪個字段target

?
1
2
3
4
5
6
7
8
9
10
11
12
@mapper
public interface usermapper {
  usermapper instance = mappers.getmapper(usermapper.class);
  @mappings({
    @mapping(source="name", target="ename")
  })
  employee usertoemployee(user user);
  @mappings({
    @mapping(source="ename", target="name")
  })
  user employeetouser(employee employee);
}

第三個需求有點變態,但是真實發生在我們的項目中,實現起來確實繁瑣一些:

首先,自定義轉化邏輯,布爾值到字符串,布爾的true對應字符串的y,布爾的false對應字符串的n:

?
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 "y";
    }
    return "n";
  }
  public boolean strtoboolean(string str){
    if ("y".equals(str)) {
      return true;
    }
    return false;
  }
}

使用很簡單,在接口的注解mapper添加uses參數,值就是需要剛才的轉換邏輯類。

?
1
2
@mapper(uses = usertransform.class)
public interface usermapper {...}

結果與分析

用junit test寫兩個測試方法,分別測試user 對象轉換employee ,employee 對象轉換user。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class midtest {
  @test
  public void midtest(){
    user user = new user();
    user.setid(125);
    user.setname("lee");
    user.setmarried(true);
    employee e = usermapper.instance.usertoemployee(user);
    system.out.println(e);
  }
  @test
  public void midtest2(){
    employee e = new employee();
    e.setid(222);
    e.setename("chao");
    e.setmarried("n");
    user u = usermapper.instance.employeetouser(e);
    system.out.println(u);
  }
}

結果如下:

user [id=222, name=chao, account=0.0, married=false]
employee [id=125, ename=lee, position=null, married=y]

轉換結果符合預期,轉化期間不存在的屬性,有了默認值(account和position),包裝類也能識別(int和integer),從自動生成的usermapperimpl.java中,可以看到,

employee.setmarried( usertransform.booleantostring( user.ismarried() ) );,用到了剛才自定義的轉換邏輯。第三種需求是很少的,但是遇到了也是很難解決的,mapstruct的自定義函數確實方便不少,不過與其他的轉換工具相比,上手難度確實大,配置也稍顯繁瑣。

項目代碼托管在碼云。

總結

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

原文鏈接:https://blog.csdn.net/jiangchao858/article/details/77604469

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91精品国产日韩91久久久久久360 | 黄色电影免费网址 | 欧美受xxxx黑人xyx爽 | 中文字幕视频在线播放 | 91久久在线观看 | 欧美黄色片免费看 | 日本在线国产 | 成人午夜精品久久久久久久蜜臀 | 成人午夜小视频 | 国产精品99久久99久久久二 | 激情视频导航 | 九九热这里只有精品8 | 国产亚洲精品久久久久婷婷瑜伽 | 色骚综合 | 欧美日韩大片在线观看 | 水卜樱一区二区av | 午夜爽爽爽男女免费观看hd | 日韩美香港a一级毛片 | 国产亚洲综合一区二区 | 久久精品国产久精国产 | 性欧美极品xxxx欧美一区二区 | 久久久久久久久久网站 | 狠狠一区 | 国产精品1区2区在线观看 | 成人免费在线视频播放 | av大全在线免费观看 | 叶子楣成人爽a毛片免费啪啪 | 成人福利免费在线观看 | 国产成人在线观看网站 | 欧美亚洲免费 | 无码专区aaaaaa免费视频 | 亚洲第一激情网 | 免费午夜视频 | 亚洲午夜在线视频 | 黄色免费av网站 | 视频在线色 | 欧美色另类 | 91懂色 | 一级在线免费 | 欧美一级无毛 | av手机在线免费播放 |