AI智能
改变未来

Java Bean Copy 性能大比拼


简介

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 gend8000er;
   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 不支持

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Java Bean Copy 性能大比拼