博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate缓存相关(二)
阅读量:4261 次
发布时间:2019-05-26

本文共 2009 字,大约阅读时间需要 6 分钟。

4、Hibernate缓存

Session缓存(一级缓存,没法禁用的,属于事务级缓存)的作用:

减少访问数据库的频率;保证缓存中的对象与数据库中的相关记录保持同步(当缓存中持久化对象的状态发生了变化,session并不会立即执行相关的sql语句,这使得session能够把几条相关的sql合并成一条进行执行,减少访问数据库的频率,提供程序性能。)

Session清理缓存的时间点:

    Transaction tx = session.beginTransaction();

    tx.commit();

        1):调用了commit()方法会先清空session缓存,然后去提交事务;

        2):session.flush();强制性的情况缓存。

SessionFactory缓存(二级缓存,可配置,属于进程级缓存)。可由第三方实现提供.

如:EhCache使用了一个内存存储和磁盘存储。对应的jar:ehcache-1.2.3.jar

要使用二级缓存,首先需要先开启二级缓存(在hibernate.cfg.xml)中进行配置

true
org.hibernate.cache.EhCacheProvider

 

   在关联关系map set list中,如果想保存多的那一方数据,

   需要在该元素下配置<cache name = "?"/>,只是设置cache只会保存OID,而不是整个数据对象。
   而且还需要在多的一方配置<cache name = "?"/>
   其中?存在四个值:
   read-only:
   read-write:使用了<timestamp>机制来维护事务隔离级别
   nonstrict-read-write:二级缓存与数据库中的信息可能会出现不一致的情况
                         在使用这种策略时,可以使用缓存过期时间来定期与数据库进行缓存数据与
                         数据库数据进行同步。
   transactional:

 

   还需要配置一个二级缓存自身的文件

   ehcache.xml文件(该文件在src目录下)

该文件的内容为:

   同时需要添加两个jar包支持

 asm-3.1.jar ;  commons-logging-1.1.1.jar

         Hibernate一级缓存(session缓存)  ------------>Hibernate二级缓存(sessionFactory缓存,为可配置缓存

public class Student implements Serializabe{   pivate Long id;   private String name;   prvate String pass;  ...setter/getter...}

 

 

  查询所有的列表时,进行第二次查询也会发出sql,查询单独的会从缓存中获取。

//读取数据Session session = sessionFactory.openSession();Query query = session.createQuery("from Student");//此处调用直接从数据库中获取List
list = (List
)query.list();//再次查询数据,直接从二级缓存中获取数据,不在查询数据库Session s = sessionFacory.openSession();Student ss = (Student)s.get(Student.class,new Long(1));

5、Hibernate 对象的状态

  1):临时状态(transient):刚被new出来的对象,还没有被持久化,不处于session的缓存中,不具备OID

  2): 持久化状态:已经被持久化,加入到了session缓存中,具备OID.

  3):游离状态:已经被持久化,但是不再处于session缓存中,具备OID.

     Hibernate对象状态的变化条件:

             new   ------->   临时状态   -------save();saveOrUpdate();----> 持久化状态 -----close();clear();evict();--->游离状态  ----save();saveOrUpdate();lock();--->持久化状态 ---delete();--->临时状态

             持久化状态 ---delete();---->  临时状态

Hibernate使用连接池直接配置接口(略..)

转载地址:http://ahxei.baihongyu.com/

你可能感兴趣的文章
【C++】C++11 STL算法(二):修改序列的操作(Modifying sequence operations)
查看>>
【C++】C++11 STL算法(三):分隔操作(Partitioning operations)、排序操作(Sorting operations)
查看>>
【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作
查看>>
【C++】C++11 STL算法(五):设置操作(Set operations)、堆操作(Heap operations)
查看>>
【C++】C++11 STL算法(六):最小/最大操作(Minimum/maximum operations)、比较运算(Comparison operations)
查看>>
【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)
查看>>
【C++】C++11 STL算法(八):对未初始化内存的操作(Operations on uninitialized memory)、C库(C library)
查看>>
【数据库】sqlite中的限制:数据库大小、表数、列数、行数、参数个数、连接数等
查看>>
【数据库】SQLite和MySQL之间的对比和选择
查看>>
【数据库】sqlite3数据库备份、导出方法汇总
查看>>
【数据库】适用于SQLite的SQL语句(一)
查看>>
【数据库】适用于SQLite的SQL语句(二)
查看>>
【数据库】适用于SQLite的SQL语句(三)
查看>>
【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]
查看>>
【C++】C++11 STL算法(九):番外篇
查看>>
【C++】C++11 STL算法(十):使用STL实现排序算法
查看>>
【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO
查看>>
【网络编程】epoll 笔记
查看>>
【视频】视频传输协议:RTSP、RTP、RTCP、RTMP、HTTP
查看>>
【经验】向word中插入格式化的代码块
查看>>