1、前言
mapstruct中常用注解如@Mapping,@AfterMapping,@BeanMapping等的使用,通过案例说明各式各样的业务pojo对象之间如何借助mapstruct完成相互之间的转换,减少代码量的同时也能突出业务逻辑流程,让你的代码里写起来更有规范可言。
2、简介
Reference Guide – MapStruct
3、使用场景
主要用于pojo之间的转换。
不同的convert方案:
4、mapstruct使用
4.1 不使用mapstruct的缺点
- 多与杂的代码与业务代码耦合,可读性差
- 重复的劳动
cardto业务对象:
partdto:
driverdto:
carvo:
drivervo:
partvo:
测试类:
4.2 mapstuct使用方法
- 引入依赖
- 新建抽象类或者接口并标注@mapper注解
- 写转换方法,方法名任意(eg. dto2vo)
- 获取对象并使用
4.2.1 引入依赖
4.2.2 新建抽象类或者接口并标注@mapper注解
4.2.3 car转化pojo案例
CarConvert抽象类:
测试类:
4.3 默认的映射规则
4.4 @Mappings和@Mapping
需求1:处理成保留2位小数
代码实现:通过@mapping实现
测试类:
需求2:publishDate处理格式
代码:
需求3 vo中的color不从dto中映射:设置ignore
需求4: 当属性是引用类型时,如何映射?如driverdto
代码:
结果:
4.5 Aftermapping和mappingtarget
通过mapstruct处理不了的或者不好处理的场景,我们自己自定义处理。
需求:处理vo中hasPart的值
抽象类增加方法:
结果:
4.5 批量转换
需求:list ---> list
冗余实现:
mapstruct实现:
测试类:
4.6 @BeanMapping
配置一个id测试:
4.7 @InheritConfiguration
继承配置,用于更新的场景。
测试类:
4.8 @InheritInverseConfiguration
反向继承配置。
写法1:
测试类:
改进写法1:(假如配置很多属性,一行一行写太麻烦)
4.9 与spring结合使用
直接调用会报错:
需要加入下面的配置:即可在测试类调用
@Mapper(componentModel="spring")