hibernate-cache
hibernate缓存分:一级缓存、二级缓存、三级缓存
一级缓存:Session内的缓存
实例:
/*一级缓存: * session内的缓存 * */ @Test public void test1(){ /*使用缓存之前,2条结果*/ Session session =HibernateSessionFactory.getSession(); //第一次查询 Emp emp = (Emp) session.load(Emp.class, (short)7369); System.out.println(emp.getEname()+"\t"+emp.getDept().getDname()); session.close(); //同一个session内,再次获取ID为7639的员工 Emp emp2 = (Emp) session.load(Emp.class, (short)7369); System.out.println(emp2.getEname()+"\t"+emp2.getDept().getDname()); }
二级缓存:
进程 或集群范围内的缓存。可以被所有session共享,生活周期与SessionFactory一样,
* 二级缓存是可配置的插件,hibernate打包一些开源缓存实现,提供对它们的内置支持
用到的jar包和ehcache.xml
hibernate.cfg.xml配置:
<!--二级缓存配置开始==== --> <property name="cache.use_second_level_cache">true</property> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property>
实体类映射文件Emp.hbm.xml中配置:
<!-- 实体类中二级缓存配置--> <cache usage="read-write"/>
测试代码:
/*二级缓存: * 进程 或集群范围内的缓存。可以被所有session共享,生活周期与SessionFactory一样, * 二级缓存是可配置的插件,hibernate打包一些开源缓存实现,提供对它们的内置支持 * */ @Test public void test2(){ Session session=HibernateSessionFactory.getSession(); try { Emp emp = (Emp) session.load(Emp.class, (short)7369); System.out.println(emp.getEname()+"\t"+emp.getSal()); session.close(); Session session2=HibernateSessionFactory.getSession(); Emp emp2 = (Emp) session2.load(Emp.class, (short)7369); System.out.println(emp2.getEname()+"\t"+emp2.getSal()); session2.close(); } catch (Exception e) { e.printStackTrace(); } }
三级缓存,查询缓存:
hibernate.cfg.xml中配置,所有配置均在二级缓存配置之上加入:
<property name="cache.use_query_cache">true</property>
测试代码:
/*query查询缓存*/ @Test public void test3(){ Session session=HibernateSessionFactory.getSession(); Query query=session.createQuery("from Emp where empno=7369"); Emp emp = (Emp) query.setCacheable(true).uniqueResult(); System.out.println(emp.getEname()+"\t"+emp.getSal()); session.close(); //在不同的session范围内,现次获取ID=7369的学生信息 Session session2=HibernateSessionFactory.getSession(); Query query2=session.createQuery("from Emp where empno=7369"); Emp emp2 = (Emp) query.setCacheable(true).uniqueResult(); System.out.println(emp2.getEname()+"\t"+emp2.getSal()); }
链接:http://pan.baidu.com/s/1geVPuoV 密码:s3sh
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
本文版权归作者和博客园共有,欢迎转载