1、首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:Java代码 1. <?xml version="1.0" encoding="UTF-8"?> 2. <ehcache> 3. <diskStore path="java.io.tmpdir"/> 4. <defaultCache 5. maxElementsInMemory="10000" <!-- 缓存最大数目 --> 6. eternal="false" <!-- 缓存是否持久 --> 7. overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时--> 8. timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 --> 9. timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁--> 10. diskPersistent="false" 11. diskExpiryThreadIntervalSeconds= "120"/> 12. </ehcache> <?xml version="1.0" encoding="UTF-8"?><ehcache><diskStore path="java.io.tmpdir"/> <defaultCachemaxElementsInMemory="10000" <!-- 缓存最大数目 -->eternal="false" <!-- 缓存是否持久 -->overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->diskPersistent="false"diskExpiryThreadIntervalSeconds= "120"/> </ehcache>2、在Hibernate配置文件中设置:Java代码 1. <!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 --> 2. <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 3. <!-- 是否使用查询缓存 --> 4. <property name="hibernate.cache.use_query_cache">true</property> 5. 如果使用spring调用Hibernate的sessionFactory的话,这样设置: 6. <!--HibernateSession工厂管理 --> 7. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 8. <property name="dataSource"> 9. <ref bean="datasource" /> 10. </property> 11. <property name="hibernateProperties"> 12. <props> 13. <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> 14. <prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop> 15. <prop key="hibernate.show_sql">true</prop> 16. <prop key="hibernate.cache.use_query_cache">true</prop> 17. <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> 18. </props> 19. </property> 20. <property name="mappingDirectoryLocations"> 21. <list> 22. <value>/WEB-INF/classes/cn/rmic/manager/hibernate/</value> 23. </list> 24. </property> 25. </bean> <!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 --><property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <!-- 是否使用查询缓存 --><property name="hibernate.cache.use_query_cache">true</property>如果使用spring调用Hibernate的sessionFactory的话,这样设置:<!--HibernateSession工厂管理 --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="datasource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop><prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.cache.use_query_cache">true</prop><prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop></props></property><property name="mappingDirectoryLocations"><list><value>/WEB-INF/classes/cn/rmic/manager/hibernate/</value></list></property> </bean>说明一下:如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、 list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置hibernate.cache.use_query_cache true 才行3、在Hbm文件中添加<cache usage="read-only"/>4、如果需要“查询缓存”,还需要在使用Query或Criteria()时设置其setCacheable(true);属性5、实践出真知,给一段测试程序,如果成功的话第二次查询时不会读取数据库Java代码 1. package cn.rmic.hibernatesample; 2. 3. import java.util.List; 4. 5. import org.hibernate.CacheMode; 6. import org.hibernate.Criteria; 7. import org.hibernate.Query; 8. import org.hibernate.Session; 9. 10. import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory; 11. import cn.rmic.manager.po.Resources; 12. 13. public class testCacheSelectList ...{ 14. 15. /** *//** 16. * @param args 17. */ 18. public static void main(String[] args) ...{ 19. // TODO Auto-generated method stub 20. 21. Session s=HibernateSessionFactory.getSession(); 22. Criteria c=s.createCriteria(Resources.class); 23. c.setCacheable(true); 24. List l=c.list(); 25. // Query q=s.createQuery("From Resources r") 26. // .setCacheable(true) 27. // .setCacheRegion("frontpages") ; 28. // List l=q.list(); 29. Resources resources=(Resources)l.get(0); 30. System.out.println("-1-"+resources.getName()); 31. HibernateSessionFactory.closeSession(); 32. try ...{ 33. Thread.sleep(5000); 34. } catch (InterruptedException e) ...{ 35. // TODO Auto-generated catch block 36. e.printStackTrace(); 37. } 38. s=HibernateSessionFactory.getSession(); 39. c=s.createCriteria(Resources.class); 40. c.setCacheable(true); 41. l=c.list(); 42. // q=s.createQuery("From Resources r").setCacheable(true) 43. // .setCacheRegion("frontpages"); 44. // l=q.list(); 45. resources=(Resources)l.get(0); 46. System.out.println("-2-"+resources.getName()); 47. HibernateSessionFactory.closeSession(); 48. } 49. } package cn.rmic.hibernatesample;import java.util.List;import org.hibernate.CacheMode;import org.hibernate.Criteria;import org.hibernate.Query;import org.hibernate.Session;import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory;import cn.rmic.manager.po.Resources;public class testCacheSelectList ...{/** *//*** @param args*/public static void main(String[] args) ...{// TODO Auto-generated method stubSession s=HibernateSessionFactory.getSession();Criteria c=s.createCriteria(Resources.class);c.setCacheable(true);List l=c.list();// Query q=s.createQuery("From Resources r")// .setCacheable(true) // .setCacheRegion("frontpages") ;// List l=q.list();Resources resources=(Resources)l.get(0);System.out.println("-1-"+resources.getName());HibernateSessionFactory.closeSession();try ...{Thread.sleep(5000);} catch (InterruptedException e) ...{// TODO Auto-generated catch blocke.printStackTrace();}s=HibernateSessionFactory.getSession();c=s.createCriteria(Resources.class);c.setCacheable(true);l=c.list();// q=s.createQuery("From Resources r").setCacheable(true) // .setCacheRegion("frontpages");// l=q.list();resources=(Resources)l.get(0);System.out.println("-2-"+resources.getName());HibernateSessionFactory.closeSession();}}
相关资源:敏捷开发V1.0.pptx