传智播客学习之Hibernate性能优化

前面学习了Hibernate的基本配置,个人觉得Hibernate的精华在于它的性能优化,今天重点总结一下Hibernate性能优化方面的知识.

一、延迟加载

1.概述

Hibernate主要是通过代理机制来实现延迟加载的,他的具体过程是,Hibernate从数据库获取某一个对象数据时,获取某一个对象的集合属性值时,或者是某一对象关联的另一对象时,由于没有使用该对象的数据(除对象标识符)Hibernate并不从数据库加载真正的数据,而只是为该对象创建一个代理对象来代表这个对象,这个对象上的所有属性为默认值,只有在真正想需要使用该对象的数据时才创建这个真实的对象,真正从数据库中加载他的数据。

注意:get方法默认立即加载。

2.关闭延迟加载

由于有时我们根据业务需要需要立即加载,那么我们可以在配置文件中启用和关闭延迟加载功能。

1) 加载单个个体,用sessionget()方法

2) 加载某个实体,对集合属性设置,设置集合属性元素的lazy属性

3) 加载某个实体,对关联的另一个实体,设置many-to-one或者one-to-onelazy

4) 大对象延迟加载,只需要在property元素中设置lazy属性就可以了

二、抓取策略

1.单端关联

这主要是设置fetch属性。他有两个可选值。

Select:默认,当需要使用到关联对象的数据时,另外单独发送一跳select语句抓取当前对象的关联对象的数据,即延迟加载

Join:同一个select语句使用外连接来获得对象的数据和他关联对象的数据,此时关联对象的延迟加载失效。

2.集合属性

在集合属性的映射元素上加fetch属性,有三个可选值

Select:默认,当需要使用到关联对象的数据时,另外单独发送一跳select语句抓取当前对象的关联对象的数据,即延迟加载

Join:同一个select语句使用外连接来获得对象的数据和他关联对象的数据,此时关联对象的延迟加载失效。

Subselect:另发一条查询语句或子查询语句抓取前面查询到所有实体对象关联集合。

三、缓存的管理

1.一级缓存的管理

一级缓存即session.Session级别的缓存一般是由Hibernate自动管理的,一般情况下无需进行干涉。当用sessioncrud以及调用list(),itererate(),filter()方法,如session还没有相应对象,会将对象加入session缓存中。Hibernate会根据缓存中对象的状态变化同步数据库中的数据状态,关闭session,会清空session中所有对象。

Session提供两个手动管理一级缓存的方法,即evictclear方法。

2.二级缓存的管理

二级缓存是可配的插件,可用于进程/集群范围缓存.他们缓存都是状态(按值返回), 而不是真正的持久化对象.对于特定的数据项来说缓存的并发策略定义了事务的隔离细节.每个类或者每个集合的二级缓存是可选可配的.每个缓存都使用了自己的缓存区域.

1) 适合二级缓存的类的特征:

很少改变

不共享的本地数据

不重要的数据

对象数量很少

被很多类引用

很少被更新

 2) 二级缓存安装需要两步:

1、决定使用哪个缓存并发策略

   <class name="auction.model.Category“ table="CATEGORY">

     <cache usage="read-write"/>

     </class>

    2、配置缓存过期和物理缓存属性(cache provider)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值