二级缓存:存放公有数据
1、适用场合:
1、数据不能频繁更新
2、数据能公开,私密性不是很强
2、hibernate本身并没有提供二级缓存的解决方案
3、二级缓存的实现是依赖于第三方供应商完成的
ehcache
oscache
jbosscache
swamchache
4、二级缓存的操作
1、二级缓存存在sessionFactory中
2、生命周期:与sessionFactory保持一致
3、使用二级缓存的步骤
1、在hibernate.cfg.xml
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
2、让某一个对象进入到二级缓存中(以下选一种配置方式,推荐第二种)
* 在配置文件中
<class-cache usage="read-only" class="cn.itcast.hiberate.sh.domain.Classes"/>
* 在映射文件中
<cache usage="read-only"/>
3、使用
session.get/session.load
5、查询缓存
在二级缓存的基础上 在cfg.xml加上
<property name="cache.use_query_cache">true</property>,只能在session.createQuery()中使用
示例:
hibernate.cfg.xml
1 <?xml version='1.0' encoding='utf-8'?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <!-- 7 一个session-factory只能连接一个数据库 8 --> 9 <session-factory> 10 <!-- 11 数据库的用户名 12 --> 13 <property name="connection.username">root</property> 14 <!-- 15 密码 16 --> 17 <property name="connection.password">root</property> 18 <!-- 19 url 20 --> 21 <property name="connection.url"> 22 jdbc:mysql://localhost:3306/itcast_sh_hibernate 23 </property> 24 <!-- 25 作用:根据持久化类和映射文件生成表 26 validate 27 create-drop 28 create 29 update 30 --> 31 <property name="hbm2ddl.auto">update</property> 32 <!-- 33 显示hibernate内部生成的sql语句 34 --> 35 <property name="show_sql">true</property> 36 <property name="format_sql">true</property> 37 <!-- 38 告诉hibernate,session由当前线程产生 39 --> 40 <property name="current_session_context_class">thread</property> 41 42 <!-- 43 开启二级缓存 44 --> 45 <property name="cache.use_second_level_cache">true</property> 46 47 <!-- 48 二级缓存的提供商 49 --> 50 <property name="cache.provider_class"> 51 org.hibernate.cache.EhCacheProvider 52 </property>
<!--查询缓存,用于createQuery代码-->
> 54 55 <mapping resource="cn/itcast/hiberate/sh/domain/Classes.hbm.xml" /> 56 57 <!-- 58 <class-cache usage="read-only" class="cn.itcast.hiberate.sh.domain.Classes"/> 59 --> 60 </session-factory> 61 </hibernate-configuration>
Classes.java
1 package cn.itcast.hiberate.sh.domain; 2 3 import java.io.Serializable; 4 import java.util.Set; 5 6 public class Classes implements Serializable{ 7 private Long cid; 8 private String cname; 9 private String description; 10 11 public Long getCid() { 12 return cid; 13 } 14 15 public void setCid(Long cid) { 16 this.cid = cid; 17 } 18 19 public String getCname() { 20 return cname; 21 } 22 23 public void setCname(String cname) { 24 this.cname = cname; 25 } 26 27 public String getDescription() { 28 return description; 29 } 30 31 public void setDescription(String description) { 32 this.description = description; 33 } 34 35 public Set<Student> getStudents() { 36 return students; 37 } 38 39 public void setStudents(Set<Student> students) { 40 this.students = students; 41 } 42 43 private Set students; 44 }