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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常用电容分类_电容电阻

    常用电容分类_电容电阻一、瓷介电容器(CC)1.结构用陶瓷材料作介质,在陶瓷表面涂覆一层金属(银)薄膜,再经高温烧结后作为电极而成。瓷介电容器又分1类电介质(NPO、CCG));2类电介质(X7R、2X1)和3类电介质(Y5V、2F4)瓷介电容器。2.特点1类瓷介电容器具有温度系数小、稳定性高、损耗低、耐压高等优点。最大容量不超过1000pF,常用的有CC1、…

    2022年8月22日
    6
  • ModelMap的用法

    ModelMap的用法ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:addAttribute(Stringkey,Objectvalue);在页面上可以通过el变量方式$key或者bboss的一系列数…

    2022年6月24日
    46
  • iframe参数[通俗易懂]

    iframe参数[通俗易懂]iframe参数:runat="server"这个最好加上Iframe跳转asp.net可在当前iframe中跳转src链接到的地址URlframeborder是否显示边

    2022年7月4日
    41
  • 论文文献阅读笔记_IN characteristic of learning

    论文文献阅读笔记_IN characteristic of learningMGN的核心思想是利用globalfeature+finegrainfeature做特征融合然后分类,做part-based的branch取得很简单就是等分,但是为了让模型能收敛,用了多个patch的loss混合训练。看文章结果很不错,只用了给的数据集里面的trainset就能达到90+。github上只有pytorch版本,准备这段时间自己搞一个纯TF版本出来。Motivatio…

    2022年9月27日
    0
  • Idea激活码永久有效Idea2021.3.1激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2021.3.1激活码教程-持续更新,一步到位Idea激活码永久有效2021.3.1激活码教程-Windows版永久激活-持续更新,Idea激活码2021.3.1成功激活

    2022年6月17日
    119
  • 小程序 消息推送配置token无效(解决方法)订阅消息

    小程序 消息推送配置token无效(解决方法)订阅消息代码://验证tokenfunctionverifyToken(){$signature=$_GET[“signature”];$timestamp=$_GET[“timestamp”];$nonce=$_GET[“nonce”];$token=’571247942′;//和token(令牌)一一对应$tmpArr=array($token,$timestamp,$nonce);sort($tmpArr,SORT_STR

    2022年9月12日
    0

发表回复

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

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