簡介
Bean 拷貝在工作中被大量使用,可以大幅度的減少工作量。本文對常用的 Bean copy 工具進行了壓力測試,方便大家選擇更加適合自己的工具。本篇文章是mica cglib 增強——【01】cglib bean copy 介紹 續篇,該專欄會持續更新,感興趣的朋友請訂閱我們。
bean 拷貝工具
- 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;
}
複製程式碼
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…
開源推薦
- Spring boot 微服務高效開發
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…
關注我們
掃描上面二維碼,更多精彩內容每天推薦!