您的位置:首页 > 其它

Hibernate基本特性二 -- 一级缓存

2015-12-24 22:11 316 查看
Hibernate基本特性之一级缓存机制

一级缓存被称为Session级别的缓存。(默认启用)

每个Session都有自己独立的缓存区,该缓存区随着Session创建而开辟,随着Session.close()而释放。

该缓存区可以存储当前Session关联的对象(持久对象)。

一级缓存的好处:

Hibernate在查询时,先去缓存查找,如果缓存没有才去DB查询。如果利用Session对同一个对象查询多次,第一次去DB,后续会从缓存中获取,从而减少与DB的交互次数。

管理一级缓存的方法:

session.evict(obj);//将obj清除

session.clear();//清除所有对象

session.close();//清除所有对象并关闭与数据库的连接

示例代码:

package test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import util.HibernateUtil;
import entity.Foo;

/**
* 测试Hibernate一级缓存
*
*/
public class TestCache {
//@Test
public void test1(){
Session session = HibernateUtil.openSession();

Foo foo = (Foo) session.load(Foo.class,1);
System.out.println("foo:"+foo.getName());

//此次没有触发查询,而是从缓存中查找
Foo foo2 = (Foo) session.load(Foo.class,1);
System.out.println("foo2:"+foo2.getSalary());

session.close();
}

@Test
public void test2(){
Session session = HibernateUtil.openSession();

Foo foo = (Foo) session.load(Foo.class,1);
System.out.println("foo:"+foo.getName());

//session.evict(foo);//将foo从缓存中清除
session.clear();//清除所有缓存

//还会从数据库中查询
Foo foo2 = (Foo) session.load(Foo.class,1);
System.out.println("foo2:"+foo2.getSalary());

session.close();
}
}
test1的运行结果截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: