orm框架使用Lambda性能比較
環境:
idea
jdk17
spring boot 3.0.7
mysql 8.0
測試條件常規對象
orm 框架 是否支持xml 是否支持 Lambda 對比版本 mybatis ?? ?? 3.5.4 sqltoy ?? ?? 5.2.98 lazy ?? ?? 1.2.3-JDK17
數據庫表(含有唯一性索引s_u)
CREATE TABLE ` sys_user` ( ` column_name` varchar ( 255 ) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '額外字段' , ` create_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '創建時間' , ` id` bigint NOT NULL AUTO_INCREMENT COMMENT '用戶ID' , ` is_deleted` tinyint ( 1 ) DEFAULT NULL COMMENT 'null' , ` password` varchar ( 255 ) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '密碼' , ` scope` varchar ( 255 ) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'null' , ` status` tinyint ( 1 ) DEFAULT NULL COMMENT '狀態' , ` update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間' , ` username` varchar ( 255 ) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用戶名' , PRIMARY KEY ( ` id` ) USING BTREE , UNIQUE KEY ` s_u` ( ` scope` , ` username` )
) ENGINE = InnoDB AUTO_INCREMENT = 9223371632070323791 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;
比較方法:增加、修改、刪除、分頁查詢(當前項目暫時只比較批量新增和分頁)
項目設計
聲明 SysUserRepository 接口提供對應增刪改查方法
聲明抽象類 SysUserRepositoryAbstractRecord 繼承 SysUserRepository 并且提供對應的框架執行結果存儲
三種框架mybatis、sqltoy、Lazy 創建SysUserRepository 的實現
不同 ORM 操作數據的實現
測試條件 批量插入數據 10、100、1000、10000、100000 ,分頁查詢數據 10、100、1000、10000、100000
項目啟動后使用瀏覽器打開 http://localhost:1003/sys/user/run-compare
測試執行過程
清空需要插入表中所有數據
通過三種ORM框架進行數據批量新增、而后進行分頁查詢,記錄消耗時間,輸出md文檔
測試結果(因為當前只對lambda操作測試,mybatis針對有唯一性索引的增加或者修改沒有做優化,所以結果只提供參考)
MYBATIS(batchStory) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 218毫秒 338毫秒 889毫秒 5017毫秒 50961毫秒
LAZY(batchStory) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 7毫秒 21毫秒 53毫秒 417毫秒 3997毫秒
SQLTOY(batchStory) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 57毫秒 75毫秒 267毫秒 1750毫秒 18456毫秒
MYBATIS(findPage) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 1234毫秒 1130毫秒 957毫秒 966毫秒 945毫秒
LAZY(findPage) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 28毫秒 18毫秒 19毫秒 133毫秒 1107毫秒
SQLTOY(findPage) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 88毫秒 38毫秒 45毫秒 98毫秒 334毫秒
寫在最后
批量保存: lazy性能和sqltoy 更接近原生sql 耗時相對最短
分頁查詢: sqltoy性能最高、mybatis次之 lazy框架在數據上萬后反射性能明顯下降