orm框架使用性能比較
比較mybatis、lazy、sqltoy、mybatis-flex、easy-query操作數據
環境:
idea
jdk17
spring boot 3.0.7
mysql 8.0
測試條件常規對象
orm 框架 是否支持xml 是否支持 Lambda 對比版本 mybatis ?? ?? 3.5.4 sqltoy ?? ?? 5.2.98 lazy ?? ?? 1.2.4-JDK17-SNAPSHOT mybatis-flex ?? ?? 1.8.0 easy-query ?? ?? 1.10.31
數據庫表(含有唯一性索引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;
比較方法:增加、修改、刪除、分頁查詢(當前項目暫時只比較批量新增和分頁)
項目設計
聲明 ORMRepository 接口提供對應增刪改查方法
聲明 ORMComparisonRepository接口 繼承 ORMRepository 下游由不同ORM實現
聲明 SysUserRepository 接口 繼承 ORMRepository 用于循環調用不同orm實現方法執行方法測試產生測試結果
聲明抽象類 SysUserRepositoryAbstractRecord 繼承 ORMComparisonRepository 并且提供對應的框架執行結果存儲
不同ORM框架mybatis、sqltoy、Lazy、easy-query 創建 ORMComparisonRepository 的實現
不同 ORM 操作數據的實現在
測試條件 批量插入數據 10、100、1000、10000、100000 ,分頁查詢數據 10、100、1000、10000、100000
項目啟動后使用瀏覽器打開 http://localhost:1003/sys/user/run-compare
測試條件(細節比較) 批量插入數據 1~10000,分頁查詢數據 1~10000
項目啟動后使用瀏覽器打開 http://localhost:1003/sys/user/run-particulars-compare
測試執行過程
清空需要插入表中所有數據
通過三種ORM框架進行數據批量新增、而后進行分頁查詢,記錄消耗時間,輸出md文檔
測試結果(結果只提供參考)
MYBATIS_FLEX(batchStory) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 3毫秒 11毫秒 61毫秒 633毫秒 6985毫秒
MYBATIS(batchStory) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 6毫秒 8毫秒 59毫秒 733毫秒 7136毫秒
LAZY(batchStory) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 8毫秒 9毫秒 39毫秒 385毫秒 3987毫秒
EASY_QUERY(batchStory) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 31毫秒 57毫秒 311毫秒 1956毫秒 20898毫秒
SQLTOY(batchStory) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 8毫秒 26毫秒 183毫秒 1610毫秒 18832毫秒
MYBATIS_FLEX(findPage) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 10毫秒 19毫秒 30毫秒 100毫秒 668毫秒
MYBATIS(findPage) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 1231毫秒 888毫秒 1114毫秒 819毫秒 838毫秒
LAZY(findPage) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 8毫秒 7毫秒 17毫秒 196毫秒 675毫秒
EASY_QUERY(findPage) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 15毫秒 5毫秒 18毫秒 96毫秒 638毫秒
SQLTOY(findPage) 影響行數:10 影響行數:100 影響行數:1000 影響行數:10000 影響行數:100000 執行時間: 36毫秒 35毫秒 37毫秒 86毫秒 229毫秒
寫在最后
細節數據對比(一萬以內基本相差不大)
批量保存:
一萬條數據以內 性能由高到低 mybatis-flex 、mybatis、lazy 性能趨于一致 sqltoy、easy-query 耗時出現明顯起伏 十萬數據時,處理時間由快到慢依次是: lazy、mybatis、mybatis-flex、easy-query、sqltoy
分頁查詢:
一萬條數據以內 性能由高到低 lazy、mybatis-flex 、sqltoy、easy-query、mybatis 十萬數據時,處理時間由快到慢依次是: sqltoy、lazy、mybatis-flex、easy-query、mybatis
快速數據對比