`

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
分享到:
评论

相关推荐

    Hibernate的查询方式

    ### Hibernate的查询方式详解 #### 引言 Hibernate作为Java领域中最流行的ORM(Object-Relational Mapping)框架之一,提供了一系列高效、灵活的查询机制,旨在桥接对象模型与关系数据库之间的鸿沟。本文将深入...

    Hibernate查询方式代码示例

    **Hibernate查询方式详解** 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query ...

    通用的hibernate查询

    总结来说,Hibernate通过Criteria、HQL和Query API提供了丰富的查询机制,满足了各种数据库操作需求。而分页查询是大数据量场景下的常用策略,Hibernate提供了简单的API来实现。理解并熟练掌握这些查询方式,将有助...

    Hibernate连表查询 Hibernate连表查询

    根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...

    hibernate查询方法

    Hibernate提供的各种查询方法各有优势,可以根据实际需求和项目规模选择合适的方式。HQL适用于简单的查询,Criteria API和DetachedCriteria适合构建复杂条件,Native SQL则在处理特定数据库功能时不可或缺。理解并...

    Hibernate_query查询数据表中的一个字段.

    总结,Hibernate提供多种方式查询数据表中的字段,包括HQL、Criteria API和DetachedCriteria,选择合适的方法取决于具体需求。正确理解和使用Hibernate,能够大大提高Java开发中的数据库操作效率。

    超好用的hibernate查询工具类

    本篇将详细讲解一个“超好用的Hibernate查询工具类”,以及如何利用它来提升开发效率。 首先,我们需要理解Hibernate的基本概念。Hibernate是一种持久化框架,它可以将Java对象映射到数据库表,从而避免了编写大量...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    本篇文章将详细解析Hibernate中的几种主要查询方式,包括联表查询、分页查询、位置参数查询、占位符查询(冒号查询)以及统计查询,这些都是在实际开发中非常常见的需求。 首先,我们来看**联表查询**。在Hibernate...

    hibernate里面的 两种查询

    在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API...理解并熟练掌握这两种查询方式,将有助于提升Hibernate的使用效率和代码质量。

    hibernate实现动态SQL查询

    在Hibernate中,我们通常使用HQL(Hibernate Query Language)或Criteria API进行查询,但这些方式并不支持复杂的动态查询。为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,...

    六种方式实现hibernate查询

    六种方式实现Hibernate查询 Hibernate是一个功能强大的持久层框架,它提供了多种方式来查询数据库。下面我们将详细介绍六种方式实现Hibernate...我们可以根据实际情况选择合适的查询方式,以提高开发效率和查询性能。

    Hibernate的高级查询

    HQL支持各种复杂的查询,如连接查询、分组查询、子查询等。例如,我们可以用以下HQL语句查询所有未删除的用户: ```java String hql = "from User u where u.deleted = false"; Query<User> query = session....

    Hibernate的MySql查询.rar

    总的来说,Hibernate通过其强大的ORM能力简化了Java与MySQL数据库的交互,提供了丰富的查询方式和事务管理机制,极大地提高了开发效率。掌握这些核心知识点,对于提升JavaEE项目的开发质量与效率有着重要作用。希望...

    hibernate查询代码

    最后,`hibernate查询`这个压缩包可能包含了一些示例代码和配置文件,用于演示如何在Java项目中实现上述查询方式。通过分析这些文件,你可以更好地理解Hibernate查询的工作原理,并将其应用到自己的项目中。 总之,...

    hibernate 查询?Hibernate的HQL查询

    【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生SQL查询。其中,HQL作为官方推荐的查询方式,具有...

    hibernate 模糊查询 分页

    本篇文章将深入探讨如何使用Hibernate实现模糊查询和分页功能,这对于任何需要处理大量数据的应用程序来说都是至关重要的技能。 首先,让我们了解Hibernate的核心概念。Hibernate是一个开源的JPA(Java Persistence...

    Hibernate分页查询原理解读

    本文将深入探讨Hibernate如何实现分页查询,并分析不同数据库方言下的具体实现方式。 #### 二、Hibernate 分页查询概述 Hibernate提供了两种基本的分页查询方法: 1. **基于SQL LIMIT关键字的分页**:这种方式适用...

    Hibernate 多表连接分页查询示范项目

    Hibernate 支持多种方式来实现多表连接查询,包括 HQL(Hibernate Query Language)和 Criteria 查询。本项目主要关注 Criteria API 的使用,这是一种基于 Java 对象的查询方式,更加灵活且易于理解和维护。 **...

    Hibernate 函数 ,子查询 和原生SQL查询

    虽然Hibernate提供了ORM的方式,但有时我们可能需要使用原生的SQL查询来访问数据库,尤其是当ORM无法满足复杂需求时。在Hibernate中,可以通过以下方式执行原生SQL: 1. `Session.createSQLQuery(sql)`:创建一个...

Global site tag (gtag.js) - Google Analytics