您的位置:首页 > 编程语言 > Java开发

Java Bean Copy 性能大比拼

2021-03-03 22:06 726 查看

简介

Bean 拷贝在工作中被大量使用,可以大幅度的减少工作量。本文对常用的 Bean copy 工具进行了压力测试,方便大家选择更加适合自己的工具。本篇文章是《mica cglib 增强——【01】cglib bean copy 介绍》续篇,该专栏会持续更新,感兴趣的朋友请关注我们。

bean 拷贝工具

•MapStruct (编译期生成 Mapper 实现)[1]•Selma (编译期生成 Mapper 实现)[2]•yangtu222 - BeanUtils (第一次生成 copy 实现字节码)[3]•mica (第一次生成 copy 实现字节码)[4]•hutool (反射)[5]

模型

无类型转换
































/**
* 来源用户
*
* @author L.cm
*/
@Data
public class FormUser {
   private Long id;
   private String nickName;
   private Integer age;
   private String phone;
   private String email;
   private String password;
   private Integer gender;
   private String avatar;
}

/**
* 转换的用户
*
* @author L.cm
*/
@Data
public class ToUser {
   private String nickName;
   private String phone;
   private String email;
   private Integer gender;
   private String avatar;
}

带类型转换






































/**
* 附带类型转换的 用户模型
*
* @author L.cm
*/
@Data
@Accessors(chain = true)
public class FormConvertUser {
   private Long id;
   private String nickName;
   private Integer age;
   private String phone;
   private String email;
   private String password;
   private Integer gend
8000
er;
   private String avatar;
   @DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
   private LocalDateTime birthday;
}

/**
* 附带类型转换的 用户模型
*
* @author L.cm
*/
@Data
@Accessors(chain = true)
public class ToConvertUser {
   private String nickName;
   private Integer age;
   private String phone;
   private String email;
   private String password;
   private Integer gender;
   private String avatar;
   private String birthday;
}

Bean copy 压测结果

环境

•OS: macOS Mojave•CPU: 2.8 GHz Intel Core i5•RAM: 8 GB 1600 MHz DDR3•JVM: Oracle 1.8.0_201 64 bits

简单模型

BenchmarkScoreErrorUnits
hutool1939.09226.747ops/ms
spring3569.03539.607ops/ms
cglib9112.785560.503ops/ms
mica17753.409393.245ops/ms
yangtu22218201.997119.189ops/ms
cglibMapper37679.5103544.624ops/ms
mapStruct50328.045529.707ops/ms
selma200859.5612370.531ops/ms

附带类型转换(日期)

BenchmarkScoreErrorUnits
mica1186.37564.686ops/ms
mapStruct1623.47813.894ops/ms
selma160020.5952570.747ops/ms

列表模型(100 item)

BenchmarkScoreErrorUnits
spring35.9740.555ops/ms
mica169.0665.460ops/ms

Map 拷贝到 bean

BenchmarkScoreErrorUnits
hutool1338.551 16.746ops/ms
mica13577.056 27.795ops/ms

结论

和 java-object-mapper-benchmark[6] 测试结果有些出入。

Selma 的表现反而比 MapStruct 更好,可能是模型不一样导致的。

功能比较

工具包需要编写Mapper支持Map支持List、Set类型转换性能
Selma需要手写转换超高
MapStruct支持常用类型和复杂表达式
BeanUtils(yangtu222)需要手写转换
mica基于 Spring 的类型转换
Spring不支持
hutool不支持


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: