hibernate的一级缓存和二级缓存
2015-03-11 20:39
218 查看
最近在看hibernate的内层实现,说到内层实现就要说到反射和hibernate的缓存机制。今天看到一位大神的博客写得很好,果断转载过来。
在这提供链接
点击打开链接
hibernate有session缓存和sessionFactory缓存两种形式
一、session缓存(又称为事物缓存),是hibernate内置的,不可卸除
缓存范围:session缓存数据只能被当前session对象访问,缓存生命周期依赖于session生命周期。
当session对象调用save()方法来保存一个对象的时候,数据会放入缓存中,当session对象调用get()、load()方法时,数据也会被放进session的缓存对象中。
二、sessionFacotry(又称应用缓存),使用第三方插件,可拔插
缓存范围:sessionFactory缓存可以被应用中的任何session访问,不同的session可共享缓存,缓存生命周期依赖于应用的生命周期。
测试一级缓存:
class test_Level_first_cache{
public Static void main(String[] args){
Session session=hibernateUtil.getSessionFactory().openSession();
Transaction tx=null;tx=session.beginTransaction();
//从数据库中取出id为1的test对象
Test test=(Test)session.get(Test.class,"1");
system.out.println("test.getName()");
Test test1=(Test)session.get(Test.class,"1");
system.out.println("test1.getName()");
}
}
输出结果发现第一次hibernate发出检索看缓存里面是否有id为1的数据,发现没有,hibernate个数据库直接发送select语句,
查出结果,将数据放入session缓存中,
当我们再调用get()方法查找id为1的数据的时候,hibernate发现在缓存中有这条数据,
直接取出这个对象,所以前后两次get()的是同一个对象。
什么时候用二级缓存,用二级缓存的适用条件:
1)经常被访问;
2)不会被经常改动,改动不大;
3)数量有限;
二级缓存实现原理:
当hibernate得到数据库数据的时候,将数据放入缓存中,缓存和map差不多,有自己的oid相当于map中的key,
和对应特定的对象相当于map中的value,当将数据放入缓存中时,hibernate将数据的oid放入key中,
而pojo(简单java对象)放入value中,当下一次hibernate检索缓存时,hibernate通过oid检索一级缓存,当有二级缓存时则检索二级缓存,
若都没用检索到则直接给数据库发送select语句。
相关文章推荐
- hibernate 一级缓存二级缓存及查询缓存
- Hibernate的一级缓存与二级缓存
- Hibernate一级缓存,二级缓存
- Hibernate一级缓存,二级缓存
- Hibernate的一级缓存、二级缓存和查询缓存
- Hibernate一级缓存、二级缓存
- 对Hibernate一级缓存与二级缓存的解析
- 对Hibernate一级缓存与二级缓存的解析
- Java - 谈一谈Hibernate的一级缓存、二级缓存和查询缓存。
- hibernate一级缓存和二级缓存的区别
- Hibernate一级缓存和二级缓存的区别
- hibernate事务,一级缓存,二级缓存
- hibernate 一级缓存和二级缓存区别总结
- 黑马程序员:关于hibernate一级缓存二级缓存,查询缓存
- hibernate之 一级缓存和二级缓存
- hibernate一级缓存和二级缓存的区别
- Hibernate——一级缓存__二级缓存__查询缓存
- Hibernate的一级缓存、二级缓存和查询缓存。
- hibernate一级缓存和二级缓存的区别
- Hibernate一级缓存和二级缓存