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

简单模型
BenchmarkModeCntScoreErrorUnits
hutoolBeanCopythrpt51939.092 ±26.747ops/ms
springBeanCopythrpt53569.035 ±39.607ops/ms
cglibBeanCopythrpt59112.785 ±560.503ops/ms
micaBeanCopythrpt517753.409 ±393.245ops/ms
yangtu222BeanCopythrpt518201.997 ±119.189ops/ms
cglibMapperBeanCopythrpt537679.510 ±3544.624ops/ms
mapStructBeanCopythrpt550328.045 ±529.707ops/ms
selmaBeanCopythrpt5200859.561 ±2370.531ops/ms

附带类型转换(日期)
BenchmarkModeCntScoreErrorUnits
micaBeanCopythrpt51186.375 ±64.686ops/ms
mapStructBeanCopythrpt51623.478 ±13.894ops/ms
selmaBeanCopythrpt5160020.595 ±2570.747ops/ms

列表模型(100 item)
BenchmarkModeCntScoreErrorUnits
springBeanCopythrpt535.974 ±0.555ops/ms
micaBeanCopythrpt5169.066 ±5.460ops/ms

Map 拷贝到 bean
BenchmarkModeCntScoreErrorUnits
hutoolBeanCopythrpt51338.551 ±16.746ops/ms
micaBeanCopythrpt513577.056 ±27.795ops/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

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值