- 浏览: 248387 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
javatozhang:
讲解的的确不错。很实用。
Hibernate数据拦截与事件监听 -
sjx19871109:
更正一个地方:<event type="pos ...
Hibernate search -
xifan:
你好,楼主。
mutable="false 好像是 ...
Hibernate持久化对象生命周期 -
leo_cao:
很好,很实用
Hibernate数据拦截与事件监听 -
fehly:
47816778 写道你这样不会出现number 的精度问题吗 ...
Hibernate Annotations
持久层缓存的级别
- 事务级别的缓存
- 应用(进程)级别的缓存
- 分布式级别的缓存
Hibernate的一级缓存
Hibernate中的缓存分成两级:一级缓存和二级缓存
Hibernate的一级缓存是内置的缓存,不能通过程序代码或者配置进行人为的取消,同时一级
缓存通过Session对象实现缓存,所以一级缓存也称为Session缓存
一级缓存的管理
使用evict()方法从缓存中移除缓存对象
使用clear()方法从缓存中清除所有对象
使用Session对象contains()判断是否在缓存中(true/false)、flush()和setReadOnly()方法
Hibernate的二级缓存
Hibernate的二级缓存由SessionFactory对象负责管理,是应用级别的缓存,可以缓存整个应
用的持久化对象
Hibernate的二级缓存又称SessionFactory缓存
Hibernate的二级缓存
缓存名称 缓存类型 对应的适配器类
Hashtable 内存 org.hibernate.cache.HashtableCacheProvider
EHCache 内存,硬盘 org.hibernate.cache.EhCacheProvider
OSCache 内存,硬盘 org.hibernate.cache.OSCacheProvider
SwarmCahe 分布式(不支持分布式事务) org.hibernate.cache.SwarmCacheProvider
JBoss Cache1.x 分布式(支持分布式事务) org.hibernate.cache.TreeCacheProvider
JBoss Cache2. 分布式(支持分布式事务) org.hibernate.cache.jbc2.JBossCacheRegionFactory
EHCache作为二级缓存
应用EHCache作为二级缓存
<hibernate-configuration> <session-factory> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> </session-factory> </hibernate-configuration>
编写ehcache.xml
<ehcache> <diskStore path="java.io.tmpdir" /> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" /> <cache name="com.rbh.examples.Product" maxElementsInMemory="2000" eternal="true" timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" /> </ehcache>
maxElementsInMemory 设置保存在内存中的缓存对象的最大数量
eternal 设置缓存中对象是否永远不过期,如果值为true,超过设置被忽略,缓存对象永不过期
timeToIdleSeconds 设置缓存中对象在它过期之前的最大空闲时间,单位为秒
timeToLiveSeconds 设置缓存中对象在它过期之前的最大生存时间,单位为秒
overflowToDisk 设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中
二级缓存的策略
只读缓存(read-only)
读/写缓存(read-write)
不严格的读/写缓存(nonstrict-read-write)
事务缓存(transactional)
缓存组件对缓存策略的支持
在对应的持久化类中设定使用缓存的策略
添加
<cache usage="read-write" />
list读取数据,读的数据可以帮助增加二级缓存,不会读取缓存中的数据.
iterator会查询二级缓存数据,如果读的数据不在二级缓存 n+1次查询记录
二级缓存 缓存集合对象
demo
ehcache.xml
<ehcache> <cache name="com.rbh.examples.Category" maxElementsInMemory="2000" eternal="true" timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" /> <cache name="com.rbh.examples.Category.products" maxElementsInMemory="1000" eternal="true" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="false" /> </ehcache>
Category.hbm.xml
<hibernate-mapping> <class name="com.rbh.examples.Category" table="CATEGORY"> <cache usage="read-write" /> <set name="products" cascade="save-update" inverse="true"> <cache usage="read-write" /> <key column="category_id"></key> <one-to-many class="com.rbh.examples.Product" /> </set> </class> </hibernate-mapping>
二级缓存的管理
SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evict(Category.class);
把二级缓存的Category的对象全部清除
SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictCollection("com.rbh.examples.Category.products");
把Category对象的下的products集合所缓存的对象清除
SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictEntity("com.rbh.examples.Category");
把Category对应的所有持久化对象的二级缓存都清除
SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictEntity("com.rbh.examples.Category",new Integer(1));
把指定的持久化对象二级缓存清除
查询缓存(Query Cache)
<hibernate-configuration> <session-factory> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <property name="hibernate.cache.use_query_cache">true</property> </session-factory> </hibernate-configuration>
Transaction tx = session.beginTransaction(); Query query = session.createQuery("from Category"); query.setCacheable(true); List<Category> list = query.list();
memcached作为二级缓存
memcached是一款知名的,高性能的,分布式的内存对象缓存系统,主要用于在web应用中降低数据库的负载,它通过缓存数据库的查询结果,减少对数据库的访问次数,用以提高web应用的访问速度
Hibernate-memcached
Hibernate-memcached是CacheProvider接口的memcached实现
需要用到 memcached-2.x.jar,spy-2.4.jar,commons-codec-1.x.jar,hibernate-memcached-1.2.2.jar
使用memcached windows的服务器
添加Hibernate.hbm.xml
<property name="cache.provider_class"> com.googlecode.hibernate.memcached.MemcachedCacheProvider </property>
发表评论
-
Hibernate与Struts2,Spring
2010-04-25 19:23 1545Struts2 框架 Struts是Apache ... -
Hibernate search
2010-04-22 15:28 6204搜索引擎 全文搜索引 ... -
Hibernate Annotations
2010-04-21 14:54 7010在过去几年里,Hibernate不断发展,几乎成为Jav ... -
Hibernate性能优化
2010-04-20 16:25 1389使用dynamic-insert与dynamic-update ... -
Hibernate数据拦截与事件监听
2010-04-17 19:33 6517拦截器(Interceptor)org.hibernate.I ... -
Hibernate过滤器
2010-04-16 17:31 1489Hibernate过滤器的概念 Hibernate过滤器类 ... -
Hibernate继承映射
2010-04-15 19:48 1016继承映射 3种方式,继承关系映射到数据库的表中 1.继承关 ... -
Hibernate的事务管理
2010-04-14 20:00 1317数据库事务数据库的事务指的是把一系列的数据库操作组成一个单元, ... -
Native SQL查询
2010-04-13 23:15 1219HQL写的有点累有些东西 ... -
HQL查询
2010-04-13 20:46 1528Query接口Query类型与org.hibernate.Cr ... -
Criteria查询
2010-04-12 18:42 12383Hibernate的三种查询方式 1.HQL (Hibern ... -
映射多对多关联关系
2010-04-10 15:19 1365多对多单向关联 使用多对多关联,需要借助一个起中介作用的连接 ... -
映射一对一关联关系
2010-04-09 21:08 977共享主键关系 两个关联表使用相同的主键值 类: ... -
Hibernate映射多对一关联关系
2010-04-08 15:03 1449多对一的单向关联 表于表的关联可以分为一对一,一对多,多对一 ... -
Hibernate组件映射
2010-04-07 16:03 5228组件Components 除了粗粒度的对象模型设计(一个表 ... -
Hibernate的集合映射
2010-04-06 15:31 1238Set 接口 set类型的对象,被加入的对象不能重复, ... -
浅谈OSIV与泛型DAO模式
2010-04-05 22:13 3595open session in view 简称 O ... -
java.lang.NoClassDefFoundError: org/hibernate/Session的异常
2010-03-22 15:15 7105今天写程序突然报这个错误,挺郁闷的,因为这个包是导入别人的(事 ... -
Hibernate持久化对象生命周期
2010-03-19 14:41 2333持久化对象生命周期 Persisten ... -
Hibernate标示符属性的生成策略
2010-03-18 16:53 1502标示符属性 Hibernate中的标示符属性,也可以称为Hi ...
相关推荐
**Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...
### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...
Hibernate缓存.docHibernate缓存.doc
Java Hibernate缓存深入详解
### Hibernate缓存机制及优化策略 #### 一、概述 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域被广泛应用于数据库操作。它提供了丰富的缓存机制来提高应用性能并降低数据库访问压力。本文将...
**标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...
Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...
关于hibernate缓存的一个ppt课件,60+幻灯片,有需要的可以看一下
【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...
**Hibernate缓存详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提高数据访问性能,Hibernate引入了缓存机制,它可以减少对数据库的直接访问,从而提升应用的...
本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### Hibernate缓存原理 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许Java...通过理解Hibernate缓存和事务管理,以及如何有效地执行查询,开发者可以创建高效、健壮的Java应用程序,降低与数据库交互的复杂性,同时提升系统性能。
**标题解析:** "Hibernate教程25_Hibernate缓存" 这个标题表明了我们要讨论的是关于Hibernate框架的第25个教程,重点是它的缓存机制。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的...
【Hibernate缓存管理】是数据库持久化框架Hibernate中优化性能的关键技术。缓存的主要目的是减少对数据库的直接访问,提高应用程序的运行效率。缓存的数据是数据库中数据的副本,存在于内存或硬盘中,便于快速读取。...
这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...
【Hibernate缓存详解】 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。其缓存机制是提升系统性能的关键所在。本篇将深入探讨Hibernate的缓存机制,包括一级缓存和二级...