延迟加载
- 什么是延迟加载?
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。 - Hibernate中对如下内容提供了延迟加载策略
- 实体对象的延迟加载
< class >标签中定义lazy属性:true和false可选 - 集合类型的延迟加载
< set >、< list >集合属性中定义lazy属性:true、false和extra可选 - 单端延迟加载
< many-to-one >和< one-to-one >定义lazy属性:false、proxy和noproxy - 普通属性延迟加载
< property >定义lazy属性:false和true可选,但是需要类增强
实体级别的延迟加载
- 实体级别的延迟加载需在映射文件的中进行配置lazy属性
<class name="Employee" table="emp" lazy="true">
- 实体级别的延迟加载lazy属性值有true和false可选,默认值true
- 通过代理(javassit)机制Hibernate实现了实体级别的延迟加载
- 实体级别的延迟加载只对Session的load()方法有效,当lazy为true时,执行load()方 - 法会延迟加载对应的实体对象,只有访问实体对象的非主键属性时才执行SQL查询语句,从数据库中获取对应的数据。
@Test
public void testClassLazyTrue(){
Employee emp = (Employee) session.load(Employee.class,9000);
System.out.println(emp.getEname());
}
集合关联属性的延迟加载
- 集合关联属性的延迟加载
- 在Hibernate的延迟加载机制中,针对集合类型的应用,意义是最为重大
- 集合关联属性的延迟加载可以大大使Hibernate性能得到的提高
- 为实现集合的延迟加载Hibernate提供JDK中集合框架的独立实现,例如在一对多的关联关系中使用Set集合并不是JDK中的HashSet类型,而是Hibernate独立实现的PersistentSet。
- 通过使用自定义集合类的实现,Hibernate实现了集合类型的延迟加载。
- 集合关联属性延迟加载配置
未完待续
抓取策略
缓存机制
事务简介
乐观锁与悲观锁