缓存在hibernate中是天生就有的,是一级缓存,当session关闭时一级缓存就失效了

一级缓存是内置的,生效范围是在同一个session中才行.二级缓存是需要配置才有

判断当前项在不在一级缓存中,contains

session.beginTransaction();

User u1 = (User) session.get(User.class, 27);
//session.clear();
//session.evict(u1);
System.out.println(session.contains(u1));
session.getTransaction().commit();

clear方法和evict方法

clear方法用于将所有对象从一级缓存中清除
evict方法用于将指定对象从一级缓存中清除

二级缓存 

在Hibernate中二级缓存在SessionFactory中实现,由一个SessionFactor
的所有Session实例所共享。Session在查找一个对象时,会首先在自己的
一级缓存中进行查找,如果没有找到,则进入二级缓存中进行查找,如果二级缓
存中存在,则将对象返回,如果二级缓存中也不存在,则从数据库中获得。

1.在根目录中配置ehcache.xml 

<?xml version="1.0" encoding="UTF-8"?>
<ehcache> <diskStore path="java.io.tmpdir"/> <defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
</ehcache>

2.pom.xml中添加jar包依赖

<!-- \hibernate-release-4.2.0.Final\hibernate-release-4.2.0.Final\lib\optional\ehcache -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.2.0.Final</version>
</dependency>

3.开启二级缓存

开启二级缓存 使用EhCache实现  在hibernate.cfg.xml配置

路径是导入的jar包(hibernate-ehcache)的EhCacheRegionFactory路径

<property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

4.使用2级缓存  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.kaishengit.pojo"> <class name="User" table="user">
<!-- 这里表示使用2级缓存,缓存user,也只有查询user才使用2级缓存 -->
<cache usage="read-write"/>
<id name="id">
<generator class="native"/>
</id> <property name="username"/>
<property name="password"/> <set name="addressSet" cascade="delete" inverse="true">
<!-- 这里表示查询Address,2级缓存有效,会缓存address的id,所以再使用时会有根据id查询address的sql
如果要缓存address对象,就要在address.hbm.xml中配置.-->
<cache usage="read-write"/>
<key column="userid"/>
<one-to-many class="Address"/>
</set> </class> </hibernate-mapping>

read-only:只读。对于不会发生改变的数据,可以使用只读性缓存。
read-write:可读写缓存。用于对数据同步要求严格的情况。
nonstrict-read-write:如果程序对并发访问下的数据同步要求不是很严格,
且数据更新操作不频繁时可采用该缓存策略

hibernate 缓存 4.3的更多相关文章

  1. Hibernate 缓存机制浅析

    1. 为什么要用 Hibernate 缓存? Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数据源 ...

  2. hibernate缓存机制(转)

    原文出处:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是 ...

  3. 【转】hibernate缓存:一级缓存和二级缓存

    什么是缓存? 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能.Hibernate在进行 ...

  4. Hibernate缓存(转)

    来自:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是一个 ...

  5. 初识Hibernate 缓存

    生活就像一杯咖啡,让你我慢慢的品尝,品尝它的苦涩和甘甜...... 一.什么是Hibernate缓存. 解析:白话来说就是缓存数据的容器 官方标准点缓存:是计算机领域的概念,它介于应用程序和永久性数据 ...

  6. Hibernate缓存原理与策略

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  7. [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Hibernate缓存原理与策略 Hibernate缓存原理:

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  9. Hibernate 缓存机制

    一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...

  10. hibernate缓存说明

    hibernate缓存说明: 1.一级缓存(session级别缓存)     一级缓存,不是用来提升性能,是用来处理事务的 2.二级缓存(sessionFactory级别缓存):     二级缓存,对 ...

随机推荐

  1. Android UI设计

    Android UI设计--PopupWindow显示位置设置 摘要: 当点击某个按钮并弹出PopupWindow时,PopupWindow左下角默认与按钮对齐,但是如果PopupWindow是下图的 ...

  2. Android Animation学习(一) Property Animation介绍

    Android Animation Android framework提供了两种动画系统: property animation (introduced in Android 3.0)和view an ...

  3. ORA-600 [kcratr_scan_lastbwr] 逻辑坏块

    数据库版本: 11.2.0.3 问题现象: 今天在启动一台测试数据库的时候,发现db不能open,报错如下: ERROR at line 1:ORA-00600: internal error cod ...

  4. N个任务掌握java系列之统计一篇文章中单词出现的次数

    问题:统计一篇文章中单词出现的次数 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中. (2)定义一个Map,key是字符串类型,保存单词:valu ...

  5. vs2010更改默认环境设置

    今天刚刚装vs2010手欠点击了新建团队项目,在百度上各种查找说让我去 visual studio tools的命令提示中进行 devenv命令行修改 ResetString但是没找到我设置文件的路径 ...

  6. BZOJ 2329: [HNOI2011]括号修复( splay )

    把括号序列后一定是))))((((这种形式的..所以维护一个最大前缀和l, 最大后缀和r就可以了..答案就是(l+1)/2+(r+1)/2...用splay维护,O(NlogN). 其实还是挺好写的, ...

  7. android-意图Intent

    Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递 Intent 来 ...

  8. 为Chrome添加https搜索 自定义地址栏搜索引擎

    转载 http://www.appinn.com/chrome-search-https-google/ 还可以参考一下 ://www.cnblogs.com/iftreasure/archive/2 ...

  9. Linux下使用ps命令来查看Oracle相关的进程

    Linux下可以使用ps命令来查看Oracle相关的进程 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [oracle@ www.linuxidc.com ...

  10. jquery ajax方法和其他api回顾

    >> $ele.load(url, data, callback); //带data参数时为POST请求,否则为GET请求 // $('#testload').load('data.htm ...