【Java orm 框架比较】九 新增wood框架对比

【Java orm 框架比较】九 新增wood框架对比

本次新增wood 框架测试 测试数据存储、分页查询,文档及框架比较稳定半天时间加入测试使用

迁移到(https://gitee.com/wujiawei1207537021/spring-orm-integration-compare)

orm框架使用性能比较

比较mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_orm、wood操作数据
环境:
idea 
jdk17
spring boot 3.0.7
mysql 8.0

测试条件常规对象

orm 框架是否支持xml是否支持 Lambda对比版本编码方式
mybatis☑️☑️3.5.4lambda +xml 优化
sqltoy☑️☑️5.2.98lambda
lazy✖️☑️1.2.4-JDK17-SNAPSHOTlambda
mybatis-flex☑️☑️1.8.0lambda +xml 优化
easy-query✖️☑️1.10.31lambda
mybatis-mp☑️☑️1.4.1xml 优化
jpa☑️☑️3.0.7----------------------
dbvisitor☑️☑️5.4.1xml 优化
beetlsql支持md☑️3.26.0-RELEASEinsert ignore into 优化
dream_orm✖️☑️1.3.0insert ignore into (当前版本不支持)
wood☑️☑️1.2.9insert 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框架mybatis-plus、sqltoy、Lazy、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_orm、wood 创建 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
执行时间:67毫秒16毫秒109毫秒799毫秒
WOOD(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:33毫秒298毫秒2623毫秒26108毫秒
LAZY(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:3毫秒14毫秒66毫秒468毫秒
MYBATIS_MP(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:9毫秒17毫秒118毫秒743毫秒
DB_VISITOR(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:42毫秒304毫秒2861毫秒28482毫秒
MYBATIS_PLUS(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:31毫秒18毫秒111毫秒779毫秒
JPA(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:48毫秒47毫秒837毫秒7670毫秒
EASY_QUERY(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:70毫秒331毫秒2879毫秒26733毫秒
SQLTOY(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:44毫秒280毫秒2745毫秒28759毫秒
DREAM_ORM(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:61毫秒317毫秒2738毫秒27285毫秒
BEETL_SQL(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:150毫秒302毫秒2873毫秒28001毫秒
MYBATIS_FLEX(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:23毫秒8毫秒19毫秒172毫秒
WOOD(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:7毫秒7毫秒15毫秒132毫秒
LAZY(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:8毫秒5毫秒13毫秒91毫秒
MYBATIS_MP(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:23毫秒7毫秒20毫秒133毫秒
DB_VISITOR(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:9毫秒3毫秒18毫秒117毫秒
MYBATIS_PLUS(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:23毫秒4毫秒17毫秒128毫秒
JPA(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:116毫秒13毫秒33毫秒130毫秒
EASY_QUERY(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:37毫秒6毫秒13毫秒103毫秒
SQLTOY(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:20毫秒5毫秒13毫秒109毫秒
DREAM_ORM(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:27毫秒6毫秒19毫秒101毫秒
BEETL_SQL(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000
执行时间:46毫秒9毫秒24毫秒144毫秒
写在最后

经过不间断时间的框架收集、学习、实验、编码、测试市面上常见的ORM框架,过程中拜读了很多作者的博文、样例,学习很多收获很多。
重新梳理下整理的框架:mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_rom、wood

下面从一下几点出发作出总结
  • 文档方面:学习过程中mybatis-plus、jpa 提供的文档资料是比较全和完善,经得住市场的考验
  • 技术方面:beetlsql、easy-query、mybatis、wood系列 三类框架都已经支持spring 和solon生态 其技术架构设计可以推荐大家学习
  • 并发方面:jpa、db_visitor 还需要开发时候深度优化处理
  • 大数据存储方面: Lazy 具有一定优势
  • 大数据查询方面:sqltoy、dream_orm、Easy_query、lazy、db_visitor 反射处理的比较优秀

以上是个人整理的观点,如果大家有不同的想法和意见可以在gitee或者个人博客留言CSDN

细节数据对比(一万以内基本相差不大)
  • 细节数据对比,数据属于并发行测试数据,如果测试总数是一百,那么会执行一百次batchStory,一百次findPage 每次执行的条数在之前数据的基础上+1
从形成的折线图看(具体趋势看排名与测试结果)
  • 存储性能对比: lazy、mybatis-flex、mybatis-mp、mybatis-plus、easy-query、dream_rom、sqltoy、beetlSql 更适合并发性数据存储。jpa、db_visitor 处理耗时较长
  • 分页查询性能对比: lazy、mybatis-flex、mybatis-mp、mybatis-plus、 dream_rom、easy-query、sqltoy、db_visitor、beetlSql 都比较稳定。jpa 处理时间明显起伏

在这里插入图片描述

在这里插入图片描述

批量保存:
  • 一万条数据以内 lazy、mybatis-flex、mybatis-mp、mybatis-plus、easy-query、sqltoy、beetlSql、jpa、db_visitor、wood 性能趋于一致
  • 十万数据时,处理时间由快到慢依次是:
    • 一万毫秒以内:lazy、mybatis-flex、mybatis-mp、mybatis-plus、
    • 一万毫秒以上: easy-query、dream_rom、sqltoy、beetlSql、db_visitor、jpa,其中 db_visitor、jpa、wood 处理时间明显起伏
分页查询:
  • 一万条数据以内 几款ORM均保持在200毫秒内
  • 十万数据时,处理时间由快到慢依次是:
    • 一千毫秒以内:sqltoy、dream_rom、db_visitor、easy-query、lazy、beetlSql、mybatis-plus
    • 一千毫秒以上:mybatis-mp、jpa、mybatis-flex、wood

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

在这里插入图片描述

在这里插入图片描述

当前项目地址
lazy-orm地址
mybatis地址
sqltoy地址
mybatis-flex地址
easy-query地址
mybatis-mp地址
dbvisitor地址
beetlsql地址
dream-orm地址
wood地址

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

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

相关文章

Linux环境下部署vsftp+mysql用户认证

安装mysql(不要使用红帽的RPM版的mysql) 使用编译或静态库安装mysql 1、编译安装pam_mysql 下载软件: http://downloads.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz?rhttp%3A%2F%2Fsourceforge.net%2Fprojects%2Fpam-mysql%2F…

Verilog复习(三)| Verilog语言基础

四种基本的逻辑值 0&#xff1a;逻辑0或“假”1&#xff1a;逻辑1或“真”x&#xff1a;未知z&#xff1a;高阻 三类常量 整型数&#xff1a;简单的十进制格式&#xff0c;基数格式&#xff08;5’O37&#xff0c;4’B1x_01&#xff09; 格式&#xff1a; <size><’b…

Spring Gateway的核心功能:路由、过滤、限流一网打尽

Spring Gateway的简介 在微服务架构的世界里&#xff0c;如同繁星点点的服务需要一个指挥家&#xff0c;将它们有序地组织起来&#xff0c;让它们能够和谐地协同工作。这个指挥家&#xff0c;就是Spring Gateway。它是一个基于Spring Framework 5、Project Reactor和Spring Bo…

AI 资料汇总专栏

包含AI资料、大模型资料、AI最新行业发展 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门研究如何使计算机能够具备智能行为的科学与技术。它致力于开发出能够像人类一样思考、学习、理解和决策的计算机系统。自20世纪50年代以来&#xff…

Spring与AI结合-spring boot3整合AI组件

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 spring ai简介 单独整合al接口 整合Spring AI组件 起步条件 ​编辑 进行必要配置 写在最后 写在前面 本文介绍了springboot开发后端服务中&#xff0c;AI组件(Spring A…

学生管理系统初级

根据题目要求生成大纲 总结: 1.在书写时&#xff0c;考虑到了书写时id可是是abc... 类型是String&#xff0c;但在根据id获取集合中元素时 list.get() &#xff0c;get&#xff08;&#xff09;里面是int类型。 2.在书写还有一点功能并不完全&#xff0c; 2.1查找时是打印所有…

软件系统安全设计规范(word原件)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 软件资料清单列表部分文档…

SpringCloud 集成consul,消费者报I/O error on GET request for...

创建消费者微服务&#xff0c;去调用生产者微服务的请求过程中&#xff0c;出现以下错误&#xff1a; 报错原因 因为在使用SpringCloudAlibaba中的Nacos框架时&#xff0c;自动整合了SpringCloud中的Ribbon框架中的负载均衡&#xff0c;因为微服务提供者有两个&#xff0c;在消…

使用apache和htaccess对目录访问设置密码保护配置教程

对目录设置密码保护配置说明 我们有时候访问某些网站的时候&#xff0c;要求输入用户名和密码才能访问。这是为了保护隐私&#xff0c;只让经过许可的人访问。 在本教程中主要介绍两种方法&#xff0c;一种是通过apache httpd.conf配置文件对管理后台目录设置密码保护&#xff…

BS架构 数据权限--字段级权限 设计与实现

一、需求场景 1. 销售发货场景 销售出库单上 有 商品名称、发货数量、单价、总金额 等信息。 销售人员 关注 上述所有信息&#xff0c;但 仓管人员 不需要知道 单价、总金额 信息。 2. 配方、工艺保密 场景 配方研发人员 掌握核心配方&#xff0c; 但 交给车间打样、生产时…

变色龙Ultra:IC、ID卡读+写+模拟的开源项目

虽然已经很多年没用过刷卡的东西了&#xff0c;确实没有破解或者模拟卡片的需求&#xff0c;但是看到这个开源项目的时候&#xff0c;还是觉得有点意思&#xff0c;值得一看。 这是ultra版本的原理框图&#xff0c;可知ultra体现在加了一个射频卡芯片&#xff0c;南京中科微的C…

亚信安慧AntDB新篇章:数据库技术飞跃

随着大数据时代的到来&#xff0c;对数据库的需求愈发强烈。在这一背景下&#xff0c;国产数据库逐渐崭露头角&#xff0c;亚信安慧AntDB作为重要的代表产品之一正积极参与到激烈的市场竞争中。亚信安慧AntDB不仅追求技术的革新和突破&#xff0c;同时也致力于满足用户日益增长…

JavaWeb中的Session和Cookie

前言 什么是会话跟踪技术 Cookie 1.什么是cookie 2.Cookie的应用 2.1 保持用户登录状态 2.2 记录用户名 3. Cookie的设置和获取 3.1 、通过HttpServletResponse.addCookie的方式设置Cookie 3.2、浏览器中查看cookie的内容 3.3、服务端获取客户端携带的cookie&#xf…

在做题中学习(51): x的平方根

69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09;​​​​​​ 解法&#xff1a;二分查找 思路&#xff1a;看示例2&#xff1a; 可以看到8的平方根是2.82&#xff0c;在2^2和3^2之间&#xff0c;所以可以把数组分为两部分&#xff0c;(具有二段性) 而2.82去掉小数部分…

机器人码垛机的主体结构及技术特点

在现代物流和生产线上&#xff0c;机器人码垛机以其高效、准确的特点&#xff0c;成为了不可或缺的重要设备。那么&#xff0c;这个神奇的机器人究竟由哪些部分组成?它的内部结构又有哪些奥秘呢?接下来&#xff0c;就让我们一起揭开它的神秘面纱! 一、机器人码垛机的主体结构…

人脸图像生成(DCGAN)

一、理论基础 1.什么是深度卷积对抗网络&#xff08;Deep Convolutional Generative Adversarial Network&#xff0c;&#xff09; 深度卷积对抗网络&#xff08;Deep Convolutional Generative Adversarial Network&#xff0c;DCGAN&#xff09;是一种生成对抗网络&#xf…

Docker私有仓库与Harbor部署使用

目录 一、本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ​编辑 3. 运行registry容器 4. Docker容器的重启策略如下 5. 为镜像打标签 6. 上传到私有仓库 7. 列出私有仓库的所有镜像 8. 列出私有仓库的centos镜像有哪些tag 9. 先删…

产品推荐 | 基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡

01 产品概述 板卡主芯片采用Xilinx公司的XC7K325T-2FFG900 FPGA&#xff0c;pin_to_pin兼容FPGAXC7K410T-2FFG900&#xff0c;支持8-Lane PCIe、64bit DDR3、四路SFP连接器、四路SATA接口、内嵌16个高速串行收发器RocketIO GTX&#xff0c;软件具有windows驱动。 02 技术指标…

python数据分析——数据预处理

数据预处理 前言一、查看数据数据表的基本信息查看info&#xff08;&#xff09;示例 查看数据表的大小shape&#xff08;&#xff09;示例 数据格式的查看type()dtype&#xff08;&#xff09;dtypes&#xff08;&#xff09;示例一示例二 查看具体的数据分布describe()示例 二…

自动控制原理学习--平衡小车的控制算法(三)

上一节PID的simulin仿真&#xff0c;这一节用LQR 一、模型 二、LQR LQR属于现代控制理论的一个很重要的点&#xff0c;这里推荐B站的【Advanced控制理论】课程&#xff08;up主DR_CAN&#xff09;&#xff0c;讲得很好&#xff0c;这里引用了他视频里讲LQR的ppt。 LQR属于lo…