1.一级缓存
一级缓存:session级别的缓存,当我们使用了get/load/find/Query等,查询出的数据,默认在session中就会有一份缓存数据,缓存数据就是从数据库将一些数据拷贝一放到对应的地方.每次获取数据时,会先从缓存中查找, 如果再去数据库查询,提高了查询效率,减少了数据库的直接操作. 一级缓存不可卸载(只要使用session肯定就用到了session的缓存,是hibernate控制的 我们不能手动配置).
2. 二级缓存
二级缓存是sessionFactory级别的缓存,(比session的作用范围要广), 可以做到多个session共享此数据.
1).sessionFactory缓存分类:
a).内缓存:存储着预制的sql语句,对象和数据库的映射信息
b).外缓存:存储的是我们允许使用二级缓存的对
2).二级缓存使用场景:
a).不经常进行改动的信息,多次查询的信息
b).对数据并发时的安全没有要求,
3).查询数据规则:先从一级缓存中查找如果没有在从二级缓存中查找 如果还没有,再从数据库中查询.
3.二级缓存的配置流程
1.1)在cfg文件中打开二级缓存(默认是false)
1.2)指定使用二级缓存的factory
1.3)在mapping下配置要使用的二级缓存的类,也可以在hbm文件的class中通过cache标签设置.
2.在cfg的同级目录下配置ehcache.xml文件
2.1)disStore 配置的缓存磁盘的路径
2.2)default-cache 默认配置
2.3)cache 某个需要缓存的类单独设置
<!--二级缓存的配置代码实现 -->
<!-- 默认是不使用二级缓存,设置使用二级缓存-->
<property name="hibernate.cache.use_second_level_cache">false</property>
<!-- b. 指定使用哪一个缓存框架(默认提供的) -->
<!--<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> -->
<!-- 开启查询缓存
如果没有开启二级缓存,只开启了查询缓存此时,二级缓存中只存储查询出来的数据的id,如果后续在查询相同的数据,根据缓存中的id分条查询数据
-->
<property name="hibernate.cache.use_query_cache">true</property>
<propertyname="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<!-- 指定哪一些类,需要加入二级缓存 -->
<mapping resource="com/xalo/model/ClassRoom.hbm.xml"/>
<!-- 指定使用二级缓存的对象并指定并发策略-->
<class-cache usage="read-only" class="com.xalo.model.ClassRoom"/>