一:知识点
1:缓存概念与分类
缓存:在内存中开辟一块空间,把本来应该存储在数据库的数据,存储在硬盘上。
Hibernate有三种缓存:
一级缓存
二级缓存
查询缓存
2:各种缓存的特点
(1)session级别的缓存为一级缓存,session之间不能共享缓存
(2)二级缓存又叫sessionFactory级别的缓存,可以跨session
(3)查询缓存:重复性查询,查询对象跟条件一致,可以从二级缓存找。 如果查询不重复,不会使用二级缓存。
3:如何配置二级缓存
(1)、首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置:
<property name="hibernate.cache.use_second_level_cache">true</property>
(2)、Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个
缓存工具。如下配置指定Hibernate使用EhCache缓存工具。
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
(3):加入ehcache.xml
<--
maxElementsInMemory 最大缓存对象
eternal = false内存可以清除
timeToIdleSeconds 如果对象多长时间没有查询,将对象清除
timeToLiveSeconds
对象最大生存时间,一般大于timeToIdleSeconds
overflowToDisk 内存溢出的时候,存放到硬盘上 <diskStore path="java.io.tmpdir"/>
-->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
(4):在需要二级缓存的对象前面加上Annotation
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Entity
public class User {
执行查询,报错
Exception in thread "main" org.hibernate.HibernateException:
could not instantiate RegionFactory [org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge]
(5):需要加入Ecache的jar包ehcache-1.2.3.jar
执行查询
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
(6):需要加入commons-logging-1.1.jar
二:缓存demo