配置1 :
添加到hibernate.cfg.xml文件
org.hibernate.cache.ehcache provider
真的
配置2 :
在项目src文件下创建新的ehcache.xml文件。 内容如下
配置3 :
要缓存对象的类,必须在hbm文件中添加以下属性:
/p
' http://hibernate.SourceForge.net/hibernate-mapping-3.0.dtd '
table='cdb_forums '
配置4 :
要使用查询缓存,Query必须将cacheable设置为true,query.setCacheable(true )。
例如,如果在dao的父类中更改用于hql查询的方法,则:
//*
对hql语句执行查询
* @param sql
* @return
*/
Publiclistexecutequery{
列表列表=new ArrayList (;
session session=hibernatesessionfactory.currentsession (;
传输tx=null;
查询查询=session.create query (hql );
query.set cacheable (真;
try {
tx=session.beginTransaction (;
list=query.list (;
tx.commit (;
}catch(exceptionex ) {
ex.printStackTrace (;
hibernatesessionfactory.roll back传输(tx;
} finally {
hibernatesessionfactory.close session (;
}
返回列表;
}
实验结果:
补充信息:如果要缓存的对象是级联关系。 如果与他具有级联关系的对象具有属性,则在第一个get之后,该对象所在的对象地图中的所有对象都将存储在hibernate的辅助缓存中,并在第二个get时从辅助缓存中提取所有级联如果其中一个级联对象没有属性,则它不会存储在辅助缓存中,并且以后每次获取时都会执行sql以在数据库中搜索级联对象。