hibernate-------加载策略

1.3.1 类级别的加载策略

  1. get:立即检索。get方法一执行,立即查询所有字段的数据。
  2. load:延迟检索。默认情况,load方法执行后,如果只使用OID的值不进行查询,如果要使用其他属性值才查询
  3. 如果在类级别上配置lazytrue,load方法就会即时加载,否则为延时加载

hibernate-------加载策略

hibernate-------加载策略

 

1.3.2 关联级别的加载策略

  1. 关联级别的集合加载的策略是默认是懒加载
  2. 可以设置为即时加载,如图,即加载学生时,学生所属的课程也会加载进来

hibernate-------加载策略

hibernate-------加载策略

 

1.3.3 fecth

Fecth:拿取,获取数据

fecth:是指查询集合的sql方式

   select:默认的,普通select查询语句

   join:表连接语句查询

   subselect:使用子查询

 

hibernate-------加载策略

fetch:select

  1. set集合默认的sql查询方式就是fectch=select,一个普通的select查询语句

fecth:join

hibernate-------加载策略

hibernate-------加载策略

hibernate-------加载策略

 

fetch:subselect

  1. 【只能用于多对多,一对多】

hibernate-------加载策略

hibernate-------加载策略

 

 

1.3.4 多对一的加载策略

  • 这里以Customer和Order多例来讲解
  • 多对一标签<many-to-one fetch="" lazy="">

hibernate-------加载策略

hibernate-------加载策略

hibernate-------加载策略

 

1.3.5 批量加载【了解】

set标签可以配置一个batch-size="2",表示每次可以加载两条数据

hibernate-------加载策略

hibernate-------加载策略

 

 

1.3.6 检索策略

检索策略

优点

缺点

优先考虑使用的场合

立即检索/

即时加载

对应用程序完全透明,不管对象处于持久化状态还是游离状态,应用程序都可以从一个对象导航到关联的对象

(1)select语句多

(2)浪费内存空间

(1)类级别

(2)应用程序需要立即访问的对象

(3)使用了二级缓存

延迟检索/

懒加载的意思

由应用程序决定需要加载哪些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并节省内存空间。

应用程序如果希望访问游离状态的代理类实例,必须保证她在持久化状态时已经被初始化。

(1)一对多或者多对多关联

(2)应用程序不需要立即访问或者根本不会访问的对象

                       

表连接检索

(1)对应用程序完全透明,不管对象处于持久化状态还是游离状态,都可从一个对象导航到另一个对象。

(2)使用了外连接,select语句少

(1)可能会加载应用程序不需要访问的对象,浪费内存。

(2)复杂的数据库表连接也会影响检索性能。

(1)多对一或一对一关联

(2)需要立即访问的对象

(3)数据库有良好的表连接性能。