配置一:
hibernate.cfg.xml文件中增加
org.hibernate.cache.EhCacheProvider
true
配置二:
工程项目src文件下新建一个ehcache.xml文件,其内容为
配置三:
为了缓存某类的对象,其hbm文件中需添加属性例如:
/p>
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
table="cdb_forums">
配置四:
为了使用查询缓存,Query必须设置cacheable为true,query.setCacheable(true);
例如dao父类中用于hql查询的方法修改后为:
/**
* 执行hql语句的查询
* @param sql
* @return
*/
public List executeQuery(String hql){
List list = new ArrayList();
Session session = HibernateSessionFactory.currentSession();
Transaction tx = null;
Query query = session.createQuery(hql);
query.setCacheable(true);
try {
tx = session.beginTransaction();
list = query.list();
tx.commit();
} catch (Exception ex) {
ex.printStackTrace();
HibernateSessionFactory.rollbackTransaction(tx);
} finally {
HibernateSessionFactory.closeSession();
}
return list;
}
实验结果:
补 充一下:当要缓存的对象处于级联关系中时。如果和他存在级联关系的对象都有属性 那么,在第一次get后该对象所处的对象图中的所有对象都会保存到hibernate的二级缓存中,在第二 次get该对象时,直接从二级缓存中找到所有级联的对象;如果其中某个级联对象没有属性,则不会被保存到二级缓存中,以后每次get时仍然会执行sql去数据库中找该级联对象。