Java Bean Copy 性能大比拼

简介

Bean 拷贝在工做中被大量使用,能够大幅度的减小工做量。本文对经常使用的 Bean copy 工具进行了压力测试,方便你们选择更加适合本身的工具。本篇文章是《mica cglib 加强——【01】cglib bean copy 介绍》续篇,该专栏会持续更新,感兴趣的朋友请关注咱们。java

bean 拷贝工具

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

模型

无类型转换
































/** * 来源用户 * * @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 MojaveCPU: 2.8 GHz Intel Core i5RAM: 8 GB 1600 MHz DDR3JVM: Oracle 1.8.0_201 64 bitsapp

简单模型

Benchmark Score Error Units
hutool 1939.092 26.747 ops/ms
spring 3569.035 39.607 ops/ms
cglib 9112.785 560.503 ops/ms
mica 17753.409 393.245 ops/ms
yangtu222 18201.997 119.189 ops/ms
cglibMapper 37679.510 3544.624 ops/ms
mapStruct 50328.045 529.707 ops/ms
selma 200859.561 2370.531 ops/ms

附带类型转换(日期)

Benchmark Score Error Units
mica 1186.375 64.686 ops/ms
mapStruct 1623.478 13.894 ops/ms
selma 160020.595 2570.747 ops/ms

列表模型(100 item)

Benchmark Score Error Units
spring 35.974 0.555 ops/ms
mica 169.066 5.460 ops/ms

Map 拷贝到 bean

Benchmark Score Error Units
hutool 1338.551  16.746 ops/ms
mica 13577.056  27.795 ops/ms

结论

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

Selma 的表现反而比 MapStruct 更好,多是模型不同致使的。工具

功能比较

工具包 须要编写Mapper 支持Map 支持List、Set 类型转换 性能
Selma 须要手写转换 超高
MapStruct 支持经常使用类型和复杂表达式
BeanUtils(yangtu222) 须要手写转换
mica 基于 Spring 的类型转换
Spring 不支持
hutool 不支持
相关文章
相关标签/搜索