标签归档:mapping

MapStruct 代替BeanUtil 和ModelMapper

一、Object mapping 的技术分类:

  1. 运行期 反射调用set/get 或者是直接对成员变量赋值 。 该方式通过invoke执行赋值,实现时一般会采用beanutil, Javassist等开源库。这类的代表:Dozer,ModelMaper
  2. 编译期 动态生成set/get代码的class文件 ,在运行时直接调用该class文件。该方式实际上扔会存在set/get代码,只是不需要自己写了。 这类的代表:MapStruct,Selma,Orika ### 主要框架性能对比: 每秒钟执行的object mapping越多越好。 

明显可以看出通过在运行期进行反射的方式执行,性能远不如编译器生成class的方式;

MapStruct 与 Selma的对比:https://java.libhunt.com/project/mapstruct/vs/selma

MapStruct 与 ModelMapper的对比:https://java.libhunt.com/project/mapstruct/vs/modelmapper

综合比较性能、问题排查、文档、成熟度、扩展性等因素来考虑,MapStruct 是一个不错的选择;

继续阅读

Advertisements

Object Mapping in Java

我们在Java代码编写中经常会遇到DO 、DTO之间的对象隐射转换,我们在设计DO、DTO的时候一般会尽量让对象名称、对象属性保持一致,利于属性拷贝,但是现实场景中可能存在一些对象名称不一致、对象类型不一致的情况,不同的拷贝方案,性能与使用场景也可能存在不一样,那么在众多的对象拷贝框架中如何选择合适的使用呢?

常用对象属性拷贝方法:

  1. commons-beanutils 框架中的 BeanUtils
  2. commons-beanutils 框架中的 PropertyUtils
  3. ModelMapper
  4. Cglib中提供的BeanCopier, BulkBean,BeanMap,FastClass/FastMethod
  5. Orika
  6. Dozer
  7. HardCopy,手工硬编码
有人做了一张性能对比图:
object-mapping-per-hightchart-one

继续阅读