二级缓存在Hibernate中有自己的实现叫做HashTable,但是不建议用它进行商用,可以用来进行测试.Hibernate的二级缓存有专门的缓存策略提供商(Cache Providers),例如EHCache,OSCache等.在这篇文章中我们主要介绍一下Hibernate二级缓存EHCache的用法.
二级缓存EHCache的配置和使用.
*将ehcache.xml文件拷贝到src下(在Hibernate3\etc\ehcache.xml路进行.从hibernate相关的例子中找配置文件)如下图:
默认配置.
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
配置的解释如下:
可以进行单独配置
maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/>
*在hibernate.cfg.xml文件中加入缓存产品提供商
* 启用二级缓存,这也是它的默认配置,在hibernate.cfg.xml配置文件中进行启动二级缓存配置.
*指定哪些实体类使用二级缓存
可以在映射文件中采用标签指定或在hibernate.cfg.xml文件中统一指定
注意使用的策略,通常采用read-only和read-write.
例如在配置文件中统一进行配置.(此处笔者将对Student类进行配置)
*以上便完成了EHCache的基本配置,接下来便是在具体的代码中运用
例如在两个Session中发Load查询,因为我们配置了二级缓存,所以在第二次Load的过程中不在发出查询语句,而是直接从二级缓存中获取数据.
测试代码如下:
[java]
/**
* 二级缓存测试代码
*
*/
public class CacheTest extends TestCase {
/**
* 开启二级缓存
* 在两个session中发load查询
*/
public void testCache() {
Session session = null;
try {
//获取session
session = HibernateUtils.getSession();
//开启事务
session.beginTransaction();
//第一次用load查询id为1的学生
Student student = (Student)session.load(Student.class, 1);
System.out.println("student.name=" + student.getName());
//提交
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
try {
session = HibernateUtils.getSession();
session.beginTransaction();
第二次用load查询id为1的学生
Student student = (Student)session.load(Student.class, 1);
//不会发出查询语句,因为配置二级缓存,session可以共享二级缓存中的数据
//二级缓存是进程级的缓存
System.out.println("student.name=" + student.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace