查询缓存查找实体对象:
session.beginTransaction();
/**
* 如果查询的是实体对象,在查询缓存中缓存的是实体对象的ID列表,而实体对象本身被放到了二级缓存中,所以查询缓存需要配合二级缓存一起使用。
* 假如二级缓存没有启用,将导致即使是list操作也会发出n条查询语句去查询实体对象! */
String hql = "select p from Person p";
List persons = session.createQuery(hql)
.setCacheable(true) //允许查询缓存!
.list();
for (Iterator iterator = persons.iterator(); iterator.hasNext();) {
Person cp = (Person) iterator.next();
System.out.println(cp.getId()+","+cp.getName());
}
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
//session关闭之后,当前session对象中的一级缓存已经被清空
session.close();
}
Session session2 = HibernateUtil.openSession();
try{
session2.beginTransaction();
String hql = "select p from Person p";
List persons = session2.createQuery(hql)
.setCacheable(true) //允许查询缓存!
.list();
for (Iterator iterator = persons.iterator(); iterator.hasNext();) {
Person cp = (Person) iterator.next();
System.out.println(cp.getId()+","+cp.getName());
}
session2.getTransaction().commit();
本文介绍如何在Hibernate中利用查询缓存和二级缓存提高查询效率。通过设置查询语句允许使用缓存,并在两次会话间展示缓存的使用效果。

被折叠的 条评论
为什么被折叠?



