您现在的位置是:首页 > 文章详情

【Java 比较 ORM 框架操作数据】操作批量新增、分页查询(七)

日期:2024-03-06点击:195

orm框架使用性能比较

比较mybatis、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql操作数据

环境:

 idea jdk17 spring boot 3.0.7 mysql 8.0 

测试条件常规对象

orm 框架 是否支持xml 是否支持 Lambda 对比版本 编码方式
mybatis ☑️ ☑️ 3.5.4 lambda +xml 优化
sqltoy ☑️ ☑️ 5.2.98 lambda
lazy ✖️ ☑️ 1.2.4-JDK17-SNAPSHOT lambda
mybatis-flex ☑️ ☑️ 1.8.0 lambda +xml 优化
easy-query ✖️ ☑️ 1.10.31 lambda
mybatis-mp ☑️ ☑️ 1.4.1 xml 优化
jpa ☑️ ☑️ 3.0.7 ----------------------
dbvisitor ☑️ ☑️ 5.4.1 xml 优化
beetlsql 支持md ☑️ 3.26.0-RELEASE insert ignore into 优化

数据库表(含有唯一性索引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框架创建 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
执行时间: 25毫秒 18毫秒 73毫秒 671毫秒 6653毫秒
MYBATIS(batchStory) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 51毫秒 28毫秒 84毫秒 601毫秒 5963毫秒
LAZY(batchStory) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 4毫秒 12毫秒 48毫秒 353毫秒 3512毫秒
MYBATIS_MP(batchStory) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 8毫秒 16毫秒 66毫秒 589毫秒 6060毫秒
DB_VISITOR(batchStory) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 67毫秒 155毫秒 897毫秒 8368毫秒 82348毫秒
JPA(batchStory) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 67毫秒 64毫秒 952毫秒 8608毫秒 95946毫秒
EASY_QUERY(batchStory) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 58毫秒 91毫秒 395毫秒 1608毫秒 15802毫秒
SQLTOY(batchStory) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 35毫秒 36毫秒 173毫秒 1540毫秒 15167毫秒
BEETL_SQL(batchStory) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 187毫秒 106毫秒 260毫秒 1713毫秒 16778毫秒
MYBATIS_FLEX(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 28毫秒 8毫秒 19毫秒 113毫秒 865毫秒
MYBATIS(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 26毫秒 7毫秒 20毫秒 98毫秒 732毫秒
LAZY(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 5毫秒 5毫秒 9毫秒 71毫秒 474毫秒
MYBATIS_MP(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 28毫秒 5毫秒 16毫秒 89毫秒 752毫秒
DB_VISITOR(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 14毫秒 4毫秒 9毫秒 50毫秒 424毫秒
JPA(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 85毫秒 11毫秒 49毫秒 117毫秒 805毫秒
EASY_QUERY(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 39毫秒 9毫秒 22毫秒 60毫秒 474毫秒
SQLTOY(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 23毫秒 4毫秒 10毫秒 45毫秒 249毫秒
BEETL_SQL(findPage) 影响行数:10 影响行数:100 影响行数:1000 影响行数:10000 影响行数:100000
执行时间: 43毫秒 13毫秒 21毫秒 76毫秒 633毫秒

写在最后

细节数据对比(一万以内基本相差不大)

  • 细节数据对比,数据属于并发行测试数据,如果测试总数是一百,那么会执行一百次batchStory,一百次findPage 每次执行的条数在之前数据的基础上+1

从形成的折线图看(具体趋势看排名与测试结果)

  • 存储性能对比: lazy、mybatis-flex、mybatis-mp、mybatis、easy-query、sqltoy、beetlSql 更适合并发性数据存储。jpa、db_visitor 处理耗时较长
  • 分页查询性能对比: lazy、mybatis-flex、mybatis-mp、mybatis、easy-query、sqltoy、db_visitor、beetlSql 都比较稳定。jpa 处理时间明显起伏

批量保存:

  • 一万条数据以内 lazy、mybatis-flex、mybatis-mp、mybatis、easy-query、sqltoy、beetlSql、jpa、db_visitor 性能趋于一致
  • 十万数据时,处理时间由快到慢依次是: lazy、mybatis-flex、mybatis-mp、mybatis、easy-query、sqltoy、beetlSql、db_visitor、jpa,其中 db_visitor、jpa 处理时间明显起伏

分页查询:

  • 一万条数据以内 几款ORM均保持在200毫秒内
  • 十万数据时,处理时间由快到慢依次是: sqltoy、db_visitor、easy-query、lazy、beetlSql、mybatis、mybatis-mp、jpa、mybatis-flex
  •  

快速数据对比(大数据曲线图)

当前项目地址

lazy-orm地址

mybatis地址

sqltoy地址

mybatis-flex地址

easy-query地址

mybatis-mp地址

dbvisitor地址

beetlsql地址

原文链接:https://www.oschina.net/news/281792
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章