Java Bean Copy 性能大比拼
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java Bean Copy 性能大比拼,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2679字,纯文字阅读大概需要4分钟。
内容图文
![Java Bean Copy 性能大比拼](/upload/InfoBanner/zyjiaocheng/601/38565a470c74493db520c6a7352860ad.jpg)
简介
Bean 拷贝在工作中被大量使用,可以大幅度的减少工作量。本文对常用的 Bean copy 工具进行了压力测试,方便大家选择更加适合自己的工具。本篇文章是《mica cglib 增强——【01】cglib bean copy 介绍》续篇,该专栏会持续更新,感兴趣的朋友请关注我们。
bean 拷贝工具
?MapStruct (编译期生成 Mapper 实现)[1]?Selma (编译期生成 Mapper 实现)[2]?yangtu222 - BeanUtils (第一次生成 copy 实现字节码)[3]?mica (第一次生成 copy 实现字节码)[4]?hutool (反射)[5]
模型
无类型转换
/**
* 来源用户
*
* @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[6] 测试结果有些出入。
Selma 的表现反而比 MapStruct 更好,可能是模型不一样导致的。
功能比较
工具包 | 需要编写Mapper | 支持Map | 支持List、Set | 类型转换 | 性能 |
Selma | 是 | 否 | 否 | 需要手写转换 | 超高 |
MapStruct | 是 | 否 | 否 | 支持常用类型和复杂表达式 | 高 |
BeanUtils(yangtu222) | 否 | 否 | 是 | 需要手写转换 | 高 |
mica | 否 | 是 | 是 | 基于 Spring 的类型转换 | 高 |
Spring | 否 | 否 | 否 | 不支持 | 中 |
hutool | 否 | 是 | 否 | 不支持 | 中 |
内容总结
以上是互联网集市为您收集整理的Java Bean Copy 性能大比拼全部内容,希望文章能够帮你解决Java Bean Copy 性能大比拼所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。