使用Hibernate缓存数据.ppt

使用Hibernate缓存数据.ppt

ID:56395692

大小:497.00 KB

页数:16页

时间:2020-06-16

使用Hibernate缓存数据.ppt_第1页
使用Hibernate缓存数据.ppt_第2页
使用Hibernate缓存数据.ppt_第3页
使用Hibernate缓存数据.ppt_第4页
使用Hibernate缓存数据.ppt_第5页
资源描述:

《使用Hibernate缓存数据.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第15章使用Hibernate缓存数据目录12缓存的概念和范围一级缓存234二级缓存查询缓存15.1缓存的概念和范围315.1缓存的概念和范围4缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不

2、能被卸载,也被称为Hibernate的第一级缓存。SessionFactory的缓存又被称为Hibernate二级缓存。Hibernate缓存的范围包括事务范围、进程范围和集群范围,具体如下:(1)事务范围:(2)进程范围:(3)集群范围:Hibernate提供的一级缓存是一个线程对应一个session,一个线程可以看成一个用户。也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和线程绑定了。Hibernate一级缓存生命周期很短,和session生命周期一样,一级缓存也称se

3、ssion级的缓存或事务级缓存。如果事务提交或回滚了,我们称session就关闭了,生命周期结束了。Hibernate二级缓存需要sessionFactory来管理,它是进初级的缓存,所有人都可以使用,它是共享的。使用缓存,肯定是长时间不改变的数据,如果经常变化的数据放到缓存里就没有太大意义了。因为经常变化,还是需要经常到数据库里查询,那就没有必要用缓存了。(1)事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务结束时,缓存也就结束生命周期。在此范围下,缓存的介质是内存。(2)进程范围:

4、缓存被进程内的所有事务共享。这些事务有可能是并发访问缓存,因此必须对缓存采取必要的事务隔离机制。(3)集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据一致性,缓存中的数据通常采用对象的松散数据形式。15.2一级缓存515.2一级缓存6Hibernate的一级缓存由Session提供,只存在于Session的生命周期中。当应用程序调用Session接口的save()、update()、saveOrUpdate()、get

5、()、load()或者Query和Criteria实例的list()、iterate()等方法时,如果Session缓存中没有相应对象,Hibernate就会把对象加入到一级缓存中。当Session关闭时,该Session所管理的一级缓存也会立即被清除。1.一个session中发出两次get查询将项目hibernate-10复制并命名为“hibernate-11”,再导入到MyEclipse开发环境中。在项目hibernate-10的测试类HibernateTest中添加testSessionCache_1()方

6、法,并使用@Test注解加以修饰,在同一个session中发出两次get查询。@TestpublicvoidtestSessionCache_1(){Useru1=(User)session.get(User.class,1);System.out.println("用户名:"+u1.getLoginName());Useru2=(User)session.get(User.class,1);System.out.println("用户名:"+u2.getLoginName());}15.2一级缓存72.开启两个

7、session中发出两次get查询在测试类HibernateTest中添加testSessionCache_2()方法,并使用@Test注解加以修饰,开启两个session中发出两次get查询。@TestpublicvoidtestSessionCache_2(){Useru1=(User)session.get(User.class,1);System.out.println("用户名:"+u1.getLoginName());transaction.commit();session.close();sessi

8、on=sessionFactory.openSession();transaction=session.beginTransaction();Useru2=(User)session.get(User.class,1);System.out.println("用户名:"+u2.getLoginName());}15.2一级缓存83.在一个Session中先save,再执行

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。