-
Notifications
You must be signed in to change notification settings - Fork 19
BeanCopy
如梦技术 edited this page Apr 2, 2019
·
2 revisions
- MapStruct (编译期生成 Mapper 实现)
- Selma (编译期生成 Mapper 实现)
- yangtu222 - BeanUtils (第一次生成 copy 实现字节码)
- mica (第一次生成 copy 实现字节码)
- hutool (反射)
/**
* 来源用户
*
* @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;
}
- 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 |
Benchmark | Mode | Cnt | Score | Error | Units |
---|---|---|---|---|---|
spring | thrpt | 5 | 35.974 ± | 0.555 | ops/ms |
mica | thrpt | 5 | 169.066 ± | 5.460 | ops/ms |
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 | 否 | 是 | 否 | 不支持 | 高 |