Java Bean Copy 性能大比拼

Java Bean Copy 性能大比拼

简介

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

bean 拷贝工具

模型

无类型转换

/**
 * 来源用户
 *
 * @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 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

简单模型

Benchmark Mode Cnt Score Error Units
hutoolBeanCopy thrpt 5 1939.092 ± 26.747 ops/ms
springBeanCopy thrpt 5 3569.035 ± 39.607 ops/ms
cglibBeanCopy thrpt 5 9112.785 ± 560.503 ops/ms
micaBeanCopy thrpt 5 17753.409 ± 393.245 ops/ms
yangtu222BeanCopy thrpt 5 18201.997 ± 119.189 ops/ms
cglibMapperBeanCopy thrpt 5 37679.510 ± 3544.624 ops/ms
mapStructBeanCopy thrpt 5 50328.045 ± 529.707 ops/ms
selmaBeanCopy thrpt 5 200859.561 ± 2370.531 ops/ms

附带类型转换(日期)

Benchmark Mode Cnt Score Error Units
micaBeanCopy thrpt 5 1186.375 ± 64.686 ops/ms
mapStructBeanCopy thrpt 5 1623.478 ± 13.894 ops/ms
selmaBeanCopy thrpt 5 160020.595 ± 2570.747 ops/ms

列表模型(100 item)

Benchmark Mode Cnt Score Error Units
springBeanCopy thrpt 5 35.974 ± 0.555 ops/ms
micaBeanCopy thrpt 5 169.066 ± 5.460 ops/ms

Map 拷贝到 bean

Benchmark Mode Cnt Score Error Units
hutoolBeanCopy thrpt 5 1338.551 ± 16.746 ops/ms
micaBeanCopy thrpt 5 13577.056 ± 27.795 ops/ms

结论

java-object-mapper-benchmark 测试结果有些出入。

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

功能比较

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

链接

本项目源码:https://github.com/lets-mica/mica-jmh

开源推荐

关注我们

如梦技术-公众号.jpg

扫描上面二维码,更多精彩内容每天推荐!

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/695747

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。