1. 程式人生 > 其它 >mapstruct轉化成員變數,拷貝物件欄位資料,以及複製後為null問題

mapstruct轉化成員變數,拷貝物件欄位資料,以及複製後為null問題

技術標籤:javaspring

Java拷貝物件變數到新物件

BeanUtils.copyProperties(people,personVO);

這是之前一直再用,現推薦使用mapstruct包

import org.mapstruct.Mapper;

@Mapper(
    componentModel = "spring"
)
public interface PersonConvert {
    List<personVO> convertList(List<Person> peoples);
}

但是會有一種情況,拷貝失敗的問題,得到的物件為null,這時候需要在介面方法上添加註解,隨機寫入某個欄位的對映關係即可

@Mappings({
    @Mapping(source = "rightName", target = "rightName", ignore = true),
})
 List<personVO> convertList(List<Person> peoples);

所屬的是mapstruct包,沒有繼承關係,在介面上添加註釋@Mapper(componentModel = “spring”),在專案啟動時會生成對應的Impl檔案

在這裡插入圖片描述
這是自動生成的實現類程式碼:

@Component
public class PersonConvertImpl
implements PersonConvert { public PersonConvertImpl() { } public List<personVO> convertList(List<Person> peoples) { if (peoples == null) { return null; } else { List<personVO> list = new ArrayList(peoples.size()); Iterator var3 =
peoples.iterator(); while(var3.hasNext()) { Person person = (Person)var3.next(); list.add(this.personTopersonVO(person)); } return list; } } protected personVO personTopersonVO(Person person) { if (person == null) { return null; } else { personVO personVO = new personVO(); personVO.setName(person.getName()); personVO.setIdCard(person.getIdCard()); personVO.setGender(person.getGender()); personVO.setNation(person.getNation()); personVO.setMobile(person.getMobile()); personVO.setAddress(person.getAddress()); return personVO; } } }