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 不支持
相關文章
相關標籤/搜索