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 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 测试结果有些出入。

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

功能比较

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

链接

本项目源码:github.com/lets-mica/m…

开源推荐

关注我们

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

转载于:https://juejin.im/post/5c9d5cd1e51d455788281089

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101016.html原文链接:https://javaforall.net

(0)
上一篇 2021年7月3日 下午6:00
下一篇 2021年7月3日 下午7:00


相关推荐

  • SNMP协议测试_nmap测试udp端口

    SNMP协议测试_nmap测试udp端口SNMP测试上文介绍了net_snmp的移植,移植完成之后需要测试,现在就介绍一下如何进行snmp的功能测试,还是在基于高通9607芯片开发的ME3630模块上进行测试,这里需要用到一个工具就是mibbrowser可以在其官网上下载http://ireasoning.com/mibbrowser.shtml是付费软件,我们可以下载个人版,但是个人版好像不支持v3版本的snmp,企业版是全部支持的但是只有30天的使用期限,这个项目里我只是做功能测试,30天足够了,就下载了企业版,对各个版本的SNMP都

    2022年10月16日
    5
  • Olympian Math Problem

    Olympian Math Problem

    2021年9月28日
    55
  • Makefile中.SUFFIXES的含义

    Makefile中.SUFFIXES的含义Makefile 中 SUFFIXES

    2026年3月16日
    3
  • DynamoDB实现原理分析

    DynamoDB实现原理分析DynamoDB 是 Amazon 的一个高可用的键 值存储系统 用以提供一个 永远在线 可用存储 为了达到这个级别的可用性 DynamoDB 在某些故障场景中将牺牲一致性 它大量使用对象版本和应用程序协助的冲突协调方式以提供一个开发人员可以使用的新颖的接口 在一个分布式的存储系统中 除了数据持久化组件 系统还需要有以下的考虑 负载均衡成员 membership 和故障检测故障恢复副本同步过载处理状态转移

    2026年3月17日
    2
  • C++代码算法题:(5).最长回文子串

    C++代码算法题:(5).最长回文子串题目及要求:给你一个字符串s,找到s中最长的回文子串。提示:1<=s.length<=1000s仅由数字和英文字母(大写和/或小写)组成原创代码:classSolution{public:stringlongestPalindrome(strings){intbegin=0;//每个当前子串的开头intend=0;//每个当前子串的末尾intvalue=0;//判断条件使用。条

    2022年6月10日
    32
  • java integer最小值_db2integer最大值

    java integer最小值_db2integer最大值来自:https://blog.csdn.net/qq_33611068/article/details/77369050有这样一道题:编程测试,遍历0到int所能表示最大的正数,将消耗的时间打印。下面是我的代码:1inttemp=0;2Datedt1=newDate();3longbegintime=dt1.getTime();4for(inti=0;i<=…

    2025年10月8日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号