Java Bean Copy 效能大比拼

如夢技術發表於2019-03-28

簡介

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…

開源推薦

關注我們

如夢技術-公眾號.jpg

掃描上面二維碼,更多精彩內容每天推薦!

相關文章