浏览 2300 次
锁定老帖子 主题:Hibernate二级缓存的使用
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-17
最后修改:2009-02-19
1.加入ehcase.xml文件;
2.在配置文件中加入如下代码: <!-- 启用二级缓存,默认是启用的 --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 指定缓存产品提供商 --> <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> zh package com.bjsxt.hibernate; import org.hibernate.CacheMode; import org.hibernate.Session; import org.hibernate.SessionFactory; import junit.framework.TestCase; /** * 测试二级缓存 * @author Administrator * */ public class CacheLevel2Test extends TestCase { /** * 开启二级缓存,开启两个session,分别调用load方法 */ public void testCache1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql,因为开启了二级缓存,session是共享二级缓存的 Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 开启二级缓存,开启两个session,分别调用get方法 */ public void testCache2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.get(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql,因为开启了二级缓存,session是共享二级缓存的 Student student = (Student)session.get(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 开启二级缓存,先调用load,再使用SessionFactory清除二级缓存 */ public void testCache3() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } //管理二级缓存 SessionFactory factory = HibernateUtils.getFactory(); //factory.evict(Student.class); factory.evict(Student.class, 1); try { session = HibernateUtils.getSession(); session.beginTransaction(); //会发出sql,因为二级缓存中的数据被清除了 Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 一级缓存和二级缓存的交互 */ public void testCache4() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //仅向二级缓存读数据,而不向二级缓存写数据 session.setCacheMode(CacheMode.GET); Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } try { session = HibernateUtils.getSession(); session.beginTransaction(); //指向二级缓存放数据,而不从二级缓存读数据 session.setCacheMode(CacheMode.PUT); //会发出sql,因为CacheMode设置为PUT,它不会读取二级缓存中的数据 Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |