hibernate缓存分:一级缓存、二级缓存、三级缓存

一级缓存:Session内的缓存

实例:

/*一级缓存:
* session内的缓存
* */
@Test
public void test1(){ /*使用缓存之前,2条结果*/
Session session =HibernateSessionFactory.getSession();
//第一次查询
Emp emp = (Emp) session.load(Emp.class, (short)7369);
System.out.println(emp.getEname()+"\t"+emp.getDept().getDname()); session.close();
//同一个session内,再次获取ID为7639的员工
Emp emp2 = (Emp) session.load(Emp.class, (short)7369);
System.out.println(emp2.getEname()+"\t"+emp2.getDept().getDname()); }

二级缓存:

进程 或集群范围内的缓存。可以被所有session共享,生活周期与SessionFactory一样,
* 二级缓存是可配置的插件,hibernate打包一些开源缓存实现,提供对它们的内置支持

用到的jar包和ehcache.xml

hibernate.cfg.xml配置:

<!--二级缓存配置开始====  -->
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>

实体类映射文件Emp.hbm.xml中配置:

 <!--  实体类中二级缓存配置-->
<cache usage="read-write"/>

测试代码:

/*二级缓存:
* 进程 或集群范围内的缓存。可以被所有session共享,生活周期与SessionFactory一样,
* 二级缓存是可配置的插件,hibernate打包一些开源缓存实现,提供对它们的内置支持
* */ @Test
public void test2(){
Session session=HibernateSessionFactory.getSession(); try {
Emp emp = (Emp) session.load(Emp.class, (short)7369);
System.out.println(emp.getEname()+"\t"+emp.getSal());
session.close();
Session session2=HibernateSessionFactory.getSession();
Emp emp2 = (Emp) session2.load(Emp.class, (short)7369);
System.out.println(emp2.getEname()+"\t"+emp2.getSal());
session2.close();
} catch (Exception e) {
e.printStackTrace();
}
}

三级缓存,查询缓存:

hibernate.cfg.xml中配置,所有配置均在二级缓存配置之上加入:

<property name="cache.use_query_cache">true</property>

测试代码:

/*query查询缓存*/
@Test
public void test3(){
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery("from Emp where empno=7369");
Emp emp = (Emp) query.setCacheable(true).uniqueResult();
System.out.println(emp.getEname()+"\t"+emp.getSal()); session.close();
//在不同的session范围内,现次获取ID=7369的学生信息
Session session2=HibernateSessionFactory.getSession();
Query query2=session.createQuery("from Emp where empno=7369");
Emp emp2 = (Emp) query.setCacheable(true).uniqueResult();
System.out.println(emp2.getEname()+"\t"+emp2.getSal());
}

链接:http://pan.baidu.com/s/1geVPuoV 密码:s3sh

hibernate-cache的更多相关文章

  1. org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge]

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFacto ...

  2. Invocation of init method failed; nested exception is org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.impl

    严重: Exception sending context initialized event to listener instance of class org.springframework.we ...

  3. Unable to create requested service org.hibernate.cache.spi.RegionFactory

    hibernate 4.3.11+struts2.3.28.1+spring 4.2.5,在搭框架的时候,报的这个错误: Unable to create requested service org. ...

  4. Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.cache.ehcache.EhCacheRegionFactory] as strategy [org.hibernate.cache.spi.RegionFac

    警告: Exception encountered during context initialization - cancelling refresh attempt: org.springfram ...

  5. Hibernate缓存之Aop+cache

    在上一篇涉及到查询缓存的功能时除了需要在配置文件中开启缓存外,还需要在业务代码中显示调用setCacheable(boolean)才可以打开查询缓存的功能,这样做,无疑是破坏了封装性,所以就诞生了利用 ...

  6. ehcache-----在spring和hibernate下管理ehcache和query cache

    1. 在Hibernate配置文件中设置: <!-- Hibernate SessionFactory --> <bean id="sessionFactory" ...

  7. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  8. Struts2+Spring+Hibernate框架整合总结详细教程

    一.SSH三大框架知识总结 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...

  9. Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

    Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...

  10. Hibernate关联映射 映射文件的配置

    一:多对一单向关联 首先我们必须创建两个实体类 例如:Dept类 public class Dept { private Integer deptNo; private String dName; p ...

随机推荐

  1. AngularJs中,如何在render完成之后,执行Js脚本

    AngularJs是Google开源的前端JS框架.使用AngularJs, 我们能够容易地.健壮的开发出类似于Gmail一样的单页Web应用.AngularJs这个新兴的MVC前端框架,具有以下特点 ...

  2. SQL SERVER普通用户需要什么权限才能执行sp_configure命令

    SQL SERVER普通用户需要什么权限才能执行sp_configure命令呢? 例如如下存储过程所示 CREATE PROCEDURE PRC_TEST AS BEGIN    exec sp_co ...

  3. Android:开发环境搭建相关问题

    1.Android.ADT.SDK概念与关系 SDK:Software Development Kit,中文意思是“软件开发工具包”.这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关 ...

  4. Linux下监控服务器状态命令——top

    ----------------------------------工作中常用的命令,来判断服务器状态是否正常------------------------------------- top命令作用 ...

  5. 搭建自己的PHP框架心得(二)

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  6. C++基础——模拟事务 (1)COMMAND模式

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  7. PostgreSQL-系统表、系统视图

    系统表显示的都是当前操作数据库下的信息,对象都来自当前数据库.因为不同的系统表都用不同名的字段来记录不同对象的oid,这个表引用那个表,那个表又引用另一个表,所以这些字段名不太好记. pg_class ...

  8. Java goto,continue,break,标签

    goto:在Java中goto仍是保留字,但并未在语言中使用它:Java没有goto. 保留字的定义:       保留字(reserved word),指在高级语言中已经定义过的字,使用者不能再将这 ...

  9. [转]17个新手常见Python运行时错误

    原址:http://www.oschina.net/question/89964_62779?p=1 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的 ...

  10. [mysql]三种方法为root账户指定密码

    前言:前段时间把mysql安装后一直没管它,当时就在奇怪为什么mysql登陆不要密码,原来一直用的超用户账户登陆的(简称超级用户) 其实只怪自己太无知,之前一直用的phpbydamin进行的数据库的可 ...