• 【比较mybatis、lazy、sqltoy、lambda、操作数据 】操作批量新增、分页查询【一】


    orm框架使用Lambda性能比较

    环境:
    idea 
    jdk17
    spring boot 3.0.7
    mysql 8.0
    
    • 1
    • 2
    • 3
    • 4

    测试条件常规对象

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

    数据库表(含有唯一性索引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

    测试结果(因为当前只对lambda操作测试,mybatis针对有唯一性索引的增加或者修改没有做优化,所以结果只提供参考)

    MYBATIS(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:218毫秒338毫秒889毫秒5017毫秒50961毫秒
    LAZY(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:7毫秒21毫秒53毫秒417毫秒3997毫秒
    SQLTOY(batchStory)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:57毫秒75毫秒267毫秒1750毫秒18456毫秒
    MYBATIS(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:1234毫秒1130毫秒957毫秒966毫秒945毫秒
    LAZY(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:28毫秒18毫秒19毫秒133毫秒1107毫秒
    SQLTOY(findPage)影响行数:10影响行数:100影响行数:1000影响行数:10000影响行数:100000
    执行时间:88毫秒38毫秒45毫秒98毫秒334毫秒
    写在最后
    批量保存: lazy性能和sqltoy 更接近原生sql 耗时相对最短
    分页查询: sqltoy性能最高、mybatis次之 lazy框架在数据上万后反射性能明显下降
    当前项目地址
    lazy-orm地址
    mybatis地址
    sqltoy地址
  • 相关阅读:
    Drools实战
    【ansible第三次作业】
    UI设计都有哪些设计原则,分享三个给你
    Verilog 代码题练手 (2-1)
    浮点型数据转为字符串
    Django cookie 与 session
    一站式数据可视化与分析平台JVS智能BI强大的数据节点功能
    浅谈泰山众筹合约系统开发逻辑技术方案详解(原理解析)
    砥砺的前行|基于labview的机器视觉图像处理|NI Vision Assisant(六)——Binary(二值图) 功能
    【leetcode】【周赛】第 307 场
  • 原文地址:https://blog.csdn.net/qq_22903677/article/details/136377587