`

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里面的 两种查询

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

    六种方式实现hibernate查询

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

    Hibernate的高级查询

    在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了强大的对象关系映射(ORM)功能,使得在数据库操作上可以采用面向对象的方式。当我们需要进行更复杂的数据库查询时,Hibernate提供了丰富的...

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

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

    Java_Hibernate QBC条件查询对比

    本篇文章将深入探讨Hibernate中的QBC(Query By Example)条件查询与传统的HQL(Hibernate Query Language)查询的对比,帮助开发者更好地理解和选择适合的查询方式。 QBC(Query By Example)是Hibernate提供的一...

    hibernate查询详细代码讲解

    总的来说,HQL是Hibernate提供的强大工具,使得Java开发者能更自然地进行数据库查询,无需直接处理SQL,从而提高了开发效率和代码可读性。在实际项目中,熟练掌握HQL查询对于优化数据访问层的代码至关重要。通过不断...

    Hibernate进行数据查询

    例如,如果User类有一个Address类的属性,可以通过以下方式查询用户及其地址: ```java List<User> users = session.createQuery("from User u left join fetch u.address") .list(); ``` 8. **函数和聚合操作*...

    java后台开发Hibernate例子--登录查询

    注意,为了安全起见,实际项目中不应该直接在查询中比较明文密码,而是应该存储密码的哈希值,并在后端对比哈希值。此外,还可以考虑使用预编译的SQL语句(PreparedStatement)来防止SQL注入攻击。 在实际开发中,...

    Hibernate查询语言

    同时,我们还会讨论HQL与其他查询方式(如JPA的Criteria API、Native SQL)的比较,帮助开发者根据项目需求选择最适合的查询手段。 总的来说,掌握Hibernate查询语言是提升Java开发者数据库操作效率的关键步骤。...

    Hibernate与 MyBatis的比较

    标题中的“Hibernate与MyBatis的比较”是一个热门话题,主要关注的是两个Java持久层框架——Hibernate和MyBatis之间的差异、优缺点以及适用场景。这两个框架都是用于处理数据库操作,但它们的设计理念和使用方式有所...

    JDBC与Hibernate的比较

    本文将详细探讨两种常见的Java数据库访问方式:JDBC(Java Database Connectivity)与Hibernate,并从多个维度进行对比分析。 #### 一、简介 **JDBC**(Java Database Connectivity)是一种用于执行SQL语句的Java ...

    Hibernate-HQL-查询-Query资料

    在Hibernate中,HQL(Hibernate Query Language)是专为ORM设计的一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询,而不是直接使用SQL。本资料主要涵盖了Hibernate HQL查询的基本概念、语法以及...

    Hibernate中Example的用法

    Hibernate作为一款强大的ORM(对象关系映射)框架,提供了多种灵活的查询方式,其中`Example`查询是基于对象实例进行匹配查询的一种方法,它允许开发者通过提供一个实体类的实例来检索数据库中与该实例相似或相等的...

    Hibernate查询详解

    标题和描述均聚焦于“Hibernate查询详解”,这一主题在IT领域尤其是Java开发中至关重要,因为Hibernate作为一款流行的Java持久层框架,提供了丰富的查询机制,帮助开发者高效地与数据库交互。以下将深入探讨...

    hibernate查询

    通过深入理解和熟练运用Hibernate查询机制,可以大大提高Java应用程序的数据库操作效率和代码可维护性。无论是HQL还是Criteria API,都提供了灵活且强大的查询工具,使得开发者能够更加专注于业务逻辑的实现。

    小码哥Hibernate封装的查询方法的皮毛介绍共4页.p

    3. **Criteria查询**:Criteria API是Hibernate提供的动态查询方式,允许在运行时构建查询,无需预先定义HQL或SQL。开发者可以通过添加各种限制条件(如谓词、排序、分组等)来构建复杂的查询。 4. **HQL...

    hibernate in action 中文版书籍

    4. **查询语言HQL和 Criteria API**:介绍Hibernate查询语言HQL,它是面向对象的查询方式,与SQL相对应,同时讲解Criteria API,提供更动态、类型安全的查询方式。 5. ** Criteria和DetachedCriteria**:详细阐述...

    Hibernate完整使用教程

    Hibernate 和 JDBC 比较 Hibernate 和 JDBC 都是用于访问关系数据库的技术,但是它们之间有着本质的区别。JDBC 是一种低级别的数据库访问技术,它需要编写大量的代码来处理数据库交互。Hibernate 则是一种高级别的...

    基于hibernate的简单留言本

    6. ** Criteria 查询**: Hibernate提供了一种比SQL更面向对象的查询方式,Criteria API可以动态构建查询条件,更加灵活。 7. **事务(Transaction)**: 为了确保数据的一致性,Hibernate支持事务管理。在对数据库...

Global site tag (gtag.js) - Google Analytics