MyBatis和Hibernate相比,优势在哪里? 您所在的位置:网站首页 hibernate框架和mybatis MyBatis和Hibernate相比,优势在哪里?

MyBatis和Hibernate相比,优势在哪里?

#MyBatis和Hibernate相比,优势在哪里?| 来源: 网络整理| 查看: 265

通过各种实验,测出两个在相同情景下的性能相关的指数,供大家参考。

测试目标

以下测试需要确定几点内容:

性能差异的场景;

性能不在同场景下差异比;

找出各架框优劣,各种情况下的表现,适用场景。

测试思路

测试总体分成:单表插入,关联插入,单表查询,多表查询。

测试分两轮,同场景下默认参数做一轮,调优做强一轮,横纵对比分析了。

测试中尽保证输入输出的一致性。

样本量尽可能大,达到10万级别以上,减少统计误差。

测试提纲

具体的场景情况下

插入测试1:10万条记录插入。

查询测试1:100万数据中单表通过id查询100000次,无关联字段。

查询测试2:100万数据中单表通过id查询100000次,输出关联对象字段。

查询测试3:100万*50万关联数据中查询100000次,两者输出相同字段。

准备

数据库:mysql 5.6

表格设计:

twitter:推特

Sql代码

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: 用户

Sql代码

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个用户:

Java代码

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个用户:

Java代码

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

实体代码

Java代码

@Entity @Table(name = "twitter") public class Twitter implements java.io.Serializable{ private Long id; private Date add_date; private Date modify_date; private String ctx; private User add_user; private User modify_user; private String createUserName; @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Temporal(TemporalType.DATE) @Column(name = "add_date") public Date getAddDate() { return add_date; } public void setAddDate(Date add_date) { this.add_date = add_date; } @Temporal(TemporalType.DATE) @Column(name = "modify_date") public Date getModifyDate() { return modify_date; } public void setModifyDate(Date modify_date) { this.modify_date = modify_date; } @Column(name = "ctx") public String getCtx() { return ctx; } public void setCtx(String ctx) { this.ctx = ctx; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "add_user_id") public User getAddUser() { return add_user; } public void setAddUser(User add_user) { this.add_user = add_user; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "modify_user_id") public User getModifyUser() { return modify_user; } public void setModifyUser(User modify_user) { this.modify_user = modify_user; } @Transient public String getCreateUserName() { return createUserName; } public void setCreateUserName(String createUserName) { this.createUserName = createUserName; } }

开始

插入测试1

代码操作:

将随机内容推特表的数据加载到内存中,然后一条条加入到推特表中,共10万条。

关键代码:

hibernate:

Java代码

Session session = factory.openSession(); session.beginTransaction(); Twitter t = null; Date now = new Date(); for(String materialTwitter : materialTwitters){ // System.out.println("materialTwitter="+materialTwitter); t = new Twitter(); t.setCtx(materialTwitter); t.setAddDate(now); t.setModifyDate(now); t.setAddUser(null); t.setModifyUser(null); session.save(t); } session.getTransaction().commit();

mybatis:

Java代码

Twitter t = null; Date now = new Date(); for(String materialTwitter : materialTwitters){ System.out.println("materialTwitter="+materialTwitter); t = new Twitter(); t.setCtx(materialTwitter); t.setAddDate(now); t.setModifyDate(now); t.setAddUser(null); t.setModifyUser(null); msession.insert("insertTwitter", t); } msession.commit();

TwitterMapper.xml,插入代码片段:

Xml代码

insert into twitter(ctx, add_date,modify_date) values (#{ctx},#{add_date},#{modify_date})

查询测试1

通过id从1递增到10万依次进行查询推特内容,仅输出微博内容。

关键代码:

hibernate:

Java代码

long cnt = 100000; for(long i = 1; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有