# BeetlSQL 性能 BeetlSQL 3性能总体良好,性能测试采用JMH,有SpringData,MyBatis,JDBC,Weed3等,使用H2的内存模式测试,并且,尽量让Entity最为简单,以最大程度验证Dao自身的性能(实际上对复杂Bean的映射也能体现数据库访问工具性能,BeetlSQL在这方面更具备优势) 测试代码在BeetlSQL3工程里,https://gitee.com/xiandafu/beetlsql/tree/3.0/sql-jmh # 测试标准 参考 BaseService ,测试了Dao的各个功能 ```java public interface BaseService { /** * 简单增加一个实体 */ public void addEntity(); /** * 根据主键查询实体 * @return */ public Object getEntity(); /** * 动态构造sql语句,并支持重构 * */ public void lambdaQuery(); /** * 执行jdbc sql */ public void executeJdbcSql(); /** * 执行sql模板或者HQL */ public void executeTemplateSql(); /** * SQL放到文件管理 */ public void sqlFile(); /** * 一个一对多的例子 */ public void one2Many(); /** * 测试翻页查询 */ public void pageQuery(); /** * 通过配置文件来映射复杂的查询结果,目前只有mybatis和beetlsql支持 */ public void complexMapping(); ``` # 测试方法 进入JMHMain,运行即可。如果你有新的测试方法,可以暂时屏蔽其他测试方法 # 最新结果(2020-9-28) 有些dao并不支持一些特性,所以并未出现在下面列表,比如JDBC不支持自动翻页查询,MyBatis不支持one2Many等。 JDBC作为基准测试,在不考虑JDBC的情况下,BeetlSQL性能比MyBatis和JPA都好很多 另外BeetlSQL支持全部9个场景的测试 > 测试维度是ops/ms,每毫秒的调用次数(Score,Error这里表示误差)。 ``` Benchmark Mode Cnt Score Error Units JMHMain.beetlsqlComplexMapping thrpt 5 212.378 ± 26.222 ops/ms JMHMain.beetlsqlExecuteJdbc thrpt 5 428.713 ± 66.192 ops/ms JMHMain.beetlsqlExecuteTemplate thrpt 5 374.943 ± 20.214 ops/ms JMHMain.beetlsqlFile thrpt 5 433.001 ± 65.448 ops/ms JMHMain.beetlsqlInsert thrpt 5 236.244 ± 112.102 ops/ms JMHMain.beetlsqlLambdaQuery thrpt 5 247.289 ± 19.310 ops/ms JMHMain.beetlsqlOne2Many thrpt 5 108.132 ± 10.934 ops/ms JMHMain.beetlsqlPageQuery thrpt 5 203.751 ± 9.395 ops/ms JMHMain.beetlsqlSelectById thrpt 5 393.437 ± 15.685 ops/ms JMHMain.jdbcExecuteJdbc thrpt 5 1083.310 ± 80.947 ops/ms JMHMain.jdbcInsert thrpt 5 308.341 ± 231.163 ops/ms JMHMain.jdbcSelectById thrpt 5 1019.370 ± 92.946 ops/ms JMHMain.jpaExecuteJdbc thrpt 5 94.600 ± 15.624 ops/ms JMHMain.jpaExecuteTemplate thrpt 5 133.017 ± 12.954 ops/ms JMHMain.jpaInsert thrpt 5 81.232 ± 26.971 ops/ms JMHMain.jpaOne2Many thrpt 5 101.506 ± 11.301 ops/ms JMHMain.jpaPageQuery thrpt 5 117.748 ± 4.512 ops/ms JMHMain.jpaSelectById thrpt 5 335.945 ± 27.186 ops/ms JMHMain.mybatisComplexMapping thrpt 5 102.402 ± 11.129 ops/ms JMHMain.mybatisExecuteTemplate thrpt 5 202.619 ± 16.978 ops/ms JMHMain.mybatisFile thrpt 5 151.151 ± 4.251 ops/ms JMHMain.mybatisInsert thrpt 5 141.469 ± 43.092 ops/ms JMHMain.mybatisLambdaQuery thrpt 5 15.558 ± 1.481 ops/ms JMHMain.mybatisPageQuery thrpt 5 63.705 ± 7.592 ops/ms JMHMain.mybatisSelectById thrpt 5 197.130 ± 19.461 ops/ms JMHMain.weedExecuteJdbc thrpt 5 416.941 ± 22.256 ops/ms JMHMain.weedExecuteTemplate thrpt 5 439.266 ± 57.130 ops/ms JMHMain.weedFile thrpt 5 477.561 ± 37.926 ops/ms JMHMain.weedInsert thrpt 5 231.444 ± 92.598 ops/ms JMHMain.weedLambdaQuery thrpt 5 422.707 ± 64.716 ops/ms JMHMain.weedPageQuery thrpt 5 246.018 ± 18.724 ops/ms JMHMain.weedSelectById thrpt 5 380.348 ± 20.968 ops/ms ```