Hibernate框架(三)

检索策略

 

检索数据时注意问题:

1 不浪费内存

2 提高查询效率,发送更少的SQL语句

检索策略(默认延迟检索)

立即检索: 立即加载检索方法指定的对象

延迟检索: 延迟加载检索方法指定的对象。在使用具体的属性时,再进行加载,lazy 属性

 

无论 <class> 元素的 lazy 属性是 true 还是 false, Session 的 get() 方法及 Query 的 list() 方法在类级别总是使用立即检索策略。

 

lazy: 主要决定 orders 集合被初始化的时机.

fetch: 取值为 “select” 或 “subselect” 时, 决定初始化 orders 的查询语句的形式;  若取值为”join”, 则决定 orders 集合被初始化的时机

 

<set> 元素的 lazy 和 fetch 属性:

 

延迟加载时,初始化集合代理类实例:

1 通过 Hibernate.initialize() 静态方法显式初始化

2 应用程序第一次访问集合属性: iterator(), size(), isEmpty(), contains() 等方法

增强延迟检索(lazy 属性为 extra): 与 lazy=“true” 类似. 主要区别是增强延迟检索策略能进一步延迟 Customer 对象的 orders 集合代理实例的初始化时机

 

<set> 元素有一个 batch-size 属性, 用来为延迟检索策略或立即检索策略设定批量检索的数量.

 

Hibernate 提供了以下几种检索对象的方式:

1 导航对象图检索方式:  根据已经加载的对象导航到其他对象

2 OID 检索方式:  按照对象的 OID 来检索对象

3 HQL 检索方式: 使用面向对象的 HQL 查询语言

4 QBC 检索方式: 使用 QBC(Query By Criteria) API 来检索对象. 这种 API 封装了基于字符

5串形式的查询语句, 提供了更加面向对象的查询接口.

6本地 SQL 检索方式: 使用本地数据库的 SQL 查询语句

 

 

二级缓存

Hibernate中提供了两个级别的缓存

第一级别的缓存是 Session 级别的缓存,它是属于事务范围的缓存。这一级别的缓存由 hibernate 管理的

第二级别的缓存是 SessionFactory 级别的缓存,它是属于进程范围的缓存

 

SessionFactory 缓存分类:

内置缓存: Hibernate 自带的, 不可卸载.

外置缓存(二级缓存): 一个可配置的缓存插件.

 

I.   配置启用 hibernate 的二级缓存

<property name="cache.use_second_level_cache">true</property>

II.  配置hibernate二级缓存使用的产品

<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

III. 配置对哪些类使用 hibernate 的二级缓存

<class-cache usage="read-write" class="com.**.Employee"/>

2). 集合级别的二级缓存的配置

 

I. 配置对集合使用二级缓存

 

<collection-cache usage="read-write" collection="com.**.emps"/>

也可以在 .hbm.xml 文件中进行配置

<set name="emps" table="GG_EMPLOYEE" inverse="true" lazy="true">

<cache usage="read-write"/>

    <key>

        <column name="DEPT_ID" />

    </key>

    <one-to-many class="com.**.Employee" />

</set>

II. 注意: 还需要配置集合中的元素对应的持久化类也使用二级缓存! 否则将会多出 n 条 SQL 语句.

查询缓存: 默认情况下, 设置的缓存对 HQL 及 QBC 查询时无效的, 但可以通过以下方式使其是有效的

<property name="cache.use_query_cache">true</property>

 

Session

三种管理 Session 对象的方法:

Session 对象的生命周期与本地线程绑定

Session 对象的生命周期与 JTA 事务绑定

Hibernate 委托程序管理 Session 对象的生命周期

 

hibernate.current_session_context_class 属性用于指定 Session 管理方式, 可选值包括

thread: Session 对象的生命周期与本地线程绑定

jta*: Session 对象的生命周期与 JTA 事务绑定

managed: Hibernate 委托程序来管理 Session 对象的生命周期

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流光影下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值