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();//清除所有对象并关闭与数据库的连接
示例代码:
一级缓存被称为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的运行结果截图:
相关文章推荐
- Activity启动模式
- POJ-1456 Supermarket(贪心,并查集优化)
- C字符串
- fork系统调用
- Java+MySQL实现网络爬虫程序
- 第三十八课 用break和continue改变流程 【项目1-2】
- iOS开发——单例的实现与使用
- MySql表中key的区别
- DOM扩展之Selectors API
- 并查集
- vc捕获matlab异常
- data-ng-show 指令
- 如何让C#像JavaScript一样编程
- 将GridView中的数据导出到Excel / Word中
- Swift 学习之集合的基本用法
- cgi stress test, mongoose dead
- jq实战-表单验证
- Use EnCase to acquire data from a smartphone
- 实战c++中的智能指针unique_ptr系列-- 使用std::unique_ptr代替new operator(错误:‘unique_ptr’ is not a member of ‘std’)
- 实战c++中的智能指针unique_ptr系列-- 使用std::unique_ptr代替new operator(错误:‘unique_ptr’ is not a member of ‘std’)