1:配置spring 文件
在sessionfactiory的bean中加上如下配置
- < prop key = " hibernate .show_sql" > true </ prop >
- 打开二级缓存
- < prop key = " hibernate .cache.use_second_level_cache" > true </ prop >
- 指定二级缓存的外部程序我用的是ECACHE
- < prop key = " hibernate .cache.provider_class" > org.hibernate .cache.EhCacheProvider </ prop >
- 打开hibernate 的查询缓存
- < prop key = " hibernate .cache.use_query_cache" > true </ prop >
2配置要使用缓存的实体
< hibernate -mapping >
< class name = "com.tjsinfo.tjsoa.mail.vo.TjsEmailFolder" table = "TjsEmailFolder" schema = "tjsoadba" catalog = "TJSOA" >
关键是这里指定缓存的策略一般用读写就可以了,如果数据从不变化可以用只读
< cache usage = "read-write" > </ cache >
< id name = "folderId" type = "java.lang.Integer" >
< column name = "Folder_id" />
< generator class = "native" />
</ id >
</ class >
</ hibernate -mapping >
3定义ehcache.xml文件
< ehcache >
< diskStore path = "java.io.tmpdir"></ diskStore>
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120"
overflowToDisk="false" /></ehcache>
4执行相应的HQL语句,应当是第一次执行有SQL而第二次没有可是我试了一下还是有SQL说明查询缓存没用。我晕。
后来发现应当在调用查询的方法中的spring 的hibernate 模板设置打开查询缓存。
public List selectHql(String hql) {
// TODO Auto-generated method stub
getHibernateTemplate().setCacheQueries( true );
return getHibernateTemplate().find(hql);