Hibernate 和 MyBatis 哪个更好用

本文通过实验对比了Hibernate和MyBatis在单表插入、查询等场景下的性能,发现MyBatis在插入与单表查询上稍占优势,而Hibernate在关联查询时的懒加载特性在特定条件下能提升性能。缓存配置方面,Hibernate的二级缓存在关联查询中有优势,但MyBatis直接配置缓存可能导致脏数据。
摘要由CSDN通过智能技术生成

由于编程思想与数据库的设计模式不同,生出了一些 ORM 框架。核心都是将关系型数据库和数据转成对象型。当前流行的方案有 Hibernate 与 myBatis。两者各有优劣。竞争激烈,其中一个比较重要的考虑的地方就是性能。因此笔者通过各种实验,测出两个在相同情景下的性能相关的指数,供大家参考。

测试目标

以下测试需要确定几点内容:性能差异的场景;性能不在同场景下差异比;找出各架框优劣,各种情况下的表现,适用场景。

测试思路

测试总体分成:单表插入,关联插入,单表查询,多表查询。测试分两轮,同场景下默认参数做一轮,调优做强一轮,横纵对比分析了。测试中尽保证输入输出的一致性。样本量尽可能大,达到 10 万级别以上,减少统计误差。

测试提纲

具体的场景情况下插入测试 1:10 万条记录插入。查询测试 1:100 万数据中单表通过 id 查询 100000 次,无关联字段。查询测试 2:100 万数据中单表通过 id 查询 100000 次,输出关联对象字段。查询测试 3:100 万*50 万关联数据中查询 100000 次,两者输出相同字段。

准备

数据库:mysql 5.6 表格设计:twitter:推特

CREATE TABLE `twitter` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `add_date` datetime DEFAULT NULL,
  `modify_date` datetime DEFAULT NULL,
  `ctx` varchar(255) NOT NULL,
  `add_user_id` bigint(20) DEFAULT NULL,
  `modify_user_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `UPDATE_USER_FORI` (`modify_user_id`),
  KEY `ADD_USER_FORI` (`add_user_id`),
  CONSTRAINT `ADD_USER_FORI` FOREIGN KEY (`add_user_id`) REFERENCES `user` (`id`) ON DELETE SET NULL,
  CONSTRAINT `UPDATE_USER_FORI` FOREIGN KEY (`modify_user_id`) REFERENCES `user` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=1048561 DEFAULT CHARSET=utf8


复制代码

user: 用户

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=524281 DEFAULT CHARSET=utf8
复制代码

测试数据准备:

表一:twitter

无数据。

表二:user

50 万个随机的用户名。

随机内容推特表(material_twitter)无 id,仅有随机字符串内容,共 10 万条。用于插入控推特表。

生成数据代码,关联 100 个用户:

insert into twitter(ctx,add_user_id,modify_user_id,add_date,modify_date)SELECT name,ROUND(RAND()*100)+1,ROUND(RAND()*100)+1,'2016-12-31','2016-12-31'from MATERIAL

生成数据代码,关联 500000 个用户ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值