麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:43:40
字體:
來源:轉載
供稿:網(wǎng)友

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

實體模型

有一個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è)務場景

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

分析與實現(xiàn)

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

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

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

@Mapperpublic 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)起來確實繁瑣一些:

首先,自定義轉化邏輯,布爾值到字符串,布爾的true對應字符串的Y,布爾的false對應字符串的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ù),值就是需要剛才的轉換邏輯類。

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

結果與分析

用Junit Test寫兩個測試方法,分別測試User 對象轉換Employee ,Employee 對象轉換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);  }}

結果如下:

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的自定義函數(shù)確實方便不少,不過與其他的轉換工具相比,上手難度確實大,配置也稍顯繁瑣。

項目代碼托管在碼云。

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黑人一区二区三区四区五区 | 国产一区二区三区四区五区在线 | 爽妇网国产精品 | 羞羞答答视频 | 久久久久亚洲精品国产 | 黄色电影免费网址 | 免费国产精品视频 | 国产88久久久国产精品免费二区 | 亚洲成人在线视频网 | 91精品国产日韩91久久久久久360 | 精品国产成人 | 午夜精品福利视频 | 日本a在线观看 | 成人福利在线播放 | 成人激情综合网 | 主人在调教室性调教女仆游戏 | 亚洲欧美日韩久久精品第一区 | 一级电影在线观看 | 日本精品黄色 | 日本特级a一片免费观看 | 国产羞羞视频在线观看免费应用 | www.777含羞草| 中文字幕在线观看网址 | 91短视频在线观看视频 | 欧美日韩后 | 大西瓜永久免费av在线 | 少妇一级淫片免费放正片 | 在线视频 亚洲 | 日本精品视频一区二区三区四区 | 成人啪啪18免费网站 | 久久精品日韩 | 日韩视频在线不卡 | 日韩深夜视频 | 午夜爽爽爽男女免费观看hd | 国产成人综合在线观看 | 永久免费av在线 | 亚洲精品v天堂中文字幕 | 色中色激情影院 | 中国女警察一级毛片视频 | 美女污污视频在线观看 | 亚洲一区在线国产 |