欢迎来到天天文库
浏览记录
ID:48510011
大小:111.50 KB
页数:17页
时间:2020-01-22
《04_域模型的3种状态与hibernate缓存.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、域对象在持久化层的三种状态教学内容Session的缓存的作用Session清理缓存的时间点对象的临时状态、持久化状态和游离状态用Session的update()方法使游离对象转变为持久化对象理解Session的缓存当Session的save()方法持久化一个Customer对象时,Customer对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用Customer对象,只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中。当Session的load()方法试
2、图从数据库中加载一个Customer对象时,Session先判断缓存中是否已经存在这个Customer对象,如果存在,就不需要再到数据库中检索。理解Session的缓存tx=session.beginTransaction();Customerc1=newCustomer("Tom",newHashSet());//Customer对象被持久化,并且加入到Session的缓存中session.save(c1);Longid=c1.getId();//c1变量不再引用Customer对象c1=null;
3、//从Session缓存中读取Customer对象,使c2变量引用Customer对象Customerc2=(Customer)session.load(Customer.class,id);tx.commit();//关闭Session,清空缓存session.close();//访问Customer对象System.out.println(c2.getName());//c2变量不再引用Customer对象,此时Customer对象结束生命周期。c2=null;理解Session的缓存tx=ses
4、sion.beginTransaction();Customerc1=(Customer)session.load(Customer.class,newLong(1));Customerc2=(Customer)session.load(Customer.class,newLong(1));System.out.println(c1==c2);tx.commit();session.close();Session的缓存的作用(1)减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库
5、中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。(2)保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。Session清理缓存清理缓存是指按照缓存中对象的状态的变化来同步更新数据库以下程序代码对Customer的name属性修改了两次:tx=session.beginTransacti
6、on();Customercustomer=(Customer)session.load(Customer.class,newLong(1));customer.setName("Jack");customer.setName("Mike");tx.commit();当Session清理缓存时,只需执行一条update语句:updateCUSTOMERSsetNAME='Mike'……whereID=1;清理缓存的时间点Session会在下面的时间点清理缓存:当应用程序调用net.sf.hiberna
7、te.Transaction的commit()方法的时候,commit()方法先清理缓存,然后再向数据库提交事务。当应用程序调用Session的find()或者iterate()时,如果缓存中持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。当应用程序显式调用Session的flush()方法的时候。Hibernate的二级缓存结构Hibernate提供了两级缓存,第一级缓存是Session的缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事
8、务,因此它的缓存是事务范围的缓存。第一级缓存是必须的,不允许而且事实上也无法被卸除。在第一级缓存中,持久化类的每个实例都具有惟一的OID。第二级缓存是一个可插拔的缓存插件,它由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围或群集范围的缓存。这个缓存中存放的是对象的散装数据。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。Hibernate的二级缓存结
此文档下载收益归作者所有