读书人

Hibernate优化对策

发布时间: 2012-10-14 14:55:08 作者: rapoo

Hibernate优化策略

1、抓取策略:

当提取一个对象的关联对象时,所要求的策略。

fetch="select"


customer: lazy="false" 或者 session.get(Customer.class,id)

set(order lazy="false")

当加载sessin.get(Customer.class)时,会发出两条SQL


customer: lazy="true" 或者session.load()

set(order lazy="true")

当得到customer属性的时候,发出第一条SQL语句

当迭代order集合的时候,发出第二条SQL语句


sesssion.createQuery("from Customer where id in(1,2,3,4,5,6,7,8)");

从customer获取order集合时,将发出9条SQL语句,这个时候的性能是很差的。

这个时候会导致性能的下降。如果要提高性能,必须fetch="select"与batch-size两个属性结合起来使用 batch-size的为一次性抓取数据的次数


fetch="join"

customer和set集合的延迟加载将失效,这个时候,只发出一条sql语句

fetch="subselect"


sesssion.createQuery("from Customer where id in(1,2,3,4,5,6,7,8)");



2、缓存


一级缓存


session级别的缓存

1、session级别的缓存是私有缓存

2、session级别的缓存数据存在于session中

3、session缓存中的内容只有当前线程能够访问

4、什么时候session缓存就不起作用了

1、当session关闭的时候,session的缓存清空了
2、当执行session.clear方法时,会清空session的所有的缓存中的数据
3、当执行session.evict(object)时,会清空该对象的缓存的数据



二级缓存

sessionFactory级别的缓存

1、sessionFactory级别的缓存是共享缓存,数据是共享的数据

2、sessionFactory级别的缓存在什么情况下使用:

1、如果二级缓存中的数据被不断的修改,这样,hibenate的性能会下降

3、二级缓存怎么样起作用:

hibernate的二级缓存是通过导入第三方组件来实现的

4、二级缓存是如何配置的

针对对象的二级缓存

1、在hibenate的配置文件中

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

<property name="cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>


2、ehcache.xml在src的目录下

3、

查询缓存


1、在java的配置文件中,开启查询缓存

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

2、query.setCacheable(true);

读书人网 >编程

热点推荐