1. 程式人生 > >java~modelMapper需要註意的幾點

java~modelMapper需要註意的幾點

const sage mapper 後者 email code div mail clas

對於modelMapper來說,主要實現的是對象與對象的賦值,在這微服務裏的數據傳輸對象中用的比較多,DTO這個對象是從業務模型抽象出來的,滿足某一種業務,它與數據持久化模型沒有關系,而如果我們把數據表模型取出後,以DTO返回給使用端時,就需要一種賦值機制,這就是modelMapper需要做的事。

在目前開發過程中,由於使用了lombok插件,使得我們減少了很多重復的代碼,它以註解的形式體現在代碼上,即@getter表示對外公司讀方法,@setter對外公開寫方法,而後者在設計時一般不對外公開,為對象的賦值一般通過@Builder來實現,但這對於modelMapper是一件壞事 ,它必須要求你公開@setter註解,才可以為你賦值,這也是可以想像的,modelMapper的機制應該就是說取所有字段 ,然後使用自己的setter方法為它賦值。

註意地址

  1. 必須公開@setter註解
  2. 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; }

下面是使用方法,同時可以使用BeanUtils類的方法也可以實現。

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

感謝閱讀!

java~modelMapper需要註意的幾點