上面短短几行代码就可以了十分简单!解释一下操作步骤:
首先声明一个映射接口用@org.mapstruct.Mapper
(不要跟mybatis注解混淆)标记,说明这是一个实体类型转换接口。这里我们声明了一个 CAR_MAPPING
来方便我们调用,CarDTO toCarDTO(Car car)
是不是很熟悉, 像mybatis
一样抽象出我们的转换方法。@org.mapstruct.Mapping
注解用来声明成员属性的映射。该注解有两个重要的属性:
source
代表转换的源。这里就是Car
。
target
代表转换的目标。这里是CarDTO
。
这里以成员变量的参数名为依据,如果有嵌套比如 Car
里面有个 CarType
类型的成员变量 carType
,其 type
属性 来映射 CarDTO
中的 type
字符串,我们使用 type.type
来获取属性值。如果有多层以此类推。MapStruct
最终调用的是 setter
和 getter
方法,而非反射。这也是其性能比较好的原因之一。numberOfSeats
映射到 seatCount
就比较好理解了。我们是不是忘记了一个属性 make
,因为他们的位置且名称完全一致,所以可以省略。而且对于包装类是自动拆箱封箱操作的,并且是线程安全的。MapStruct不单单有这些功能,还有其他一些复杂的功能:
设置转换默认值和常量。当目标值是 null
时我们可以设置其默认值,注意这些都是基本类型以及对应都 boxing
类型,如下