T加载策略.pptVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
T加载策略.ppt

课 程 目标 对象在Hibernate中的状态 加载策略介绍 lazy ”false”与fetch ?“join”的区别 inverse ”true” insert ”false” update ”false” 对象在Hibernate中的状态 临时状态 普通的Java对象,只是一个携带信息的载体 没与session实例关联, 没与数据库中记录关联 持久状态 持久实例在数据库中 有对应的记录, 并拥有持久化标识, 持久实例可能是刚刚被保存, 或刚刚被加载的数据 脱管状态 持久对象关联的Session关闭后, 对象变为脱管 举例说明对象状态 加载策略介绍 我们知道,Hiberante是一个ORM工具,它使得我们能够直接去操纵对象而不是数据库中表。Hibernate的数据检索策略也是给予对对象的操作的。数据检索策略主要包括一下几种:立即加载,延迟加载,预先抓取和批量加载。其中前三个是统一级别的,三个当中智能选择其中一个,而批量加载则可以很好的整合前面三个,还有就是预先抓取和批量加载都是为了优化前面两种方式而形成的。同时对于配置文件中的某个属性一旦设为预先抓取,则其它的数据检索方式都对这个属性失效。 下面分别进行讨论: 1 立即检索:立即检索的时候需要在配置文件添加属性lazy false.当Hibernate在从数据库中取得字段值组装好一个对象后,会立即再组装此对象所关联的对象,如果这个对象还有关联对象,再组装这个关联对象;对于一对一和多对一的多的这段默认是采用立即加载,所以不需要配置;多对多和一对多就要配置lazy false。 2 延迟加载:延迟加载不同,当组装完一个对象后,不立即组装和它关联的对象。 多对多和一对多默认采用延迟加载,一对一和多对一想实现延迟加载得配置lazy true。 3 预先抓取 :Hibernate 2.x版本:outer-join true Hibernate 3.x版本:fetch join。和立即检索相比,预先抓取可以减少SQL语句的条数,提高查询速度。 4 批量加载 :批量加载总是和立即加载或者延迟加载联系在一起的,分别为批量立即加载和批量延迟加载。 Hibernate加载策略 为了提高效率,节省资源,提供了多种数据检索策略 立即加载 从数据库取得字段值组装好一个对象后,会立即从数据库取出关联的附属对象,脱离Session后仍可以使用这些附属对象 立即加载的适用情况: 加载对象时,马上就要用到附属对象的数据 一对一、多对一被关联对象是”一”这端的 立即加载的配置为lazy “false” 一对一、多对一默认就是立即加载,所以只有一对多、多对多的立即加载需要在 元素中指定lazy “false” 延迟加载 从数据库取得字段值组装好一个对象后,并不会立即取出附属对象。这样做通常是为了节约内存资源 因为一对多、多对多关系如果设置为立即加载,将有可能会加载很多的附属对象而占据大量内存,因此这种情况常设置为延迟加载 多对一、一对一设置延迟加载只需在 标签中设置lazy “true” 加载策略举例 一对一默认立即加载、一般不改动 一对多默认延迟加载,通过设置lazy ”false”、或fetch ”join”实现立即加载,但一般一对多尽量设成lazy ”true”,当要实现立即加载时通过HQL语句的预先抓取join fetch实现 多对一默认延迟加载,通过设置lazy ”false”或fetch ”join”实现立即加载 下面以部门加载员工(一对多)为例: 部门对员工的加载策略配置如下: 显示部门详细信息 lazy ”false”与fetch ?“join”的区别 1、lazy ”false”,立即加载,一次只查一个表。产生语句过多,如果数据多的话查询效率较低 2、fetch ”join”,使用连接查询,减少查询次数,提交查询效率 下面通过例子说明: lazy ”false” 部门对员工采用lazy ”false”立即加载员工的配置及代码: lazy ”false” 执行main方法,得到控制台信息: fetch join 部门对员工采用fetch join预先抓取员工的配置及代码: fetch join 执行main方法,得到控制台信息: inverse属性 inverse属性表示将关系转由对方维护 总结 加载策略介绍 lazy ”false”与fetch ?“join”的区别 inverse ”true” insert ”false” update ”false” 加载策略 saveOrUpdate ? 临时状态 持久状态 脱管状态 get ? load ? find ? iterator ? save ? update

文档评论(0)

rewfdgd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档