Hibernate 加载策略得总结
Hibernate 加载策略得总结
加载策略(优化查询):
策略种类:
延迟加载: 等到使用的时候才会加载数据.
立即加载: 不管使用不使用,都会立刻将数据加载.
策略的应用:
类级别的加载策略.
关联级别的加载策略
----------------------------------------------------------------------
类级别加载策略:
1. get/load
get: 立即查询数据库,将数据初始化
load: hbm文件中,class元素的lazy属性绝对类级别load方法的加载策略
true:先返回一个代理对象.使用代理对象的属性时,才去查询数据库.
false: 与get一致,会立即加载数据
----------------------------------------------------------------------
关联级别加载策略
在查询有关联关系的数据时,加载一方的数据是否需要将另一方立即查询出.
默认: 与我关联的数据,在使用时才会加载.
集合(一对多):
set
lazy: 是否对set数据使用懒加载
true:(默认值) 对集合使用才加载
false: 集合将会被立即加载
extra: 极其懒惰,如果使用集合时,之调用size方法查询数量, Hibernate会发送count语句,只查询数量.不加载集合内数据.
fetch : 决定加载集合使用的sql语句种类
select: (默认值) 普通select查询
join: 表链接语句查询集合数据
subselect: 使用子查询 一次加载多个Customer的订单数据
fetch lazy 结论
---------------------------------------------------------------- ----------------------------------
select true 默认值, 会在使用集合时加载,普通select语句
select false 立刻使用select语句加载集合数据
select extra 会在使用集合时加载,普通select语句,如果只是获得集合的长度,会发送Count语句查询长度.
join true 查询集合时使用表链接查询,会立刻加载集合数据
join false 查询集合时使用表链接查询,会立刻加载集合数据
join extra 查询集合时使用表链接查询,会立刻加载集合数据
subselect true 会在使用集合时加载,子查询语句
subselect false 会在查询用户时,立即使用子查询加载客户的订单数据
subselect extra 会在使用集合时加载,子查询语句,如果只是获得集合的长度,会发送Count语句查询长度.
----------------------------------------------------------------------------------------------------------
多对一:
lazy
false 加载订单时,会立即加载客户
proxy 看客户对象的类加载策略来决定
no-proxy : 不做研究.
fetch=
select : (默认值)使用普通select加载
join : 使用表链接加载数据
fetch lazy 结果
---------------------------------------------------
select false 加载订单时,立即加载客户数据.普通select语句加载客户.
select proxy 类加载策略为:lazy=false 同上
lazy=true 加载订单时,先不加载客户数据.使用客户数据时才加载
join false 使用表链接查询订单以及对应客户信息.lazy属性无效
join proxy 使用表链接查询订单以及对应客户信息.lazy属性无效
-------------------------------------------------------------------------------------------------------------------
批量加载:
set
batch-size: 决定一次加载几个对象的集合数据. in 条件加载多个用户的订单.
检索总结:(参考)
|
检索策略 |
优点 |
缺点 |
优先考虑使用的场合 |
|
立即检索 |
对应用程序完全透明,不管对象处于持久化状态还是游离状态,应用程序都可以从一个对象导航到关联的对象 |
(1)select语句多 (2)可能会加载应用程序不需要访问的对象,浪费许多内存空间。 |
(1)类级别 (2)应用程序需要立即访问的对象 (3)使用了二级缓存 |
|
延迟检索 |
由应用程序决定需要加载哪些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并节省内存空间。 |
应用程序如果希望访问游离状态的代理类实例,必须保证她在持久化状态时已经被初始化。 |
(1)一对多或者多对多关联 (2)应用程序不需要立即访问或者根本不会访问的对象 |
|
表连接检索 |
(1)对应用程序完全透明,不管对象处于持久化状态还是游离状态,都可从一个对象导航到另一个对象。 (2)使用了外连接,select语句少 |
(1)可能会加载应用程序不需要访问的对象,浪费内存。 (2)复杂的数据库表连接也会影响检索性能。 |
(1)多对一或一对一关联 (2)需要立即访问的对象 (3)数据库有良好的表连接性能。 |
延迟检索中注意:
Customer Get(int id)
Return Session.load(Customer.class,id);
1. layz=false
2. 在Service层获得在页面要上要用到的属性=> 在Service层中确保数据已经
保证再session关闭时,取出对象数据。
Hibernate 加载策略得总结的更多相关文章
- hibernate框架学习之数据抓取(加载)策略
Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...
- java之hibernate之加载策略和抓取策略
1.加载策略:指hibernate查询数据时,采用什么样的方式将数据写入内存.Hibernate中提供了两种方式来加载数据:懒加载和即时加载. 2.懒加载又称延迟加载,指使用hiberante API ...
- hibernate框架学习第六天:QBC、分页查询、投影、数据加载策略、二级缓存
QBC查询 1.简单查询 Criteria c = s.createCriteria(TeacherModel.class); 2.获取查询结果 多条:list 单挑:uniqueResult 3.分 ...
- 【死磕 Spring】----- IOC 之 Spring 统一资源加载策略
原文出自:http://cmsblogs.com 在学 Java SE 的时候我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Reso ...
- 【sping揭秘】6、IOC容器之统一资源加载策略
Spring中的resource 我们先看看类之间的关系 注意我们的application是间接继承了resourceloader的,也就是说我们的application其实就是一个resourcel ...
- ios资源加载策略
做了好几个月的ios,大框架都是别人搭好的,自己只是实现逻辑,很是失落.慢慢开始整理学习一些概念类的东西吧,希望自己能提高点. cocos2d-x从cocos2d-2.0-x-2.0.2开始,考虑到自 ...
- mybatis 加载策略及注解开发
1. 延迟策略 在需要用到数据时在加载相关数据,常用于一对多关系, 优点:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能, 缺点:当需要用到数据时,才会进行数据库查询,这样在大批量数据查 ...
- Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)
假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=H ...
- hibernate学习(6)——加载策略(优化)
1. 检索方式 1 立即检索:立即查询,在执行查询语句时,立即查询所有的数据. 2 延迟检索:延迟查询,在执行查询语句之后,在需要时在查询.(懒加载) 2. 检查策略 1 类级别检索:当前的类的 ...
随机推荐
- HTML+CSS+JS 传智 详细笔记
HTML(1)- -毕向东老师对Html的简介 CSS- -毕老师对CSS的简介 Javascript- -毕老师对JS的简介 html&css等等练习表(W3Cscholl) js练习表回顾 ...
- Linux命令之locate命令
1.locate locate 命令是文件搜索命令,它的搜索速度比 find 命令更快,原因在于它不搜索具体目录, 而是搜索一个数据库,这个数据库包含本地所有文件信息.Linux系统自动创建这个数据库 ...
- 小程序之image图片实现宽度100%,高度自适应
哇 今天搞了半天 图片一直变形啊啊啊啊 宽度100% 高度给100% 给auto 完全不管用啊啊啊啊 然后最后最终!!!! 首先我们要给我们的图片一个100%的宽度!让它自适应!! .g ...
- 后台返回数据判断是http还是后台本地图片 indexOf
今天的笔记呢,记录一下 其实这个应该后台去判断的,但是因为某种原因,今天我们前台做一下判断 事情是这样的,后台返回我一个url 这个url有的http开头的 也有他后台本地的例如:/img/1.pn ...
- hdu 6170 Two strings dp
Two strings Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Prob ...
- PyEngine3D
git clone https://github.com/ubuntunux/PyEngine3D cd PyEngine3D pip install -r requirements.txt pyth ...
- Java String常用的两个方法
- 哨兵查找法(明解c语言) + 函数式宏
//哨兵法,就是将待查找的元素加入待查找的数组的后面,这样可以提高性能(在数据量很庞大的时候体现出来) #include <stdio.h> #define FAILURE -1 //使用 ...
- web 常用颜色
1. 推荐链接 RGB颜色值与十六进制颜色码转换工具 Web上16种基本颜色名称 WEB标准颜色 2. 个人常用 除了三原色,还有 #daf1ef#4DBCB0#ccc
- C语言之网络编程(服务器和客户端)
Linux网络编程 1. 套接字:源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字.其用于标识客户端请求的服务器和服务. 常用的TCP/IP协议的3种套接字类型如下所示. (1)流套接 ...