java~modelMapper需要注意的幾點
對于modelMapper來說(shuo),主(zhu)要(yao)實(shi)現的是(shi)對象與對象的賦值(zhi),在這微(wei)服務(wu)里的數(shu)據傳輸(shu)對象中用的比較多(duo),DTO這個(ge)對象是(shi)從業務(wu)模(mo)型抽象出(chu)來的,滿足(zu)某一種(zhong)業務(wu),它與數(shu)據持久化模(mo)型沒有(you)關系(xi),而(er)如(ru)果我們(men)把數(shu)據表模(mo)型取出(chu)后,以(yi)DTO返回給使用端時,就需(xu)要(yao)一種(zhong)賦值(zhi)機制,這就是(shi)modelMapper需(xu)要(yao)做的事。
在目前開(kai)發過程中,由于使(shi)用了lombok插(cha)件(jian),使(shi)得(de)我們減少了很(hen)多重復的(de)代碼,它(ta)(ta)以(yi)(yi)注解的(de)形式體(ti)現在代碼上,即@getter表示對外(wai)(wai)公(gong)司讀(du)方法,@setter對外(wai)(wai)公(gong)開(kai)寫(xie)方法,而后者在設計(ji)時一般(ban)(ban)不(bu)對外(wai)(wai)公(gong)開(kai),為對象的(de)賦(fu)值(zhi)一般(ban)(ban)通過@Builder來實現,但這對于modelMapper是(shi)(shi)一件(jian)壞事 ,它(ta)(ta)必須要求你公(gong)開(kai)@setter注解,才可(ke)以(yi)(yi)為你賦(fu)值(zhi),這也是(shi)(shi)可(ke)以(yi)(yi)想像(xiang)的(de),modelMapper的(de)機制(zhi)應該(gai)就(jiu)是(shi)(shi)說(shuo)取所有字段 ,然后使(shi)用自己的(de)setter方法為它(ta)(ta)賦(fu)值(zhi)。
注意地址:
- 必須公開@setter注解
- DTO對象不能繼承原來的模型,應該新建一個單純的實體,因為注解是可以從父類集成下來的
@Builder(toBuilder = true) @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class UserDto { private String name; }
下面是數據模型
@Builder(toBuilder = true) @Getter @NoArgsConstructor @AllArgsConstructor public class UserInfo { private String name; private String email; @MinMoney(message = "金額不能小于0.") @MaxMoney(value = 10, message = "金額不能大于10.") private Money price; }
下面(mian)是使用(yong)方法(fa),同時可以(yi)使用(yong)BeanUtils類的(de)方法(fa)也(ye)可以(yi)實現(xian)。
modelMapper方法
ModelMapper modelMapper = new ModelMapper(); userDto = modelMapper.map(userinfo, UserDto.class);
BeanUtils方法
UserInfo userinfo= UserInfo.builder().name("zzl").build();
UserDto userDto=new UserDto();
BeanUtils.copyProperties(userinfo,userDto);
感謝閱讀!