Hibernate查询的各种方式效率比较
2012-08-28 17:16
357 查看
查询已知表名的实体时推荐使用getHibernateTemplate().executeWithNativeSession() + SQLQuery方式。
以下测试使用JUnit进行,仅查询一次,查询结果为5条记录。各种方式的详细代码及执行时间如下所示:
方式1,正常getHibernateTemplate().find()方式(183ms):
[java]
view plaincopyprint?
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" });
方式3,使用getHibernateTemplate().executeWithNativeSession() + Query方式(184ms):
[java]
view plaincopyprint?
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();
}
});
方式5,使用getHibernateTemplate().executeWithNativeSession() + SQLQuery方式(68ms):
[c-sharp]
view plaincopyprint?
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();
}
});
以下测试使用JUnit进行,仅查询一次,查询结果为5条记录。各种方式的详细代码及执行时间如下所示:
方式1,正常getHibernateTemplate().find()方式(183ms):
[java]
view plaincopyprint?
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" });
[java] view plaincopyprint? 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(); } }); 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):
[java]
view plaincopyprint?
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();
}
});
[java] view plaincopyprint? 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(); } }); 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):
[c-sharp]
view plaincopyprint?
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();
}
});
[java] view plaincopyprint? PreparedStatement ps = getSession() .connection() .prepareStatement( "select o.id from sfm_fileindex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime"); ps.setString(1, bussNo); ps.setString(2, typePath); ps.setString(3, "1"); ResultSet rs = ps.executeQuery(); List list = new ArrayList(); while (rs.next()) { list.add(new Long(rs.getLong(1))); } rs.close(); ps.close(); PreparedStatement ps = getSession() .connection() .prepareStatement( "select o.id from sfm_fileindex o where o.bussNo = ? and o.typePath = ? and o.validStatus = ? order by o.uploadTime"); ps.setString(1, bussNo); ps.setString(2, typePath); ps.setString(3, "1"); ResultSet rs = ps.executeQuery(); List list = new ArrayList(); while (rs.next()) { list.add(new Long(rs.getLong(1))); } rs.close(); ps.close();
相关文章推荐
- Hibernate查询的各种方式效率比较
- Hibernate查询的各种方式效率比较
- Hibernate查询的各种方式效率比较
- Redis查询&JDBC查询&Hibernate查询方式的效率比较...
- JDBC获取SQL查询语句返回记录数的三种方式效率比较
- Hibernate学习-4-各种查询方式
- mongoDB各种查询方式执行效率测试
- 各种排序查询的算法效率比较
- jQuery各种获取元素的方式效率比较
- Hibernate各种查询方式及查询策略
- JDBC获取SQL查询语句返回记录数的三种方式效率比较
- 简单变量加1各种方式效率比较
- Hibernate查询方式l比较
- Hibernate提供的各种查询方式
- hibernate六种查询方式比较
- Hibernate查询方式比较
- 抛砖引玉:MySQL数据库中,在Spring+Hibernate条件下,比较like和=查询日期的效率
- 各种解析xml方式的效率比较
- Hibernate 查询方式比较与用法
- 关于使用lazytag线段树两种查询方式的比较研究