懒加载(延迟加载)
来源:互联网 发布:淘宝怎么看星级 编辑:程序博客网 时间:2024/04/28 12:13
概念:为了推迟和数据库交互的时间,推迟到真正需要这个对象数据的时候。提高系统的性能
通过 asm和cglib二个jar包实现懒加载。Domain是非final的
1、session.load懒加载
(1)返回的是一个代理对象,new关键字来创建一个代理对象,理解成一个快捷方式,不是真正的类,而是代理类。
(2)代理对象继承了原对象,所以用强制造型可以使用。
(3)代理对象限制:和代理关联的session关闭之前使用
(4)利用hibernate中的静态方法 hibernate.initialize(对象);它会让hibernate访问数据库getId() getClass() 方法不会访问数据库,他们的值在不妨问数据库下也能得到
(5)在映射文件class中的属性 lazy="false" 表示懒加载被关闭掉了,可以直接查询,跟get()一样
2、one-to-one(元素)懒加载:一对一的关联关系
(1)当我们查询的是主对象时,将两个表外连接查询出主对象和从对象,没有相应的懒加载
(2)当我们查询的是从对象时,从对象所关联的主对象,会赋代理对象,使用懒加载
(3)通过hibernate.initialize(从对象.get主对象())初始化,强迫hibernate访问数据库。
(4)满足三个条件才能实现懒加载:
1)lazy!=false
lazy有三个属性值: proxy使用代理 no-proxy不使用代理 false 不使用懒加载,立即查询。
2)constrained=true
从表中要有一个这样的属性,表示建立外键约束
3)fetch=select(从对象中one-to-one中设置)
lazy 指相关联的属性什么时候抓取
fetch 抓取的策略,以什么方式来抓取
select表示二次select语句查询
join 表示连接查询。如果加上,则懒加载不起作用,直接将两表连接查询。
3、one-to-many(元素)懒加载
1)lazy!=false
2)fetch=select
当fetch属性为join时候,懒加载失效,直接将两表连接并查询出结果。
4.many-to-one (元素):
1)lazy!=false
2)fetch=select
当fetch属性为join时候,懒加载失效,直接将两表连接并查询出结果。
5.many-to-many (元素):
1)lazy!=false
属性值为 true false 是否懒加载
2)fetch=select
当fetch属性为join时候,懒加载失效,直接将两表连接并查询出结果。
6.注意:
能够懒加载的对象都是被改写过的代理对象,当相关联的session没有关闭时,访问这些懒加载对象(代理对象)的属性(getId和getClass除外)hibernate会初始化这些代理,或用Hibernate.initialize(proxy)来初始化代理对象;当相关联的session关闭后,再访问懒加载的对象将出现异常。
总结:在关联映射中使用懒加载来设置lazy和fetch属性,注意,要查询的哪一方的数据,就在相对应的映射文件中设置,一般在关联属性标签内加入属性
一般不用改变lazy属性和fetch属性,尤其在多对多,一对多等关系映射中
懒加载对系统的性能有很大的作用。
- 延迟加载--懒加载
- 懒加载(延迟加载)
- 延迟加载(懒加载)---LazyLoad
- 懒加载(延迟加载)
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- Hibernate性能优化 --- 延迟加载(懒加载)
- hibernate延迟加载(懒加载)详解
- Hibernate性能优化 --- 延迟加载(懒加载)
- 【专题】测试人员 VS 开发人员
- MySQL 5.1分区技术
- 做事情仅仅靠勤奋是不够的
- YUM - Linux包管理工具简介
- TextSwitch 及 OnItemSelectedListenter
- 懒加载(延迟加载)
- 2011年终随笔
- HTML5斯诺克桌球俱乐部【译】
- 关于php数值类型的一个疑问
- Amazon EC2 Compute Unit性能评测
- directfb1.2.9上的pnm插件,用来读取ppm,pgm文件
- java初级网站性能程序测试..
- 用Repeater绑定数据,将数据的前三条显示为红色
- 为WTC配置TUXEDO配置文件domconfig