标签:
1.基本概念
2.特点
3.配置步骤(hibernate.cfg.xml)
指定二级缓存的供应商 <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> 开启二级缓存 property name="cache.use_second_level_cache">true</property> 开启hibernate的统计机制 <property name="hibernate.generate_statistics">true</property> 指针某一个类开启二级缓存(在对象映射文件中配置) <class name="com.sn.domain.Classes"> <cache usage="read-only"/>
4.放入二级缓存
/** * session.get方法不仅要把对象放入到一级缓存,而且放入到二级缓存 */ @Test public void test2(){ Session session = sessionFactory.openSession(); Classes classes = (Classes) session.get(Classes.class, 1L); session.close(); session = sessionFactory.openSession(); Classes classes2 = (Classes) session.get(Classes.class, 1L); //不打印sql语句 System.out.println(session.getStatistics().getEntityCount()); //1 System.out.println(sessionFactory.getStatistics().getEntityLoadCount()); //1 session.close(); } /** * session.save() 只操作一级缓存,没有操作二级缓存 * session.update() 同上 */ @Test public void test3(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Classes classes = new Classes(); classes.setName("aaaa"); classes.setDescription("aaaaaaaa"); session.save(classes); System.out.println(session.getStatistics().getEntityCount()); //1 System.out.println(sessionFactory.getStatistics().getEntityLoadCount()); //0 transaction.commit(); session.close(); } /** * session.createQuery("from Classes").list()该方法可以把一些对象放入到二级缓存中 */ @Test public void test4(){ Session session = sessionFactory.openSession(); session.createQuery("from Classes").list(); System.out.println(session.getStatistics().getEntityCount()); //1 System.out.println(sessionFactory.getStatistics().getEntityLoadCount()); //0 session.close(); }
5.缓存到磁盘
在根目录添加 ehcache.xml文件
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <diskStore path="e:\\TEMP1"/> <defaultCache maxElementsInMemory="12" //内存中存放对象最大的个数 eternal="false" timeToIdleSeconds="1200" timeToLiveSeconds="1200" overflowToDisk="false" //如果内存中的对象超过最大个数,是否缓存到磁盘上 maxElementsOnDisk="10000000" //磁盘上能够缓存的最大对象个数 diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> <Cache name="com.sn.domain.Classes" maxElementsInMemory="3" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> </ehcache>
测试:
@Test public void test1() throws InterruptedException{ Session session = sessionFactory.openSession(); session.createQuery("from Classes").list(); System.out.println(sessionFactory.getStatistics().getEntityLoadCount()); session.close(); Thread.sleep(1000L); }
在E盘下产生TEMP1文件夹,里面保存着缓存数据
标签:
原文地址:http://www.cnblogs.com/jsnan/p/4532507.html