MapStruct 工具的属性映射优先级

Mapping映射的优先顺序(orders)

  1. 如果源属性和目标属性的数据类型一致,则会直接拷贝,如果源属性的类型是一个集合类型,例如list,那么将会拷贝源数据集合到目标属性中。
  2. 如果源属性和目标属性的数据类型不同,就会去检查是否有一个映射方法,该映射方法的输入类型和返回类型和我们的源目标和目标数据类型相匹配,如果这个方法存在的话,就会去调用这个映射方法。
  3. 如果不存在这样的映射方法,则会去检测是否满足内置转换的逻辑。例如 Enum 到 String 等。
  4. 如果还找不到匹配的映射方法,则工具会应用更加复杂的转换逻辑逻辑来查找
    1. 是否存在连续两次应用数据映射方法来得到源属性和目标属性的映射方法
    2. 先 应用属性映射方法再使用内置转换( built-in-conversion)
    3. 或先内置转换 再应用属性映射方法
  5. 如果没有映射方法,则工具绘制尝试去自动生成一个部分映射的方法来满足属性类型之间的转换。
  6. 如果无法创建基于 name 的映射方法,那么 MapStruct 将会在构建的时候抛出异常。并且指示该属性是不可映射的。

还可以通过 MappingControl 来控制各个层次(包括工具层面,Mapper 层面,方法层面,属性层面等)的映射逻辑,如@MapperConfig, @Mapper, @BeanMapping, @Mapping

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值