当前位置: 首页 > news >正文

【比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据】操作批量新增、分页查询(三)

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

快速数据对比

在这里插入图片描述

在这里插入图片描述

当前项目地址
lazy-orm地址
mybatis地址
sqltoy地址
mybatis-flex地址
easy-query地址

相关文章:

  • 物联网常见协议篇
  • QT tcp通信
  • 共享wifi项目如何加盟,都有哪些注意事项?
  • JDK22新特性Class-File API尝鲜
  • 1.3 卷积层的输出尺寸、参数量和计算量
  • VUE3项目学习系列--项目配置(二)
  • 行人实时动作识别
  • Maven能解决什么问题?为什么要用?
  • STM32(15)USART编程
  • 红黑树的简单介绍
  • 第十七天-反爬与反反爬-验证码识别
  • [HackMyVM]靶场 Quick3
  • 【学习心得】网站运行时间轴(爬虫逆向)
  • C# Winform画图绘制圆形
  • c 函数 memset使用注意事项
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • angular2 简述
  • classpath对获取配置文件的影响
  • Java精华积累:初学者都应该搞懂的问题
  • java中的hashCode
  • Object.assign方法不能实现深复制
  • Web Storage相关
  • windows下mongoDB的环境配置
  • zookeeper系列(七)实战分布式命名服务
  • 从0到1:PostCSS 插件开发最佳实践
  • 构建工具 - 收藏集 - 掘金
  • 记一次删除Git记录中的大文件的过程
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 深度解析利用ES6进行Promise封装总结
  • 微信小程序实战练习(仿五洲到家微信版)
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • # .NET Framework中使用命名管道进行进程间通信
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (06)Hive——正则表达式
  • (Java)【深基9.例1】选举学生会
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (转)程序员疫苗:代码注入
  • *Django中的Ajax 纯js的书写样式1
  • .“空心村”成因分析及解决对策122344
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET上SQLite的连接
  • .NET下ASPX编程的几个小问题
  • .Net中间语言BeforeFieldInit
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @html.ActionLink的几种参数格式
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题