Bean 拷贝在工做中被大量使用,能够大幅度的减小工做量。本文对经常使用的 Bean copy 工具进行了压力测试,方便你们选择更加适合本身的工具。本篇文章是mica cglib 加强——【01】cglib bean copy 介绍 续篇,该专栏会持续更新,感兴趣的朋友请订阅咱们。vue
/** * 来源用户 * * @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;
}
复制代码
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 |
Benchmark | Score | Error | Units |
---|---|---|---|
spring | 35.974 | 0.555 | ops/ms |
mica | 169.066 | 5.460 | ops/ms |
Benchmark | Score | Error | Units |
---|---|---|---|
hutool | 1338.551 | 16.746 | ops/ms |
mica | 13577.056 | 27.795 | ops/ms |
和 java-object-mapper-benchmark 测试结果有些出入。java
Selma 的表现反而比 MapStruct 更好,多是模型不同致使的。git
工具包 | 须要编写Mapper | 支持Map | 支持List、Set | 类型转换 | 性能 |
---|---|---|---|---|---|
Selma | 是 | 否 | 否 | 须要手写转换 | 极高 |
MapStruct | 是 | 否 | 否 | 支持经常使用类型和复杂表达式 | 极高 |
BeanUtils(yangtu222) | 否 | 否 | 是 | 须要手写转换 | 极高 |
mica | 否 | 是 | 是 | 是用 Spring 的类型转换 | 极高 |
Spring | 否 | 否 | 否 | 不支持 | 高 |
hutool | 否 | 是 | 否 | 不支持 | 高 |
本项目源码:github.com/lets-mica/m…github
mica
工具集:gitee.com/596392912/m…Avue
一款基于vue可配置化的神奇框架:gitee.com/smallweigit…pig
宇宙最强微服务(架构师必备):gitee.com/log4j/pigSpringBlade
完整的线上解决方案(企业开发必备):gitee.com/smallc/Spri…IJPay
支付SDK让支付触手可及:gitee.com/javen205/IJ…扫描上面二维码,更多精彩内容天天推荐!spring