MapStruct详解
提到属性拷贝,首先想到的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的基本操作基本上都涉及到了