hibernate加载策略session.load()与session.get()---【小白系列】0基础到熟练应用hibernate框架(五)
来源:互联网 发布:js drag拖拽 编辑:程序博客网 时间:2024/05/16 14:52
这篇博文我们来看一下session.load查询方式的两种加载策略有何不同
加载策略:
根据配置策略决定何时执行sql语句
演示及详解:
我们打开映射文件(customer.hbm.xml)来看一下
可以看到lazy属性设置了true,那么加载策略翻译过来就是 懒加载吗?="是的"
我们到代码里对比一下session.get()和session.load()
session.load()---lazy="true"
详解该代理对象
代理对象
改变一个类原有的功能属性
从这张图我们可以看到,该代理对象增加了一个handler属性,并且原属性全部为空
接下来我们来看看这个handler
分析红框内容
可见handler封装了如下内容
1.entityName:查询哪个实体?Customer
2.id:实体id
3.initialized:初始化了吗?false
4.session:查询时所用的session
懒加载原理:
由此不难看出,当我们程序运行到
System.out.println("load:"+loadCustomer);访问这个loadCustomer对象时,会先去判断这个对象是否初始化
initialized属性为false
说明该对象还没有进行查询,那么将会
1.根据session和id去查询
2.为实体赋值
3.将initialized标记改为true
结论:
当我们使用懒加载时,要注意查询出来的实体只是一个代理对象,等我们使用待查询对象时,才会触发sql去查询
懒加载注意事项:
1.代理对象未初始化关闭session,再次初始化时会抛出异常
代码演示及详解:
这里我们先关闭session 在进行打印,可以看到报了 不能初始化代理对象 no Session 的异常
2.查询时要保证查询id在数据库中一定存在,否则报异常
这里我们为了引起异常 查询一条数据库不存在的id=99的数据
按照我们的想法,既然查不到你返回null就可以了啊,为什么这么粗鲁的 异常?
这是因为hibernate觉得你在戏弄他!没错,你使用了懒加载,又是load方法,那么数据库一定有id=99的数据,
如果我们使用get方法,则返回null
注意:
如果我们查询是为了判断对象是否存在那我们使用session.get()方法!
session.get()
案例代码及讲解:
那get()方法我就用一句话总结吧,你让我去查,那么我就去给你查,查出来就给实体赋值,查不到就返回null
ps:最后一点小建议,希望你在看博的同时,自己真正的敲一遍。有任何意见或问题请留言
阅读全文
0 0
- hibernate加载策略session.load()与session.get()---【小白系列】0基础到熟练应用hibernate框架(五)
- hibernate的Configuration,SessionFactory,Session详解---【小白系列】0基础到熟练应用hibernate框架(二)
- hibernate中对象视图导航查询|加载策略---【小白系列】0基础到熟练应用hibernate框架(十四)
- hibernate主键生成策略---【小白系列】0基础到熟练应用hibernate框架(七)
- hibernate环境搭建教程---【小白系列】0基础到熟练应用hibernate框架(一)
- hibernate一级缓存---【小白系列】0基础到熟练应用hibernate框架(九)
- hibernate多对多关系---【小白系列】0基础到熟练应用hibernate框架(十三)
- hibernate事务---【小白系列】0基础到熟练应用hibernate框架(十)
- HibernateUtils工具---【小白系列】0基础到熟练应用hibernate框架(四)
- hibernatJPA---【小白系列】0基础到熟练应用hibernate框架(十五)
- hibernate增删改查案例教程---【小白系列】0基础到熟练应用hibernate框架(三)
- hibernate实体类的创建规则---【小白系列】0基础到熟练应用hibernate框架(六)
- hibernate实体类的三种状态---【小白系列】0基础到熟练应用hibernate框架(八)
- hibernate一对多|多对一关系---【小白系列】0基础到熟练应用hibernate框架(十二)
- hibernate session.load 与session.get 方法
- struts2参数封装---【小白系列】0基础到熟练应用struts2框架(五)
- Hibernate session.get session.load
- 小白记录~Hibernate中session.load方法与session.get方法区别
- FTP显示文件的修改时间与实际时间不一致
- 推荐几个安卓开发者常用并且实用的网站
- Github使用之clone项目
- bzoj2049Cave 洞穴勘测
- 屏蔽ios弹性滑动
- hibernate加载策略session.load()与session.get()---【小白系列】0基础到熟练应用hibernate框架(五)
- keras 迁移学习, 微调, model的predict函数定义
- python_爬虫http协议
- 流程控制
- 并查集 排列组合 In Chinese Restaurant:URAL
- Conky--linux自定义桌面监控
- 2017身残志坚的定西考生魏祥上清华
- windows部署iBase4J
- H5滚动翻页