【比较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地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙实战项目开发:【短信服务】

概述 本示例展示了电话服务中发送短信的功能。 样例展示 涉及OpenHarmony技术特性 网络通信 难度级别 中级 基础信息 使用ohos.telephony.sms接口展示了电话服务中发送短信的功能。 效果预览 新建联系人首页短信页 使用说明: 首页点击创建联系人&am…

每日一练:LeeCode-203. 移除链表元素 【链表+虚拟头结点】

每日一练:LeeCode-203. 移除链表元素 【链表虚拟头结点】 思路设置虚拟头结点 本文是力扣 每日一练:LeeCode-203. 移除链表元素 【链表虚拟头结点】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode-20…

自然语言处理(NLP)中NER如何从JSON数据中提取实体词的有效信息

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

Nginx 和Tomcat比较

Nginx和Tomcat是两种不同的技术,它们在应用场景、性能、动态处理能力等方面有所区别: 应用场景 Nginx通常用作静态内容服务器或代理服务器,可以将外部请求转发给其他应用服务器,如Tomcat、Django等。而Tomcat则主要用作应用服…

机器学习-面经(part3)

5. 正则化 5.0 手推L1,L2 5.1 什么是正则化,如何理解 定义: 在损失函数后加上一个正则化项(惩罚项),其实就是常说的结构风险最小化策略,即损失函数 加上正则化。一般模型越复杂,正则化值越大。 正则化项是用来对模型中某些参数进行约束,正则化的一般形式如下: 第一项是…

固件和内核驱动

驱动折腾小记 很多人更新了内核,但是自己的外设依然没有驱动,是因为仅仅更新内核是不够的,还需要更新固件。 什么是固件? 在许多设备能够与操作系统通信之前,它们必须首先使用设备制造商提供的“固件”进行初始化。…

实施工程师常遇技术问题

文章目录 一、对与一个项目,你认为项目的里程碑有哪几个?二、Tomcat服务器与Resin服务器的区别2.1、开发商和许可证:2.2、部署和配置:2.3、功能和扩展性:2.4、社区和生态系统: 三、版本控制工具SVN与Git的区…

升级openssl

openssl版本一键升级(需要修改tar包名称和路径) --- - name: Install OpenSSLhosts: openssltasks:- name: Copy OpenSSL tar.gz to /tmpcopy:src: /root/shl/soft/openssl-1.1.1v.tar.gzdest: /tmp # remote_src: yes # 如果源文件在控制主机上…

吴恩达《机器学习》学习笔记

本笔记资料来源于 http://www.ai-start.com/ml2014/,该笔记来自于https://blog.csdn.net/dadapongi6/article/details/105668394,看了忘,忘了看,再看一遍。 时间统计:2024.2.29 5个番茄钟,从week1开始&…

【PyTorch][chapter 19][李宏毅深度学习]【无监督学习][ GAN]【理论】

前言: 生成对抗网络(Generative Adversarial Nets,GAN)是一种基于对抗学习的深度生成模型。 2014年,蒙特利尔博士 lan Goodfellow 发表了论文《Generative Adaversarial Networks》, 一经提出便成为了学术…

Python CGI编程

文章目录 什么是CGICGI架构Web服务器支持及配置CGI程序示例CGI环境变量GET和POST方法GET方法POST方法区别注意事项 使用POST方法传递数据1. 创建HTML表单2. 编写CGI脚本3. 配置服务器4. 提交表单5. 服务器处理请求注意事项 通过CGI程序传递checkbox数据创建HTML表单编写CGI脚本…

二维码门楼牌管理系统技术服务:门牌编设规则详解

文章目录 前言一、门牌编设规则解读二、区间编号与分段编号策略三、多出入口建筑物的门牌编设 前言 随着城市化的快速推进,门楼牌管理成为城市管理中不可或缺的一环。二维码门楼牌管理系统的引入,不仅提升了管理的效率,也为市民提供了更为便…

波奇学Liunx:信号的产生,保存,处理

信号的产生,信号的保存,信号的处理 在操作系统中进程接受到信号会保存,产生 进程必须识别和能够处理信号,处理信号是进程的内置功能 进程收到信号时不一定会立即执行,所以进程必然有一套识别,保存&#xff…

Leetcode 3066. Minimum Operations to Exceed Threshold Value II

Leetcode 3066. Minimum Operations to Exceed Threshold Value II 1. 解题思路2. 代码实现 题目链接:Leetcode 3066. Minimum Operations to Exceed Threshold Value II 1. 解题思路 这一题的话只需要排序之后按照题目条件逐一进行执行直至满足条件即可。 唯一…

Pytorch中,dim形象化的确切意义是什么?

在Pytorch中涉及张量的操作都会涉及“dim”的设置,虽然也理解个大差不差,但是偶尔还是有点犯迷糊,究其原因还是没有形象化的理解。 首先,张量的维度排序是有固定顺序的,0,1,2,.....…

(1)预处理

我们需要的文件结构如上 main.cpp add.h add.cpp add.h 这里使用riscv的工具链编译为.i文件,需要使用-E,就是只进行预处理,我们可以得到两个.i文件即main.i和add.i main.i 这里看到main.i里头文件全部替换,然后多了三万多行 所以…

Leetcode 3068. Find the Maximum Sum of Node Values

Leetcode 3068. Find the Maximum Sum of Node Values 1. 解题思路2. 代码实现 题目链接:3068. Find the Maximum Sum of Node Values 1. 解题思路 这一题虽然标记为一道hard的题目,但其实就是一个脑筋急转弯的题目。 我们只需要想明白一点即可&…

4G/5G执法记录仪、智能安全帽走国标GB28181接入海康、宇视等大平台,也可走平台与平台对接,以下级平台级联到上级大平台

AIoT万物智联,智能安全帽生产厂家,执法记录仪生产厂家,智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、无人机4G补传系统等统一接入大型融合通信可视指挥调度平台VM…

Vue3和ElementPlus封装table组件

最近学习vue3.2并自己在写一个项目,然后发现好几个页面都是列表页,重复写table和column也是觉得累,学习的项目列表页不算多,要是公司项目就不一样了,所以就想着自己封装一个table组件,免去大量重复工作和co…

滑动窗口

题目 思路 对于一个数组区间的最值,可以开辟一个队列记录(当然这里不能叫队列只是和队列相似,习惯性叫法)。 每个区间的最值等于队首元素。扫描数组时,如果该元素大于队尾元素(取最大值时)将该队尾元素出队…