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


    orm框架使用性能比较

    环境:
    idea 
    jdk17
    spring boot 3.0.7
    mysql 8.0
    
    • 1
    • 2
    • 3
    • 4
    比较mybatis、lazy、sqltoy、mybatis-flex操作数据

    测试条件常规对象

    orm 框架是否支持xml是否支持 Lambda对比版本
    mybatis☑️☑️3.5.4
    sqltoy☑️☑️5.2.98
    lazy✖️☑️1.2.4-JDK17-SNAPSHOT
    mybatis-flex☑️☑️1.8.0

    数据库表(含有唯一性索引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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    比较方法:增加、修改、删除、分页查询(当前项目暂时只比较批量新增和分页)

    项目设计

    声明 SysUserRepository 接口提供对应增删改查方法
    在这里插入图片描述

    声明抽象类 SysUserRepositoryAbstractRecord 继承 SysUserRepository 并且提供对应的框架执行结果存储
    在这里插入图片描述

    三种框架mybatis、sqltoy、Lazy 创建SysUserRepository 的实现
    在这里插入图片描述

    不同 ORM 操作数据的实现

    在这里插入图片描述

    测试条件 批量插入数据 10、100、1000、10000、100000 ,分页查询数据 10、100、1000、10000、100000

    项目启动后使用浏览器打开 http://localhost:1003/sys/user/run-compare
    
    • 1

    测试执行过程

    清空需要插入表中所有数据
    通过三种ORM框架进行数据批量新增、而后进行分页查询,记录消耗时间,输出md文档
    
    • 1
    • 2

    测试结果(结果只提供参考)

    MYBATIS_FLEX(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:9毫秒15毫秒122毫秒621毫秒5505毫秒
    MYBATIS(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:37毫秒54毫秒96毫秒689毫秒5656毫秒
    LAZY(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:27毫秒48毫秒304毫秒1062毫秒4158毫秒
    SQLTOY(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:47毫秒69毫秒204毫秒896毫秒7978毫秒
    MYBATIS_FLEX(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:40毫秒12毫秒22毫秒96毫秒782毫秒
    MYBATIS(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:1064毫秒983毫秒989毫秒973毫秒976毫秒
    LAZY(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:53毫秒9毫秒18毫秒70毫秒653毫秒
    SQLTOY(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:51毫秒32毫秒45毫秒106毫秒335毫秒
    写在最后
    批量保存:
    • 一万条数据以内 性能由高到低 mybatis-flex 、mybatis、sqltoy、lazy 其中mybatis和mybatis-flex 耗时基本相当
    • 十万数据时,处理时间由快到慢依次是: lazy、mybatis、mybatis-flex、sqltoy
    分页查询: (比较之前问题Lazy ORM 框架内部做了优化后)
    • 一万条数据以内 性能由高到低 lazy、mybatis-flex 、sqltoy、mybatis
    • 十万数据时,处理时间由快到慢依次是: sqltoy、lazy、mybatis-flex、mybatis
    当前项目地址
    lazy-orm地址
    mybatis地址
    sqltoy地址
    mybatis-flex地址
  • 相关阅读:
    MFC扩展库BCGControlBar Pro v33.6 - 网格、报表控件功能升级
    centos 使用docker安装mysql
    RocketMQ核心原理设计(1)
    [C++11]可变参数模板和参数包展开
    誉天在线项目~ElementPlus Tag标签用法
    兼容vue2和vue3版本的插件实现过程
    MySQL---搜索引擎
    基础算法 - 常见算法模板题(最简洁写法)【下】
    原来CSS的登录界面可以变得这么好看
    jQuery内容概述
  • 原文地址:https://blog.csdn.net/qq_22903677/article/details/136403117