关于hibernate 使用效率的有关问题
关于hibernate 使用效率的问题
getHibernateTemplate().executeFind,session.createQuery,getHibernateTemplate().findByCriteria各有什么区别,哪个效率更好
------解决方案--------------------
使用效率主要是看SQL语句的,SQL写的不好,更牛的技术也是渣渣
------解决方案--------------------
模拟10万条数据,亲自测试下不就知道了。
------解决方案--------------------
帮顶
------解决方案--------------------
效率上没什么区别,有一点也是把hibernate的查询转换到sql的这个步骤,对程序的影响微乎其微,性能主要还是看数据库那边是否效率高,说到底还是数据库结构设计的问题。
getHibernateTemplate().executeFind,session.createQuery,getHibernateTemplate().findByCriteria各有什么区别,哪个效率更好
///////////////////////////第一种实现方式
public Entry getPreviousEntry(final String id) {
List entries = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery("from Entry entry where entry.postTime>(select current.postTime from Entry current where current.id=:id) and entry.entryStatus=:entryStatus and entry.type=:type order by entry.postTime asc");
query.setParameter("id", id);
query.setParameter("entryStatus", Entry.EntryStatus.PUBLISH);
query.setParameter("type", Entry.Type.POST);
query.setMaxResults(1);
return query.list();
}});
if(entries.isEmpty())
return null;
else
return (Entry)entries.get(0);
}
///////////////////////////第二种实现方式
public Entry getPreviousEntry(final String id) {
Query query = session.createQuery("from Entry entry where entry.postTime>(select current.postTime from Entry current where current.id=:id) and entry.entryStatus=:entryStatus and entry.type=:type order by entry.postTime asc");
query.setParameter("id", id);
query.setParameter("entryStatus", Entry.EntryStatus.PUBLISH);
query.setParameter("type", Entry.Type.POST);
query.setMaxResults(1);
Entry entry=null;
if(query1.iterate().hasNext())
entry=(Entry)query.iterate().next()
return entry;
}
这两种实现方式都能取得Entry ,第一种用了回调函数,第二种没有用,它们在功能和效率上有什么区别?哪个更好?
补充:
///////////////////////////第三种实现方式
public Entry getEntryByName(String name) {
DetachedCriteria criteria = DetachedCriteria.forClass(Entry.class);
criteria.add(Restrictions.eq("name", name));
List result = getHibernateTemplate().findByCriteria(criteria);
if(result.isEmpty())
return null;
else{
return (Entry)result.get(0);
}
}
这在效率和功能上又体现在哪?
上面三种,各有什么不同,哪一种实现方式更好,好在哪里?
很是困惑,谢谢各位请帮助我
------解决方案--------------------
使用效率主要是看SQL语句的,SQL写的不好,更牛的技术也是渣渣
------解决方案--------------------
模拟10万条数据,亲自测试下不就知道了。
------解决方案--------------------
帮顶
------解决方案--------------------
效率上没什么区别,有一点也是把hibernate的查询转换到sql的这个步骤,对程序的影响微乎其微,性能主要还是看数据库那边是否效率高,说到底还是数据库结构设计的问题。