• Hibernate的二级缓存


    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

  • 相关阅读:
    内网很安全?错错错!附攻击演示
    Fiddler无所不能——之测试开发攻城狮必备利器
    【橙子独创】【假设前置数据异常法】案列解析
    偶发异常BUG,如何高效精准分析排查定位?
    史上最全提现模块案例分解
    移动端推送测试涉及点
    模拟导入系统通讯录5000+手机号 校验批量数据处理是否正常?
    发散逆向思维之查询类列表测试范围的思考
    PICT工具一键生成正交试验用例
    据说黑白红客大多是出身测试行业,那么前戏如何做好呢?戳下
  • 原文地址:https://www.cnblogs.com/hongten/p/2108538.html
Copyright © 2020-2023  润新知