(31)java web的hibernate使用-一级缓存,二级缓存
参考:https://blog.csdn.net/miachen520/article/details/52195832
hibernate自带一级缓存 和 二级缓存
一,一级缓存:
基于Session的缓存,缓存内容只在当前session有效,session关闭,缓存内容失效。作用范围小,持续时间短。
二,二级缓存:
Hibernate提供了基于应用程序级别的缓存, 可以跨多个session,即不同的session都可以访问缓存数据。 这个缓存也叫二级缓存。
Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可;不想用,直接移除,不影响代码。
Hibernate提供对其他缓存方案的支持,不想用hibernate的默认二级缓存,可以使用其他:
三,hibernate二级缓存配置
1) 开启二级缓存
2)指定缓存框架
3)指定那些类加入二级缓存
<!-- 1. 开启二级缓存 --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 2. 指定使用哪一个缓存框架(默认提供的) --> <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> <!-- 开启查询缓存 --> <property name="hibernate.cache.use_query_cache">true</property> <!-- 加载所有映射 --> <mapping resource="gy/hibernate/Account.hbm.xml" /> <!-- 3. 指定哪一些类,需要加入二级缓存 --> <!-- 1:事务(Transaction)仅在受管理的环境中可用。它保证可重读的事务隔离级别,可以对读/写比例高,很少更新的数据采用该策略。 2:读写(read-write)使用时间戳机制维护读写提交事务隔离级别。可以对读/写比例高,很少更新的数据采用该策略。 3:非严格读写(notstrict-read-write)不保证Cache和数据库之间的数据库的一致性。使用此策略时,应该设置足够的缓存过期时间,否则可能从缓存中读出脏数据。当一些数据极少改变,并且当这些数据和数据库有一部份不量影响不大时,可以使用此策略。 4:只读(read-only)当确保数据永不改变时,可以使用此策略。 --> <class-cache usage="read-write" class="gy.hibernate.Account"></class-cache>
集合缓存 :<collection-cache>