• Hibernate查询


          Hibernate的缓存一般分为3类:

                1).一级缓存.Session缓存称为一级缓存,由于Session对象的得生命周期通常对应一个数据库事务,因此它的缓存是事务范围的缓存,.注意:  一级缓存是必需的.在一级缓存中,持久化类的每个实例都具有唯一性的OID.

         

                2).二级缓存.SessionFactory缓存分为内置缓存和外置缓存.内置缓存是Hibernate自带的,不可拆卸,是只读缓存,用来存放映射元数据和预定义SQL语句.外置缓存是一个可配置的缓存插件,默认SessionFactory不会启用这个缓存插件.外置缓存中的数据库数据的复制.  SessionFactory对象的生命周期和应用程序的整个进程对应.二级缓存是可选的,可以在每个类型或每个集合的粒度上配置二级缓存.

               3).  查询缓存,它是Hibernate为查询结果提供的,依赖二级缓存.

    (1)  事务范围.每个事务都有自己的缓存,缓存内数据不会被多个事务并发访问.例如,Hibernate的以及缓存,事务是不能跨多个Session的,Session内数据只能被当前事务访问,因此它属于事务范围的缓存.

    (2)  进程范围.进程内的所有事务共享缓存,进程结束,缓存结束生命周期,例如,Hibernate的二级缓存,SessionFactory对象的生命周期对应应用程序的整个进程,因此它属于进程范围的缓存.

    (3)  集群缓存范围.缓存被一个或多个机器上的多个进程共享.Hibernate的二级缓存也可以作为集群范围的缓存.

    Hibernate  一级缓存:

         刚才说了,Session内的缓存就是一级缓存,位于缓存中的对象成为持久化对象,它和数据库中的相关记录对应.Session能够在某些时间点,按照缓存中对象的变化执行相关SQL语句,从而同步更新数据库,这一过程称为刷新缓存.

        当应用程序调用Session的save() ,  update() ,  saveOrUpdate()  ,  load()  或get()  方法,以及调用Query查询接口的list()  iterate方法时 ,如果在Session的缓存中还不存在相应的对象,Hibernate就会把该对象加入到一级缓存中.在刷新缓存时Hibernate会根据缓存中对象的状态变化来同步更新数据库.由此可见,Session缓存有两大作用:

              (1)减少访问数据库中的相关记录与缓存中的相应对象同步.

              (2)保证数据库中的相关记录与缓存中的相应对象同步.

    举个栗子:

       

     User user1=(User) session.get(User.class, new Byte("1"));
    
     User user2=(User) session.get(User.class, new Byte("1"));
    
     System.out.printIn(user1==user2);

    在控制台可以看到,只输入了一次select语句,user1和user2引用的是同一个对象,第三行输出了  true  !

    因为第一次user1在数据库中查询了一次,缓存在session中,所以user2查询的是session中的user1的缓存

    Session为引用程序提供了两个管理缓存的方法:

         (1) evict(Object o)  :从缓存中清除指定的持久化对象.

         (2)clear()  清空缓存中的所有持久化对象.

    额  还有一个好用的东西:  就是   flush()  方法,flush()  方法用于强制进行从缓存到数据库的同步.

      例如:   

    User user=null;
    
    for(int i=0;i<1000;<i++)
    {
        user=new User(i,"user"+i);
        session.save(user);
       if(i%30==0)
          {
               session,flush();
               session.clear();
          }
    }
    
    tx.commit();
    

      

  • 相关阅读:
    【CF1015D】Walking Between Houses(构造,贪心)
    【CF1068D】Array Without Local Maximums(计数DP)
    【CF1068C】Colored Rooks(构造)
    172.处理机控制与杂项指令
    171.控制转移指令
    170.串处理指令
    169.逻辑指令
    168.算术指令
    Volume 1. Big Number(uva)
    Volume 1. String(uva)
  • 原文地址:https://www.cnblogs.com/yccmelody/p/5490163.html
Copyright © 2020-2023  润新知