编程语言
首页 > 编程语言> > Java Bean Copy 性能大比拼

Java Bean Copy 性能大比拼

作者:互联网

简介

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 */@Datapublic 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 */@Datapublic 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 gender;    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不支持


标签:类型转换,copy,String,gender,private,Bean,Integer,Copy,大比拼
来源: https://blog.51cto.com/15016434/2646082