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
简单模型
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.55116.746ops/ms
mica13577.05627.795ops/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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值