idea
jdk17
spring boot 3.0.7
mysql 8.0
orm 框架 | 是否支持 xml | 是否支持 Lambda | 对比版本 | 编码方式 |
---|---|---|---|---|
mybatis | ☑️ | ☑️ | 3.5.4 | lambda +xml 优化 |
sqltoy | ☑️ | ☑️ | 5.2.98 | lambda |
lazy | ✖️ | ☑️ | 1.2.4-JDK17-SNAPSHOT | lambda |
mybatis-flex | ☑️ | ☑️ | 1.8.0 | lambda +xml 优化 |
easy-query | ✖️ | ☑️ | 1.10.31 | lambda |
mybatis-mp | ☑️ | ☑️ | 1.4.1 | xml 优化 |
jpa | ☑️ | ☑️ | 3.0.7 | ---------------------- |
dbvisitor | ☑️ | ☑️ | 5.4.1 | xml 优化 |
beetlsql | 支持 md | ☑️ | 3.26.0-RELEASE | insert ignore into 优化 |
dream_orm | ✖️ | ☑️ | 1.3.0 | insert ignore into (当前版本不支持) |
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;
项目启动后使用浏览器打开 http://localhost:1003/sys/user/run-compare
项目启动后使用浏览器打开 http://localhost:1003/sys/user/run-particulars-compare
清空需要插入表中所有数据
通过ORM框架进行数据批量新增、而后进行分页查询,记录消耗时间,输出md文档
MYBATIS_FLEX(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 3 毫秒 | 9 毫秒 | 84 毫秒 | 827 毫秒 | 7199 毫秒 |
LAZY(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 3 毫秒 | 4 毫秒 | 51 毫秒 | 367 毫秒 | 3429 毫秒 |
MYBATIS_MP(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 2 毫秒 | 9 毫秒 | 77 毫秒 | 677 毫秒 | 7177 毫秒 |
DB_VISITOR(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 9 毫秒 | 24 毫秒 | 166 毫秒 | 1609 毫秒 | 16990 毫秒 |
MYBATIS_PLUS(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 9 毫秒 | 9 毫秒 | 131 毫秒 | 714 毫秒 | 7349 毫秒 |
JPA(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 13 毫秒 | 30 毫秒 | 1247 毫秒 | 9894 毫秒 | 99568 毫秒 |
EASY_QUERY(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 10 毫秒 | 21 毫秒 | 202 毫秒 | 1574 毫秒 | 15692 毫秒 |
SQLTOY(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 5 毫秒 | 17 毫秒 | 189 毫秒 | 1537 毫秒 | 15918 毫秒 |
DREAM_ORM(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 12 毫秒 | 19 毫秒 | 159 毫秒 | 1543 毫秒 | 15437 毫秒 |
BEETL_SQL(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 17 毫秒 | 30 毫秒 | 174 毫秒 | 1719 毫秒 | 16831 毫秒 |
MYBATIS_FLEX(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 5 毫秒 | 4 毫秒 | 19 毫秒 | 153 毫秒 | 1388 毫秒 |
LAZY(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 6 毫秒 | 3 毫秒 | 11 毫秒 | 93 毫秒 | 700 毫秒 |
MYBATIS_MP(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 9 毫秒 | 3 毫秒 | 12 毫秒 | 111 毫秒 | 988 毫秒 |
DB_VISITOR(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 4 毫秒 | 1 毫秒 | 8 毫秒 | 70 毫秒 | 782 毫秒 |
MYBATIS_PLUS(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 9 毫秒 | 3 毫秒 | 25 毫秒 | 152 毫秒 | 1309 毫秒 |
JPA(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 15 毫秒 | 3 毫秒 | 25 毫秒 | 108 毫秒 | 1082 毫秒 |
EASY_QUERY(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 7 毫秒 | 1 毫秒 | 9 毫秒 | 61 毫秒 | 637 毫秒 |
SQLTOY(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 14 毫秒 | 5 毫秒 | 16 毫秒 | 80 毫秒 | 602 毫秒 |
DREAM_ORM(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 7 毫秒 | 1 毫秒 | 13 毫秒 | 62 毫秒 | 719 毫秒 |
BEETL_SQL(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 18 毫秒 | 2 毫秒 | 14 毫秒 | 89 毫秒 | 861 毫秒 |
经过将近一周时间的框架收集、学习、实验、编码、测试市面上常见的 ORM 框架,过程中拜读了很多作者的博文、样例,学习很多收获很多。重新梳理下整理的框架:mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_rom
下面从一下几点出发作出总结
以上是个人整理的观点,如果大家有不同的想法和意见可以在 gitee 或者个人博客留言 CSDN
细节数据对比(一万以内基本相差不大)
从形成的折线图看(具体趋势看排名与测试结果)
批量保存:
分页查询:
如果觉得这篇文章写的不错的话,不妨点赞加关注,我会更新更多技术干货、项目教学、经验分享的文章。