`

hibernate查询方式效率对比

 
阅读更多

http://blog.csdn.net/zhouxianli/archive/2010/01/25/5253063.aspx


查询已知表名的实体时推荐使用getHibernateTemplate().executeWithNativeSession() + SQLQuery方式。

以下测试使用JUnit进行,仅查询一次,查询结果为5条记录。各种方式的详细代码及执行时间如下所示:

方式1,正常getHibernateTemplate().find()方式(183ms):

view plaincopy to clipboardprint?
01.List list = getHibernateTemplate()  
02..find(  
03."select o.id from  SfmFileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime",  
04.new Object[] { bussNo, typePath, "1" }); 
List list = getHibernateTemplate()
.find(
"select o.id from  SfmFileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime",
new Object[] { bussNo, typePath, "1" });

方式2,使用getHibernateTemplate().execute() + Query方式(214ms):

view plaincopy to clipboardprint?
01.List list = (List) getHibernateTemplate().execute(  
02.        new HibernateCallback() {  
03.            public Object doInHibernate(Session session)  
04.                throws HibernateException, SQLException {  
05.                Query query = session.createQuery("select o.id from  SfmFileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");  
06.                query.setParameter(0, bussNo);  
07.                query.setParameter(1, typePath);  
08.                query.setParameter(2, "1");  
09.                return query.list();  
10.            }  
11.        }); 
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery("select o.id from  SfmFileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");
query.setParameter(0, bussNo);
query.setParameter(1, typePath);
query.setParameter(2, "1");
return query.list();
}
});

方式3,使用getHibernateTemplate().executeWithNativeSession() + Query方式(184ms):

view plaincopy to clipboardprint?
01.List list = (List) getHibernateTemplate().executeWithNativeSession(  
02.        new HibernateCallback() {  
03.            public Object doInHibernate(Session session)  
04.                    throws HibernateException, SQLException {  
05.                 Query query = session  
06.                        .createQuery("select o.id from  SfmFileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");  
07.                query.setParameter(0, bussNo);  
08.                query.setParameter(1, typePath);  
09.                query.setParameter(2, "1");  
10.                return query.list();  
11.            }  
12.        }); 
List list = (List) getHibernateTemplate().executeWithNativeSession(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session
.createQuery("select o.id from  SfmFileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");
query.setParameter(0, bussNo);
query.setParameter(1, typePath);
query.setParameter(2, "1");
return query.list();
}
});

方式4,使用getHibernateTemplate().execute() + SQLQuery方式(102ms):

view plaincopy to clipboardprint?
01.List list = (List) getHibernateTemplate().execute(  
02.            new HibernateCallback() {  
03.                        public Object doInHibernate(Session session)  
04.                                throws HibernateException, SQLException {  
05.                            SQLQuery query = session  
06.                                    .createSQLQuery("select o.id from  Sfm_FileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");  
07.                            query.setParameter(0, bussNo);  
08.                            query.setParameter(1, typePath);  
09.                            query.setParameter(2, "1");  
10.                            return query.list();  
11.                        }  
12.                    }); 
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery query = session
.createSQLQuery("select o.id from  Sfm_FileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");
query.setParameter(0, bussNo);
query.setParameter(1, typePath);
query.setParameter(2, "1");
return query.list();
}
});

方式5,使用getHibernateTemplate().executeWithNativeSession() + SQLQuery方式(68ms):

view plaincopy to clipboardprint?
01.List list = (List) getHibernateTemplate().executeWithNativeSession(  
02.        new HibernateCallback() {  
03.            public Object doInHibernate(Session session)  
04.                    throws HibernateException, SQLException {  
05.                SQLQuery query = session  
06.                        .createSQLQuery("select o.id from  Sfm_FileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");  
07.                query.setParameter(0, bussNo);  
08.                query.setParameter(1, typePath);  
09.                query.setParameter(2, "1");  
10.                return query.list();  
11.            }  
12.        }); 
List list = (List) getHibernateTemplate().executeWithNativeSession(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery query = session
.createSQLQuery("select o.id from  Sfm_FileIndex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");
query.setParameter(0, bussNo);
query.setParameter(1, typePath);
query.setParameter(2, "1");
return query.list();
}
});

方式6,使用JDBC (用于比较,代码不够健壮)(37ms):

view plaincopy to clipboardprint?
01.PreparedStatement ps = getSession()  
02..connection()  
03..prepareStatement(  
04."select o.id from sfm_fileindex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime");  
05.ps.setString(1, bussNo);  
06.ps.setString(2, typePath);  
07.ps.setString(3, "1");  
08.ResultSet rs = ps.executeQuery();  
09.List list = new ArrayList();  
10.while (rs.next()) {  
11.list.add(new Long(rs.getLong(1)));  
12.}  
13.rs.close();  
14.ps.close(); 



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhouxianli/archive/2010/01/25/5253063.aspx

分享到:
评论

相关推荐

    Hibernate3性能优化 Hibernate_regerence3.12

    有很多人认为Hibernate天生效率比较低,确实,在普遍情况下,需要将执行转换为SQL语句的 Hibernate 的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二...

    JPA JDBC hibernate mybatis对比

    JPA JDBC hibernate mybatis对比,里面从官方例子比较详细对比说明,从开发效率,crud执行效率等各种维度上做对比分析

    hibernate优化

    有很多人认为Hibernate天生效率比较低,确实,在普遍情况下,需要将执行转换为SQL语句的Hibernate的效率低于直接JDBC 存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的,特别是应用二级...

    hibernate 总结

    学习hibernate的一些总结,包括一些比较新的应用技术,帮助初学者快速上手,有助于提高效率

    J2EE架构数据表示:Struts+Hibernate

    JDO1.x还不能像Hibernate功能这样强大,PO不能脱离持久层,所以必须在业务层使用VO,因此必须在业务层进行大量的VO和PO的转化操作,相对于Hibernate来说,编程比较烦琐。 当然了,理论是一回事,实际操作也不一定非...

    办公系统源代码(sturts2,hibernate,mysql)

    因公司存档纸质审核流程比较多,电子记录以表格形式存在,长时间的记录导致后期管理查询统计比较麻烦,现开发档案管理系统主要实现对最终归档文件的管理,因此系统忽略中间的审核过程,只实现发档部门和归档部门两头...

    基于Struts和Hibernate软件架构实现基金管理信息系统

    火龙果软件工程技术中心 摘要本文详细介绍了当前流行的开源框架Struts...随着Web开发技术的日趋成熟,在Web开发领域出现了一些现成的优秀的框架,开发者可以直接使用它们,Struts与Hibernate就是两种比较成功的框架。S

    ssh(structs,spring,hibernate)框架中的上传下载

     您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为:  代码 1 领域对象Tfile 1. ...

    J2EE最新精品项目源码(Struts2.0+Hibernate+Spring+ExtJS)

    本项目为最近针对高等学校校友信息资源进行管理而设计开发、基本需求比较简单,主要涉及基本信息的管理与查询,该系统采用的开发框架: Struts2.0+Hibernate+Spring+Extjs 本系统具有非常友好的人机交互界面,数据...

    javaEE企业合同管理系统

    现在 很多国内的企业仍然在使用原始的方式 人工管理合同 这就导致了企业合同管理的效率比较低下 为了提高企业管理效率 企业合同管理系统也就应运而生了 本系统是基于Java EE的Struts2 Hibernate和Spring三大框架 ...

    Web开发+java+ssh框架

    三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而 不是Entity Bean的替代者出现的,让我再列一...

    ssh2(struts2+spring2.5+hibernate3.3)自动生成模版

    开发团队非常重要,作为一个开发团队,人员配备、开发效率等都非常重要,但是开发效率包含很多,如:代码质量(扩展性、重构性等),但是这些都是建立在规范的代码之上来进行,在一个团队中,每个开发者都有自己的习惯方式来...

    基于Hibernate的对象关系映射研究

    本文分析了基于Hibernate框架的两种对象关系映射策略,并比较了三种继承映射策略的优缺点,设计了一种基于Hibernate的ORM持久化层的系统架构,该架构结构清晰、开发效率高,具有较高的应用价值。

    学生成绩查询系统

    MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富...

    jpa复杂查询,映射DTO,自动映射无需关注类型,不用建构造函数

    jpa复杂查询,映射到具体的DTO上就比较复杂,需要类型完全匹配,还要求要建造构造函数,而且只能使用jpql查询,非常麻烦,querydsl也不方便,代码太长,后期维护的时候看上去也不直观。复杂sql还是采用原生sql比较...

    SSH2学生工作管理系统毕业论文源码

    目前提高应用系统开发效率的方法较多,其中比较成熟的技术有基于MVC模式的Struts技术、Spring技术和Hibernate技术,而将这3种技术有机结合起来构建SSH技术框架,不但可以有效提高系统开发效率,而且在系统安全性、...

    java常用lib库说明

    现在hibernate3中已经放弃了对dbcp的集成,我从hibernate的官方网站上看到hibernate的作者说这样做的原因是因为实践过程中发现dbcp不稳定,至于c3p0,我见过国外有几篇文章讲到它的效率不高,不过具体怎样,我没试过...

    SSH2学生工作管理系统 | 毕业设计

    目前提高应用系统开发效率的方法较多,其中比较成熟的技术有基于MVC模式的Struts技术、Spring技术和Hibernate技术,而将这3种技术有机结合起来构建SSH技术框架,不但可以有效提高系统开发效率,而且在系统安全性、...

    办公管理系统

    因公司存档纸质审核流程比较多,电子记录以表格形式存在,长时间的记录导致后期管理查询统计比较麻烦,现开发档案管理系统主要实现对最终归档文件的管理,因此系统忽略中间的审核过程,只实现发档部门和归档部门两头...

Global site tag (gtag.js) - Google Analytics