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