首页 04_status

04_status

举报
开通vip

04_status 域对象在持久化层的三种状态 n 教学内容 n Session的缓存的作用 n Session清理缓存的时间点 n 对象的临时状态、持久化状态和游离状态 n 用Session的update()方法使游离对象转变为 持久化对象 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 理解Session的缓存 n 当Session的save()方法持久化一个Customer对 象时,Customer对象被加入到Session的缓存 中,以后即使应用程序中的引...

04_status
域对象在持久化层的三种状态 n 教学内容 n Session的缓存的作用 n Session清理缓存的时间点 n 对象的临时状态、持久化状态和游离状态 n 用Session的update()方法使游离对象转变为 持久化对象 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 理解Session的缓存 n 当Session的save()方法持久化一个Customer对 象时,Customer对象被加入到Session的缓存 中,以后即使应用程序中的引用变量不再引用 Customer对象,只要Session的缓存还没有被 清空,Customer对象仍然处于生命周期中。 n 当Session的load()方法试图从数据库中加载一 个Customer对象时,Session先判断缓存中是 否已经存在这个Customer对象,如果存在,就 不需要再到数据库中检索。 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 理解Session的缓存 tx = session.beginTransaction(); Customer c1=new Customer("Tom",new HashSet()); //Customer对象被持久化,并且加入到Session的缓存中 session.save(c1); Long id=c1.getId(); //c1变量不再引用Customer对象 c1=null; //从Session缓存中读取Customer对象,使c2变量引用Customer对象 Customer c2=(Customer)session.load(Customer.class,id); tx.commit(); //关闭Session,清空缓存 session.close(); //访问Customer对象 System.out.println(c2.getName()); // c2变量不再引用Customer对象,此时Customer对象结束生命周期。 c2=null; PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 理解Session的缓存 tx = session.beginTransaction(); Customer c1=(Customer)session.load(Customer.class,new Long(1)); Customer c2=(Customer)session.load(Customer.class,new Long(1)); System.out.println(c1==c2); tx.commit(); session.close(); PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn Session的缓存的作用 n (1)减少访问数据库的频率。应用程序从内 存中读取持久化对象的速度显然比到数据库中 查询数据的速度快多了,因此Session的缓存可 以提高数据访问的性能。 n (2)保证缓存中的对象与数据库中的相关记 录保持同步。当缓存中持久化对象的状态发生 了变换,Session并不会立即执行相关的SQL语 句,这使得Session能够把几条相关的SQL语句 合并为一条SQL语句,以便减少访问数据库的 次数,从而提高应用程序的性能。 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn Session清理缓存 n 清理缓存是指按照缓存中对象的状态的变化来同步更 新数据库 n 以下程序代码对Customer的name属性修改了两次: tx = session.beginTransaction(); Customer customer=(Customer)session.load(Customer.class, new Long(1)); customer.setName("Jack"); customer.setName("Mike"); tx.commit(); n 当Session清理缓存时,只需执行一条update语句: update CUSTOMERS set NAME= 'Mike'…… where ID=1; PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 清理缓存的时间点 n Session会在下面的时间点清理缓存: n 当应用程序调用net.sf.hibernate.Transaction的 commit()方法的时候,commit()方法先清理缓存, 然后再向数据库提交事务。 n 当应用程序调用Session的find()或者iterate()时,如 果缓存中持久化对象的属性发生了变化,就会先清 理缓存,以保证查询结果能反映持久化对象的最新 状态。 n 当应用程序显式调用Session的flush()方法的时候。 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn Hibernate的二级缓存结构 n Hibernate提供了两级缓存,第一级缓存是Session的缓 存。由于Session对象的生命周期通常对应一个数据库 事务或者一个应用事务,因此它的缓存是事务范围的 缓存。第一级缓存是必须的,不允许而且事实上也无 法被卸除。在第一级缓存中,持久化类的每个实例都 具有惟一的OID。 n 第二级缓存是一个可插拔的缓存插件,它由 SessionFactory负责管理。由于SessionFactory对象的 生命周期和应用程序的整个进程对应,因此第二级缓 存是进程范围或群集范围的缓存。这个缓存中存放的 是对象的散装数据。第二级缓存是可选的,可以在每 个类或每个集合的粒度上配置第二级缓存。 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn Hibernate的二级缓存结构 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn Hibernate的二级缓存机制 n 如果在事务范围的缓存(第1级缓存)中没有查询到相应的数据, 还可以到进程范围或群集范围的缓存(第2级缓存)内查询,如果 在进程范围或群集范围的缓存内也没有找到该数据,那么就只好 查询数据库。 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 在Hibernate应用中Java对象的状态 n 临时状态(transient):刚刚用new语句创建,还没有 被持久化,不处于Session的缓存中。处于临时状态的 Java对象被称为临时对象。 n 持久化状态(persistent):已经被持久化,加入到 Session的缓存中。处于持久化状态的Java对象被称为 持久化对象。 n 游离状态(detached):已经被持久化,但不再处于 Session的缓存中。处于游离状态的Java对象被称为游 离对象。 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 对象的状态转换图 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn Customer对象的状态转换过程 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 用Session的update()方法关联游离对象 Customer customer=new Customer(); customer.setName("Tom"); Session session1=sessionFactory.openSession(); Transaction tx1 = session1.beginTransaction(); session1.save(customer); tx1.commit(); session1.close(); //此时Customer对象变为游离对象 Session session2=sessionFactory.openSession(); Transaction tx2 = session2.beginTransaction(); customer.setName("Linda") //在和session2关联之前修改Customer对象的属性 session2.update(customer); customer.setName("Jack"); //在和session2关联之后修改Customer对象的属性 tx2.commit(); session2.close(); PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn Session的update()方法 n Session的update()方法完成以下操作: n (1)把Customer对象重新加入到Session缓存中, 使它变为持久化对象。 n (2) 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 执行一个update语句。值得注意的是, Session只有在清理缓存的时候才会执行update语句, 并且在执行时才会把Customer对象当前的属性值组 装到update语句中。因此,即使程序中多次修改了 Customer对象的属性,在清理缓存时只会执行一次 update语句。 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn 客户层与业务逻辑层之间传递临时对象和游离对象的过程 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
本文档为【04_status】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_450322
暂无简介~
格式:pdf
大小:242KB
软件:PDF阅读器
页数:16
分类:互联网
上传时间:2011-06-21
浏览量:15