Skip to content

BeanCopy

如梦技术 edited this page Apr 2, 2019 · 2 revisions

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 Mode Cnt Score Error Units
hutool thrpt 5 1939.092 ± 26.747 ops/ms
spring thrpt 5 3569.035 ± 39.607 ops/ms
cglib thrpt 5 9112.785 ± 560.503 ops/ms
mica thrpt 5 17753.409 ± 393.245 ops/ms
yangtu222 thrpt 5 18201.997 ± 119.189 ops/ms
cglibMapper thrpt 5 37679.510 ± 3544.624 ops/ms
mapStruct thrpt 5 50328.045 ± 529.707 ops/ms
selma thrpt 5 200859.561 ± 2370.531 ops/ms

附带类型转换(日期)

Benchmark Mode Cnt Score Error Units
mica thrpt 5 1186.375 ± 64.686 ops/ms
mapStruct thrpt 5 1623.478 ± 13.894 ops/ms
selma thrpt 5 160020.595 ± 2570.747 ops/ms

列表模型(100 item)

Benchmark Mode Cnt Score Error Units
spring thrpt 5 35.974 ± 0.555 ops/ms
mica thrpt 5 169.066 ± 5.460 ops/ms

Map 拷贝到 bean

Benchmark Mode Cnt Score Error Units
hutool thrpt 5 1338.551 ± 16.746 ops/ms
mica thrpt 5 13577.056 ± 27.795 ops/ms

结论

java-object-mapper-benchmark 测试结果有些出入。

Selma 的表现反而比 MapStruct 更好,可能是模型不一样导致的。

功能比较

工具包 需要编写Mapper 支持Map 支持List、Set 类型转换 性能
Selma 需要手写转换 极高
MapStruct 支持常用类型和复杂表达式 极高
BeanUtils(yangtu222) 需要手写转换 极高
mica 是用 Spring 的类型转换 极高
Spring 不支持
hutool 不支持