A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 htb52110 于 2018-1-15 20:21 编辑

16、检索策略
16.1、延迟加载
延迟加载 是hibernate为提高程序执行的效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。
load方法采用的策略延迟加载.
get方法采用的策略立即加载。
检索策略分为两种:
类级别检索
关联级别检索
16.2、类级别管理
类级别检索是通过session直接检索某一类对应的数据,例如
Customer c=session.load(Customer.class,1)
Session.createQuery(“from Order”)
类级别检索策略分为立即检索与延迟检索,默认是延迟检索,类级别的检索策略可以通过<class>元素的lazy属性来设置 ,默认值是true
hbm配置文件中设置
在类中使用注解
如果将lazy设置为false,代表类级别检索也使用立即检索。这时loadget就一样,都是立即检索。
初始化延迟代理对象
16.3、关联级别检索
查询到某个对象,获得其关联的对象或属性,这种称为关联级别检索,例如
                 c.getOrders().size()
                 c.getName()
              对于关联级别检索我们就要研究其检索策略(抓取策略)
16.4、检索策略【抓取策略】
延迟加载
延迟加载 hibernate为提高程序执行的效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。
load方法采用的策略延迟加载.
get方法采用的策略立即加载。
检索策略分为两种:
类级别检索
关联级别检索
类级别检索
类级别检索是通过session直接检索某一类对应的数据,例如
Customer c=session.load(Customer.class,1)
Session.createQuery(“from Order”)
类级别检索策略分为立即检索与延迟检索,默认是延迟检索,类级别的检索策略可以通过<class>元素的lazy属性来设置 ,默认值是true
在hbm配置文件中设置
在类中使用注解
如果将lazy设置为false,代表类级别检索也使用立即检索。这时load与get就一样,都是立即检索。
如果对一个延迟代理对象进行初始化
关联级别检索
查询到某个对象,获得其关联的对象或属性,这种称为关联级别检索,例如
         c.getOrders().size()
         c.getName()
         对于关联级别检索我们就要研究其检索策略(抓取策略)

抓去策略介绍
指的是查找到某个对象后,通过这个对象去查询关联对象的信息时的一种策略。
一对一 <one-to-one>
一对多(多对一) <set>下有<one-to-many>  <many-to-one>
多对多 <set>下有<many-to- many>
我们主要是在<set>与<many-to-one>或<one-to-one>上设置fetch  lazy
例如:查询一个客户,要关联查询它的订单
客户是一的一方,在客户中有set集合来描述其订单,在配置中我们是使用
<set>
         <one-to-many>
</set>..
可以在set标签上设置两个属性  fetch   lazy
Fetch主要描述的是SQL语句的格式(例如是多条,子查询,多表联查
Lazy 控制SQL语句何时发送
例如:在查询一个订单时,要查询客户信息
<many-to-one> 或<one-to-one>
也可以设置fetch  lazy
Fetch主要描述的是SQL语句的格式(例如是多条,子查询,多表联查
Lazy 控制SQL语句何时发送
总结:
讲解抓取策略
在两方面设置
<set fetch=”” lazy=””>
<many-to-one fetch=”” lazy=””>
<one-to-one>
注解配置抓去策略
<setse>设置的fetchlazy可以使用下面注解来描述

<many-to-one><one-to-one>上如何设置 fetchlazy

set 上的fetch和lazy
set上的fetch与lazy它主要是用于设置关联的集合信息的抓取策略。
Fetch可取值有:
SELECT 多条简单的sql   (默认值)
JOIN 采用迫切左外连接
SUBSELECT 将生成子查询的SQL
lazy可取值有:
TURE 延迟检索   (默认值)
FALSE 立即检索
EXTRA 加强延迟检索(及其懒惰)
one上的fetch和lazy
<set fetch lazy>它主要是设置在获取到一的一方时,如果去查询多的一方。
<many-to-one><one-to-one>如果去查询对方。
对于程序 就是在多的一方如何查询一的主方信息
例如:获取到一个订单对象,要查询客户信息。
Fetch可取值:
                select 默认值,代表发送一条或多条简单的select语句
                 join  发送一条迫切左外连接
lazy可取值
                        false 不采用延迟加载
                 proxy 默认值 是否采用延迟,需要另一方的类级别延迟策略来决定
                 no-proxy 不用研究

1 个回复

倒序浏览
我来占层楼啊   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马