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

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

 更新時間:2019年03月13日 11:51:24   作者:cj96248  
今天小編就為大家分享一篇關(guān)于MapStruct處理Java中實體與模型間不匹配屬性轉(zhuǎn)換的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

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

實體模型

有一個User對象:

public class User {
  private Integer id;
  private String name;
  private double account;
  private boolean married;
// setters, getters, toString()
}

有一個Employee 對象:

public class Employee {
  private int id;
  private String ename;
  private String position;
  private String married;
// setters, getters, toString()
}

業(yè)務(wù)場景

  • 需要User 與Employee 對象之間轉(zhuǎn)換。
  • User 的name屬性對應(yīng)Employee 的ename屬性,其取值相同,類型相同,名稱不同
  • User 的married屬性(取值true和false)對應(yīng)Employee 的married屬性(取值Y和N),其取值不同,類型不同,名稱相同。

分析與實現(xiàn)

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

@Mapper
public interface UserMapper {
  UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
  Employee userToEmployee(User user);
  User employeeToUser(Employee employee);
}

對于第二個需求,可以通過下面方式實現(xiàn),注解@Mapping可以指定需要把哪個字段source轉(zhuǎn)換為哪個字段target。

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

第三個需求有點變態(tài),但是真實發(fā)生在我們的項目中,實現(xiàn)起來確實繁瑣一些:

首先,自定義轉(zhuǎn)化邏輯,布爾值到字符串,布爾的true對應(yīng)字符串的Y,布爾的false對應(yīng)字符串的N:

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參數(shù),值就是需要剛才的轉(zhuǎn)換邏輯類。

@Mapper(uses = UserTransform.class)
public interface UserMapper {...}

結(jié)果與分析

用Junit Test寫兩個測試方法,分別測試User 對象轉(zhuǎn)換Employee ,Employee 對象轉(zhuǎn)換User。

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

結(jié)果如下:

User [id=222, name=Chao, account=0.0, married=false]
Employee [id=125, ename=Lee, position=null, married=Y]

轉(zhuǎn)換結(jié)果符合預(yù)期,轉(zhuǎn)化期間不存在的屬性,有了默認(rèn)值(account和position),包裝類也能識別(int和Integer),從自動生成的UserMapperImpl.java中,可以看到,

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

項目代碼托管在碼云。

總結(jié)

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

相關(guān)文章

  • Java實現(xiàn)簡易畫圖板

    Java實現(xiàn)簡易畫圖板

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡易畫圖板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • SpringCloud Open feign 使用okhttp 優(yōu)化詳解

    SpringCloud Open feign 使用okhttp 優(yōu)化詳解

    這篇文章主要介紹了SpringCloud Open feign 使用okhttp 優(yōu)化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 實例詳解SpringMVC入門使用

    實例詳解SpringMVC入門使用

    大家好,本篇文章主要講的是實例詳解SpringMVC入門使用,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Java基于棧方式解決漢諾塔問題實例【遞歸與非遞歸算法】

    Java基于棧方式解決漢諾塔問題實例【遞歸與非遞歸算法】

    這篇文章主要介紹了Java基于棧方式解決漢諾塔問題的方法,結(jié)合實例形式分析了java棧方式采用遞歸與非遞歸算法解決漢諾塔問題的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Java項目如何防止SQL注入(多種方案匯總)

    Java項目如何防止SQL注入(多種方案匯總)

    SQL注入即是指web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒有判斷或過濾不嚴(yán),攻擊者可以在web應(yīng)用程序中事先定義好的查詢語句的結(jié)尾上添加額外的SQL語句,這篇文章主要介紹了?Java項目防止SQL注入的四種方案,需要的朋友可以參考下
    2023-12-12
  • Java OpenCV圖像處理之圖形與文字繪制

    Java OpenCV圖像處理之圖形與文字繪制

    這篇文章主要為大家介紹了如何利益Java OpenCV實現(xiàn)在圖像上繪制文字與形狀,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-02-02
  • 淺談Spring Context加載方式

    淺談Spring Context加載方式

    這篇文章主要介紹了淺談Spring Context加載方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • java中@ModelAttribute注解的作用

    java中@ModelAttribute注解的作用

    本文主要介紹了java中@ModelAttribute注解的作用。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例

    使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例

    這篇文章主要介紹了使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Java  HttpURLConnection超時和IO異常處理

    Java HttpURLConnection超時和IO異常處理

    這篇文章主要介紹了Java HttpURLConnection超時和IO異常處理的相關(guān)資料,需要的朋友可以參考下
    2016-09-09

最新評論

通州区| 黔西| 北碚区| 洮南市| 普安县| 门头沟区| 郸城县| 富平县| 文安县| 岑溪市| 朔州市| 兴海县| 鲁甸县| 湖北省| 呼伦贝尔市| 来宾市| 盘山县| 达尔| 竹山县| 清流县| 林西县| 随州市| 皮山县| 正定县| 通榆县| 阿巴嘎旗| 汕头市| 西城区| 万全县| 洪江市| 望城县| 佳木斯市| 贡觉县| 潜江市| 嘉善县| 镇赉县| 阜城县| 桃源县| 齐齐哈尔市| 土默特右旗| 玉环县|