hibernate-------加载策略
1.3.1 类级别的加载策略
- get:立即检索。get方法一执行,立即查询所有字段的数据。
- load:延迟检索。默认情况,load方法执行后,如果只使用OID的值不进行查询,如果要使用其他属性值才查询
- 如果在类级别上配置lazy为true,那load方法就会即时加载,否则为延时加载
1.3.2 关联级别的加载策略
- 关联级别的集合加载的策略是默认是懒加载
- 可以设置为即时加载,如图,即加载学生时,学生所属的课程也会加载进来
1.3.3 fecth
Fecth:拿取,获取数据
fecth:是指查询集合的sql方式 select:默认的,普通select查询语句 join:表连接语句查询 subselect:使用子查询 |
fetch:select
- set集合默认的sql查询方式就是fectch=select,一个普通的select查询语句
fecth:join
fetch:subselect
- 【只能用于多对多,一对多】
1.3.4 多对一的加载策略
- 这里以Customer和Order多例来讲解
- 多对一标签<many-to-one fetch="" lazy="">
1.3.5 批量加载【了解】
set标签可以配置一个batch-size="2",表示每次可以加载两条数据
1.3.6 检索策略
检索策略 |
优点 |
缺点 |
优先考虑使用的场合 |
立即检索/ 即时加载 |
对应用程序完全透明,不管对象处于持久化状态还是游离状态,应用程序都可以从一个对象导航到关联的对象 |
(1)select语句多 (2)浪费内存空间。 |
(1)类级别 (2)应用程序需要立即访问的对象 (3)使用了二级缓存 |
延迟检索/ 懒加载的意思 |
由应用程序决定需要加载哪些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并节省内存空间。 |
应用程序如果希望访问游离状态的代理类实例,必须保证她在持久化状态时已经被初始化。 |
(1)一对多或者多对多关联 (2)应用程序不需要立即访问或者根本不会访问的对象
|
表连接检索 |
(1)对应用程序完全透明,不管对象处于持久化状态还是游离状态,都可从一个对象导航到另一个对象。 (2)使用了外连接,select语句少 |
(1)可能会加载应用程序不需要访问的对象,浪费内存。 (2)复杂的数据库表连接也会影响检索性能。 |
(1)多对一或一对一关联 (2)需要立即访问的对象 (3)数据库有良好的表连接性能。 |