zoukankan      html  css  js  c++  java
  • 08.Hibernate的一级缓存-->>Session

    Hibernate提供了两种缓存:

    • 1.一级缓存:自带的不可卸载的,一级缓存的生命周期与Session一致,一级缓存成为Session级别的缓存
    • 2.二级缓存:默认没有开启,需要手动配置才可以使用,二级缓存可以在多个Session中共享数据,二级缓存成为SessionFactory级别的缓存

    Sesison对象的缓存概述:  

    • 1.将对象存入到一级缓存中,session生命周期没有结束,那么对象在session中存放着
    • 2.内存中包含session的实例--->>>session的缓存(一些集合)--->>>集合包含的是缓存对象!

    证明一级缓存的存在:

      在同一个Session中两次查询,查看执行了哪些SQL语句

        @Test
        public void m01(){
            Session session = HibernateUtils.openSession();
            Transaction tr = session.beginTransaction();
            
            User user1 = session.get(User.class, 1L);
            System.out.println("-------------------------------");
            User user2 = session.get(User.class, 1L);
            
            tr.commit();
            session.close();
            
        }

      控制台显示:

      只执行了一次查询语句,说明第一次查询之后 Hibernate将持久化对象存储在session中,再次执行就不用去数据库查询

    Hibernate如何做到数据库与session进行同步更新操作

      使用get()查询到一个User对象,然后设置user的一个属性,commit。

      发现数据库中的该user属性也变化了(没有做update操作)

      快照机制

        @Test
        public void m02(){
            Session session = HibernateUtils.openSession();
            Transaction tr = session.beginTransaction();
            
            User user = session.get(User.class, 3L);
            user.setAge(1);
            
            tr.commit();
            session.close();
            
        }

    数据库变化:

    ===>>>

      证明了快照的存在

    session的一些方法

    • session.clear();  --清空缓存
    • session.evict(obj);  --从缓存中清除指定对象
    • session.flush();  --刷出缓存(在不commit得情况下和数据库同步)
  • 相关阅读:
    51Nod1119
    stoi
    坑爹大质数
    USACO07OPEN Cheapest Palindrome
    USACO08NOV Mixed Up Cows
    USACO12FEB Nearby Cows
    SCOI2009 粉刷匠
    USACO16OPEN 248
    POI2014 PTA-Little Bird
    USACO17FEB Why Did the Cow Cross the Road I G
  • 原文地址:https://www.cnblogs.com/NEWHOM/p/6763353.html
Copyright © 2011-2022 走看看