BeetlSQL 是我這倆年和小夥伴們研發的一個開源全功能ORM工具,強調快速開發,高效維護,能真正跨數據庫平臺,支持分庫分表等功能。從這個鏈接可以看到關於我對BeetlSQL的一個總結:5分鐘 BeetlSQL 快速入門
一直有朋友想了解一下BeetlSQL跟Myabtis,Hiberante功能區別,因此我寫了個博客總結了一下,從這裏可以看到:hibernate,mybatis,beetlsql 全面比較
最近也有人問過性能上的差別,我一直沒有去做這塊,主要感覺ORM性能好壞在系統不佔主要地位,工具主要瓶頸還是在數據庫優化。不過還是昨天在小夥伴幫助下,初步完成了一個性能測試,測試結果如下
可以從 我的碼雲上獲得整個測試代碼和測試結果:https://gitee.com/xiandafu/dao-benchmark
測試總結
從測試結果來看,JDBC無疑是最快的,比JPA和MyBatis高一個數量級,幾倍於BeetlSQL。 但ORM工具中(也是本次測試的目的),BeetlSQL非常快,基本上都是好幾倍於其他工具,比如
- testAdd, BeetlSQL是JPA的7倍,是MyBatis的3倍
- testUnique BeetlSQL是JPA的4倍,是MyBatis的3倍
- testUpdateById ,BeetlSQL 比JPA快一些,比Mybatis快3倍
- testPageQuery,BeetlSQL是JPA的3倍,是MyBatis的約5倍
- testExample,BeetlSQL是JPA的7倍,是MyBatis的約4倍
如何測試
- git clone https://gitee.com/xiandafu/dao-benchmark
- mvn clean package
- java -jar -Dtest.target=jpa target/dao-0.0.1-SNAPSHOT.jar 測試目標可更換爲jpa,beetlsql,mybatis,jdbc
- 在result目錄檢測測試文本結果
測試過程
整個系統基於SpringBoot,因此同時集成了JDBC,BeetlSQL,JPA(Spring Data),MyBatis 四種數據庫訪問方式,並通過配置來說明測試目標
test:
count: 1000
target: mybatis
warmCount: 20
所以測試都是單獨JVM完成,預熱20次,然後測試1000次。測試完畢,JVM應用停掉。 爲了保證數據庫對測試結果影響最小,使用了H2的內存數據庫
spring:
datasource:
driver-class-name: org.h2.Driver
password: ''
schema: classpath:db/schema.sql
url: jdbc:h2:mem:dbtest;DB_CLOSE_ON_EXIT=FALSE
username: sa
每個Dao工具都必須實現一個測試接口,並註冊到SpringBoot裏
@Configuration
public class TestServiceConfig {
@Bean
@ConditionalOnProperty(name = "test.target", havingValue = "beetlsql")
public TestServiceInterface getBeetlSqlTestService() {
return new BeetlSqlPerformaceTestService();
}
@Bean
@ConditionalOnProperty(name = "test.target", havingValue = "jpa")
public TestServiceInterface getJpaTestService() {
return new JpaPerformaceTestService();
}
@Bean
@ConditionalOnProperty(name = "test.target", havingValue = "mybatis")
public TestServiceInterface getMyBatisTestService() {
return new MyBatisPerformanceTestService();
}
@Bean
@ConditionalOnProperty(name = "test.target", havingValue = "jdbc")
public TestServiceInterface getRawJDBCTestService() {
return new RawJDBCPerformaceTestService();
}
}
如果你對如何完成這些測試有疑惑,可以閱讀這些源碼,看看測試是否需要改進:)
測試結果在控制檯打印出來,並同時記錄結果到result目錄下
我是手工將這些數據錄入excel表格並導出到統計圖裏。
BeetlSQL 是一個ORM工具,其中SQL管理和SQL模板是基於Beetl技術,順便也貼一下Beetl的性能測試,這個一直都是非常高性能,全功能的模板語言
,如果你對BeetlSQL和Beetl有興趣,可以訪問Ibeetl.com 瞭解有哪些國內大廠使用過,以及使用手冊和DEMO