前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate的二级缓存

Hibernate的二级缓存

作者头像
Hongten
发布2018-09-18 10:01:15
4500
发布2018-09-18 10:01:15
举报
文章被收录于专栏:HongtenHongten

HibernateTest.java

代码:

/**  *  */ package com.b510.examplex;

import org.hibernate.Session;

/**  *  * @author XHW  *  * @date 2011-7-15  *  */ public class HibernateTest {

 /**   * @param args   */  public static void main(String[] args) {   new HibernateTest().getGuestbooks();  }

 public void getGuestbooks(){   Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();   session.beginTransaction();   Guestbook gb=(Guestbook)session.get(Guestbook.class, 2);   //移除gb的缓存   session.evict(gb);    Guestbook gb2=(Guestbook)session.get(Guestbook.class, 2);      System.out.println(gb==gb2);   session.getTransaction().commit();

 }

}

运行效果:

首先查出gb对象的数据,放入缓存中,当执行session.evict(gb);语句时,就会把

缓存中的数据移除掉。

这次要查gb2对象的数据,就得从新生成一条select语句。

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate:     select         guestbook0_.id as id0_0_,         guestbook0_.version as version0_0_,         guestbook0_.name as name0_0_,         guestbook0_.email as email0_0_,         guestbook0_.phone as phone0_0_,         guestbook0_.title as title0_0_,         guestbook0_.content as content0_0_,         guestbook0_.created_time as created8_0_0_     from         users.guestbook guestbook0_     where         guestbook0_.id=? Hibernate:     select         guestbook0_.id as id0_0_,         guestbook0_.version as version0_0_,         guestbook0_.name as name0_0_,         guestbook0_.email as email0_0_,         guestbook0_.phone as phone0_0_,         guestbook0_.title as title0_0_,         guestbook0_.content as content0_0_,         guestbook0_.created_time as created8_0_0_     from         users.guestbook guestbook0_     where         guestbook0_.id=? false

测试二:

HIbernateTest.java

代码:

/**  *  */ package com.b510.examplex;

import org.hibernate.Session;

/**  *  * @author XHW  *  * @date 2011-7-15  *  */ public class HibernateTest {

 /**   * @param args   */  public static void main(String[] args) {   new HibernateTest().getGuestbooks();  }

 public void getGuestbooks(){   Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();   session.beginTransaction();   Guestbook gb=(Guestbook)session.get(Guestbook.class, 2);   Guestbook gb2=(Guestbook)session.get(Guestbook.class, 3);      //清楚缓存,把缓存中的所有东西都给干掉,不留下任何东西   session.clear();   Guestbook gb3=(Guestbook)session.get(Guestbook.class, 2);   Guestbook gb4=(Guestbook)session.get(Guestbook.class, 3);    System.out.println(gb==gb3);   System.out.println(gb2==gb4);   session.getTransaction().commit();

 }

}

运行效果:

我们看到session.clear();的执行效果果然是“心狠手辣”,不让敌人有丝毫反抗的有生力量……

这个方法会让缓存中的所有东西清除的干干净净。通通的,大大的,全部干掉的……

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate:     select         guestbook0_.id as id0_0_,         guestbook0_.version as version0_0_,         guestbook0_.name as name0_0_,         guestbook0_.email as email0_0_,         guestbook0_.phone as phone0_0_,         guestbook0_.title as title0_0_,         guestbook0_.content as content0_0_,         guestbook0_.created_time as created8_0_0_     from         users.guestbook guestbook0_     where         guestbook0_.id=? Hibernate:     select         guestbook0_.id as id0_0_,         guestbook0_.version as version0_0_,         guestbook0_.name as name0_0_,         guestbook0_.email as email0_0_,         guestbook0_.phone as phone0_0_,         guestbook0_.title as title0_0_,         guestbook0_.content as content0_0_,         guestbook0_.created_time as created8_0_0_     from         users.guestbook guestbook0_     where         guestbook0_.id=? Hibernate:     select         guestbook0_.id as id0_0_,         guestbook0_.version as version0_0_,         guestbook0_.name as name0_0_,         guestbook0_.email as email0_0_,         guestbook0_.phone as phone0_0_,         guestbook0_.title as title0_0_,         guestbook0_.content as content0_0_,         guestbook0_.created_time as created8_0_0_     from         users.guestbook guestbook0_     where         guestbook0_.id=? Hibernate:     select         guestbook0_.id as id0_0_,         guestbook0_.version as version0_0_,         guestbook0_.name as name0_0_,         guestbook0_.email as email0_0_,         guestbook0_.phone as phone0_0_,         guestbook0_.title as title0_0_,         guestbook0_.content as content0_0_,         guestbook0_.created_time as created8_0_0_     from         users.guestbook guestbook0_     where         guestbook0_.id=? false false

测试三:

HibernateTest.java

代码:

/**  *  */ package com.b510.examplex;

import org.hibernate.Session;

/**  *  * @author XHW  *  * @date 2011-7-15  *  */ public class HibernateTest {

 /**   * @param args   */  public static void main(String[] args) {   new HibernateTest().test();  }

 public void test(){   Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();   session.beginTransaction();   Guestbook gb=(Guestbook)session.get(Guestbook.class, 2);   Guestbook gb2=(Guestbook)session.get(Guestbook.class, 3);   //移除干净缓存中的数据   session.clear();    //判断gb2对象的是否在缓存中   System.out.println(session.contains(gb2));

//session.flush();              session刷新

//session.close();              session关闭

说明一下,在session执行下面的commit()方法后,会自动调用

flush()方法和close()方法。这两步是隐含在里面,所以不用显示出来

都是可以的。   session.getTransaction().commit();

 }

}

运行效果:

session.contains(gb2);返回的是一个boolean值,判断缓存中是否缓存在gb2对象。

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate:     select         guestbook0_.id as id0_0_,         guestbook0_.version as version0_0_,         guestbook0_.name as name0_0_,         guestbook0_.email as email0_0_,         guestbook0_.phone as phone0_0_,         guestbook0_.title as title0_0_,         guestbook0_.content as content0_0_,         guestbook0_.created_time as created8_0_0_     from         users.guestbook guestbook0_     where         guestbook0_.id=? Hibernate:     select         guestbook0_.id as id0_0_,         guestbook0_.version as version0_0_,         guestbook0_.name as name0_0_,         guestbook0_.email as email0_0_,         guestbook0_.phone as phone0_0_,         guestbook0_.title as title0_0_,         guestbook0_.content as content0_0_,         guestbook0_.created_time as created8_0_0_     from         users.guestbook guestbook0_     where         guestbook0_.id=? false

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档