提到屬性拷貝,首先想到的BeanUtils。
先簡單的回憶下BeanUtils,處理Java Bean之間的屬性拷貝;不過由于它是通過反射來拷貝屬性,在數據量大一些的時候性能會降低;
且在安全方面也會比較弱;
MapStruct是編譯期動態生成getter/setter,在運行期直接調用框架編譯好的class類實現實體映射。因此安全性高,編譯通過之后,運行期間就不會報錯。其次速度快,運行期間直接調用實現類,不會在運行期間使用發射進行轉換。
MapStruct的使用
1.引入maven的依賴
<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>1.5.3.Final</version></dependency>
創建一個interface接口,定義兩個屬性進行處理的方法。
@Mapper
public interface StudentMapper {StudentDto toDto(Student student);
}
在代碼中,注入StudentMapper,即可引用該方法進行轉換。
當然,如果Dto和實體之間的名稱不一樣,可以通過指向固定的字段映射即可
@Mapping(source ="userName",target="name"
source:指定源對象中的字段名,該字段的值將被映射到目標對象的字段中。
target:指定目標對象中的字段名,該字段將接收源對象字段的值。
當然,如果需要忽略屬性,注入ignore = true即可實現;
以上,MapStruct的基本操作基本上都涉及到了