学习任务

  • 延迟加载
  • Open Session In View模式

延迟加载

延迟加载(lazy load懒加载)是在真正需要数据时才执行SQL语句进行查询,避免了无谓的性能开销。

延迟加载策略的设置分为:类级别的查询策略、一对多和多对多关联的查询策略、多对一关联的查询策略。

Hibernate3.X以上的版本,默认都是采用延迟加载策略。

用于设定延迟加载特性的lazy属性如下表所示:

级别 lazy属性取值
类级别 <class>元素中lazy属性的可选值为true(延迟加载)和false(立即加载)。默认值为true。
一对多关联级别 <set>元素中lazy属性的可选值为true(延迟加载)、extra(增强延迟加载)和fasle(立即加载)。默认值为true。
多对一关联级别 <many-to-one>元素中的lazy属性的可选值为proxy(延迟加载)、no-proxy(无代理延迟加载)和false(立即加载)。默认为proxy。

类级别查询策略

类级别可选策略有:立即加载和延迟加载。默认为延迟加载。

一、立即加载

1.Dept.hbm.xml文件

	<class name="com.etc.entity.Dept" table="`DEPT`" schema="scott"
dynamic-update="true" lazy="false">

  

2.DAO代码

return (Dept) this.getSession().load(Dept.class, id);

  

3.BIZ测试方法

	@Test
public void load() {
Transaction tx=null;
try{
tx=deptDao.getSession().beginTransaction();
Dept dept=deptDao.load(new Short("10"));
tx.commit();
System.out.println(dept.getDeptName());//事务关闭,确认dept属性已全部加载,并输出部门名称
}catch (Exception e) {
e.printStackTrace();
if(tx!=null){
tx.rollback();
}
}
}

  

4.测试结果

Hibernate:
select
dept0_."DEPTNO" as DEPTNO1_0_0_,
dept0_."DNAME" as DNAME2_0_0_,
dept0_."LOC" as LOC3_0_0_
from
scott."DEPT" dept0_
where
dept0_."DEPTNO"=?

  

备注:load()方法默认加载OID,不加载实体属性。假如修改class的lazy属性值为true,若要在session关闭后输出实体属性(例外:访问OID不会引发数据库查询,不会报错),将会报如下错误:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

  

此外,无论类级别设置是否为延迟加载,get()和list()方法都是立即加载。

二、延迟加载

1.映射文件延迟加载设置

	<class name="com.etc.entity.Dept" table="`DEPT`" schema="scott"
dynamic-update="true" lazy="true">

  或者:

	<class name="com.etc.entity.Dept" table="`DEPT`" schema="scott"
dynamic-update="true">

  

//待续

一对多和多对多关联查询策略

多对一关联查询策略

Open Session In View

最新文章

  1. Google C++单元测试框架GoogleTest---AdvancedGuide(译文)下
  2. 【JavaScript】获取未知类的结构
  3. 未能正确加载包“Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage
  4. 【洛谷 P3385】模板-负环(图论--spfa)
  5. fdtd simulation, plotting with gnuplot, writting in perl
  6. 省常中模拟 Test2 Day2
  7. leetcode解题—Longest Palindromic Substring
  8. Clob对象转为字符串
  9. 十天学Linux内核之第二天---进程
  10. UNION ALL合表查询
  11. javascript深入浅出图解作用域链和闭包
  12. git方法 GUI here
  13. D3比例尺
  14. Power BI 3-4月功能更新培训合集
  15. Newtonsoft.Json序列化字符串-格式化
  16. Ubuntu安装守护进程supervisor
  17. layui 富文本 图片上传 后端PHP接口
  18. 基于VUE,VUX组件开发的网易新闻页面搭建过程
  19. 2018.4.3 配置AD服务器步骤
  20. Selenium-Switch与SelectApi接口详解

热门文章

  1. Codechef SEPT17
  2. 语言学习系列-Scala连接数据库示例
  3. Luogu P4139 上帝与集合的正确用法【扩展欧拉定理】By cellur925
  4. jQuery同时监听两个事件---实现同时操控两个按键
  5. P2614 计算器弹琴
  6. ASP.NET MVC5的一个轻量级的框架学习的第一天
  7. mysql对库,表及记录的增删改查
  8. jQuery选择器之表单元素选择器
  9. Sublime折腾记录
  10. Hibernate懒加载深入分析