`
alfredgao
  • 浏览: 134630 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Hibernate与Jdbc的效率测试

阅读更多

首先,建数据库表,采用MySQL数据库。

CREATE TABLE `t_jobstat` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `jobNo` varchar(45) DEFAULT NULL,
  `clickSum` int(10) unsigned DEFAULT NULL,
  `showSum` int(10) unsigned DEFAULT NULL,
  `mailSum` int(10) unsigned DEFAULT NULL,
  `locationid` varchar(10) DEFAULT NULL,
  `logdate` char(8) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7320077 DEFAULT CHARSET=gbk MAX_ROWS=500000000;

其次,插入大批量数据,本次测试,插入730万条数据。

 

一.Jdbc测试

主要方法如下:

1.数据访问层

    /**
	 * 检索前1000条记录
	 * @return
	 * @throws SQLException
	 */
	public List<Jobstat> findAll() throws SQLException {
		String sql = "select * from t_jobstat where locationid like '%530%' limit 0,1000 ";

		// 执行查询
		ps = conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();

		// 将查询结果组装至Asset实体对象
		Jobstat jobstat = null;
		List<Jobstat> list = new ArrayList<Jobstat>();
		
		while (rs.next()) {
			jobstat = new Jobstat();
			jobstat.setId(rs.getInt("id"));
			jobstat.setJobNo(rs.getString("jobNo"));
			jobstat.setClickSum(rs.getInt("clickSum"));
			jobstat.setShowSum(rs.getInt("showSum"));
			jobstat.setMailSum(rs.getInt("mailSum"));
			jobstat.setLocationId(rs.getString("locationId"));
			jobstat.setLogdate(rs.getString("logdate"));
			list.add(jobstat);
			jobstat = null;
		}
		
		return list;
	}

2.Action层

  

             /**
	 * 检索前1000条记录
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	public ActionForward findTop(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception{

    	JobstatDAO dao = new JobstatDAO();
    	long start = System.currentTimeMillis();
        List<Jobstat>list = dao.findAll();
        request.setAttribute("results", list);
        long end = System.currentTimeMillis();
        System.out.println("取出前1000条数据组装为对象,花费时间为"+(end-start)+"ms");
        return mapping.findForward("top");
}

 3.我们打开一个测试页面,http://localhost:8080/jdbctest/jobstat.do?p=findTop

 然后将默认浏览器设为能打开多Tab页的遨游,狂点测试页,最后数据取出速度稳定在16ms左右。

 

二.Hibernate  Test

1.DAO访问层

	public static void main(String[] args) throws UnsupportedEncodingException{
		session = HibernateUtil.currentSession(); // 开启连接
		long start = System.currentTimeMillis();
		String queryString = "from Jobstat as js";
		Query queryObject = session.createQuery(queryString);
		int pageNo =0;
		pageNo = new Random().nextInt(10);
     queryObject.setFirstResult(1000*pageNo);
     queryObject.setMaxResults(1000*(pageNo+1));
     List list = queryObject.list();
     long end = System.currentTimeMillis();
     System.out.println("随机取出前1000条数据组装为对象,花费时间为"+(end-start)+"ms");
	}

2进行数据量测试,当数据库中未建主键测试中,取出1000条数据花费时间为680ms,当主键索引存在后,取出1000条数据花费时间为530ms

 

综上测试,

 Hibernate作为一个O/R Mapping,比JDBC具备的优势有:

1.编程思想上,更加符合人的逻辑思维习惯,面向对象比面向过程更加容易理解,测试和维护

2.开发维护速度上,Hibernate显著的快,代码量显著小

3.通过Annotation进行数据库的字段加密

4.对Sql不熟的菜鸟来说可以自动调优

5.结合Spring,通过声明式事务可以省略事务的控制,事务以横切面形式出现

 

Jdbc比Hibernate具备的优势有:

1.大数据量访问时,Jdbc的效率显著快

2.直接操作数据库比较灵活

 

Hibernate比Jdbc慢的地方:

1.将Hql语句转化为标准Sql语句,花费时间可以忽略不急

2.将ResultSet中数据组装为实体对象,如果即所得数据量比较大(比如一次检索1000条数据),这是效率就会降低,在组装实体对象花费时间较长

 

检索单表的1000条数据,Hibernate与Jdbc均不会超过1S钟.

 

分享到:
评论
6 楼 rainerWJY 2008-09-04  
alfredgao 写道
@rainerWJY
jdbc也会去封装的 cache不是只有hibernate有

对,这位仁兄说的很对,Jdbc的封装除了手动封装之外,还可以通过其他工具类进行反射封装,目的就在与测试反射装配实体Bean的效率如何。
Cache的确其他的O/R mapping有。

@sinostone
这完全要看项目要求了

赞同,感觉数量访问不是很大的都可以使用Hibernate提高开发效率;而Jdbc则适合做数据量交互大的系统。

@laiseeme
这个貌似每隔一段时间就有人发hibernate贴证明他性能低下的

Hibernate确实相较于Jdbc有性能方面的损失,做测试的目的是明确技术的适用范围。

@lzmhehe
还在做这种测试,有何意义

请问这位仁兄如何进行技术选型?


最近在看cglib 目前来说这种实现必然是最快的,他等于用java的方法从新模拟了整个调用javaclass的过程,自然是想cache哪儿就cache哪儿,还能动态添加方法等,无他。这个最快。
你做orMapping 想要速度必然是cglib。cache选型就很多了。hibernate并不一定适合所有应用
5 楼 alfredgao 2008-09-04  
@rainerWJY
jdbc也会去封装的 cache不是只有hibernate有

对,这位仁兄说的很对,Jdbc的封装除了手动封装之外,还可以通过其他工具类进行反射封装,目的就在与测试反射装配实体Bean的效率如何。
Cache的确其他的O/R mapping有。

@sinostone
这完全要看项目要求了

赞同,感觉数量访问不是很大的都可以使用Hibernate提高开发效率;而Jdbc则适合做数据量交互大的系统。

@laiseeme
这个貌似每隔一段时间就有人发hibernate贴证明他性能低下的

Hibernate确实相较于Jdbc有性能方面的损失,做测试的目的是明确技术的适用范围。

@lzmhehe
还在做这种测试,有何意义

请问这位仁兄如何进行技术选型?
4 楼 lzmhehe 2008-09-04  
还在做这种测试,有何意义
3 楼 laiseeme 2008-09-04  
这个貌似每隔一段时间就有人发hibernate贴证明他性能低下的
2 楼 sinostone 2008-09-04  
这完全要看项目要求了
1 楼 rainerWJY 2008-09-04  
没什么意义的测试
jdbc也会去封装的 cache不是只有hibernate有

相关推荐

    Hibernate+中文文档

    1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2...

    hibernate3.2中文文档(chm格式)

    1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2...

    HibernateAPI中文版.chm

    1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2...

    hibernate 体系结构与配置 参考文档(html)

    部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2...

    Hibernate中文详细学习文档

    1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2...

    Hibernate 中文 html 帮助文档

    1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得...

    Hibernate参考文档

    1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得...

    基于SpringBoot+Hibernate+Shiro的库存管理系统+源代码+文档说明

    * 数据持久层使用SpringBoot自带的Hibernate来维护PO(Persistent Object持久化对象),这里使用Hibernate的原因在于其三种对象状态(持久态、游离态、分割态)便于持久化对象的增删改查等一系列操作,取代了jdbc的...

    JSP+SQL房屋租赁管理信息系统JDBC(源代码+lw).zip

    在项目中,Spring框架提供了依赖注入和面向切面编程的功能,可以提高代码的可维护性和可测试性。SpringMVC负责处理请求和响应,可以实现灵活的URL映射和请求处理。MyBatis或Hibernate可以简化数据库操作,提供了方便...

    myeclipse.exe

    MyEclipse可以支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

    Myeclipse+sqlserver配置安装录像

    MyEclipse企业级工作...MyEclipse可以支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具

    myeclipse2017

    MyEclipse可以支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

    mysql三种批量增加的性能分析

    最近在深入学习hibernate,在进行批量操作时,发现...于是就想找一个性能较高的方法,在对jdbc、jdbcTemplate、hibernate进行测试后,发现jdbc的执行效率是最高的,jdbcTemplate也很相近,hibernate就不考虑了,惨不忍睹啊

    最新myeclipse10中文版下载地址与汉化2013、注册码、破解包(汉化包2013更新)

    MyEclipse目前支持Java Servlet, AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。 MyEclipse 10 使用高级...

    FastBuilder:FastBuilder是一个快速开发以及高性能,高扩展性的ORM框架,灵活支持多数据库切换,读写分离,同时支持Mysql和Oracle数据库, 并且上手快,在DAO层开发效率节约50%以上, 欢迎加入FastBuilder技术交流群:236719790

    性能测试,根据网友对其它持久层框架(SpringJDBC,Mybatis,Hibernate)的测试,1万条数据查询前1000条数据(网友测试),并循环执行求平均时间。 同样的测试方式,FastBuilder使用20万条数据查询前1000条数据(20倍的数据...

    woss电信计费项目

    电信采集系统: (理解) 1.adsl拨号 (操作) 2.... 1.... 备份(一旦有上线或者下线,就向日志文件写入一条数据... (jdbc hibernate) 6.要注意对事务的把握 7.Thread的把握 8.效率 9.边写边测试 备份:backup

    基于 JSP 的图书管理系统毕业设计论文

    随着科学技术的进步和计算机行业的迅速发展,人们的工作效率得到大大提 高。计算机信息处理系统的引进已彻底改变了许多系统的经营管理。 图书管理系统是学校管理机制中的重要组成部分,通过对图书馆管理系统的 运行...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    而CGI效率相对较低,所以也不考虑。由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为...

    myeclipse 10最新中文包-一分钟汉化

    深圳电信培训中心 徐海蛟...MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

Global site tag (gtag.js) - Google Analytics