对象映射是什么
将一个对象转换成另一个,比如User-> UserDto。
对象映射的场景
- 编程分层思想里的po->dto->vo等,每一层展示的信息可能不一样,映射(mapping)。
- 将类型的code值转成对应的中文(converter)。
- …
对象映射的方式方法
方式 | 原理 | 性能排名 | 实测性能排名 | 版本 | 备注 |
---|---|---|---|---|---|
ide插件:GenerateAllSetter/或者人工设置setter方法 | |||||
Spring BeanUtils | 基于Spring的反射工具类 | 3 | 4 | 5.3.22 | |
Apache BeanUtils | 基于反射 | 6 | 5 | 1.9.4 | |
CGLib BeanCopier | 基于ASM(字节码操控框架)的MethodVisitor为field赋值 | 4 | 1 | 5.3.22 | |
Dozer | 反射,基于Filed.set(obj,obj)为field赋值 | 5 | 6 | 5.5.1 | 停更 |
Orika | 基于javassist生成对象映射字节码,并加载生产字节码文件 | 2 | 3 | 1.5.4 | 可以实现从一个对象递归拷贝数据至另一个对象. 1. 大概是Dozer的8-10 倍. 2. 大概是Dozer内存消耗的一半多点。 |
MapStruct | 基于JSR269,在编译期生产对象映射代码 | 1 | 2 | 1.5.2 | |
modelMapper | 反射 | 7 | 3.1.0 |
推荐框架mapstruct
参考
https://www.cnblogs.com/franson-2016/p/16277859.html
https://www.codingdict.com/questions/2201
http://t.zoukankan.com/fuzongle-p-12609063.html