一、MapStruct是什么
MapStruct是一款对象转换工具,主要是用于实体对象 VO、DTO之间的转换,同样BeanUtils也是这个作用。
二、原理
1.BeanUtils原理:反射,是在运行阶段,至于反射为什么慢,后续我了解再补充;TODO
2.MapStruct原理:在编译阶段生产get、set方法,就跟我们自己写get、set一样,基本不消耗性能;
三、性能对比
前提说明:
个人电脑:win10系统、i5、16G RAM;
未多次求和取平均值,仅想知道大概的数量级差异;
copy的对象包含51个字段;
工具 | 10次 | 1000次 | 1W次 | 10W次 |
mapstruct(版本:1.5.1Final) | 2ms | 5ms | 7ms | 31ms |
hutools的BeanUtil.copyProperties (版本:5.7.19) | 61ms | 809ms | 6802ms | 86110ms |
hutools的BeanUtil.copyToList() | 125082ms | |||
spring的BeanUtils(版本:5.2.15RELEASE) | 5ms | 42ms | 235ms | 1934ms |
apache的BeanUtils(版本1.9.4) | 39ms | 209ms | 1602ms | 16174ms |
四、结论
优先推荐使用MapStruct,其次是org.springframework.beans中的 BeanUtils;