- 浏览: 286824 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
cheetah_ysc:
不错不错,我喜欢!
Java固定时间间隔执行 -
voyage_mh:
阿选百度竟然一下可以吧你百度出来
使用DWR注解Annotation
什么是缓存??
答:缓存就是在内存中开辟一块空间,把本来要存放的数据放在此内存中,将来要用的时候直接去内存中取出来用。
什么是一级缓存???
答:一级缓存也就是session缓存。 一个session是不可以访问其他session的,这就会导致出一个问题,当多线程访问同一数据的时候,在不做二级缓存的情况下,每个线程都要开一个session,也就是每一个session都要发出一个sql语句,这时对性能很不好,处理的办法就是开启二级缓存。
什么是二级缓存???
答:二级缓存也就是SessionFactory级别的缓存,可以越过session的存在。。。。什么时候用: 数据改动不平凡, 数据量不大, 常常被访问。
打开二级缓存的步骤:
-
设定hibernate.cfg.xml文件
<!-- 使用二级缓存 --> <property name="hibernate.cache.use_second_level_cache">true</property> <property name="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </property>
-
@Cache注解
package com.lbx.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @Entity //@BatchSize(size=2) @Cache(usage=CacheConcurrencyStrategy.READ_WRITE) public class Category { private int id; private String name; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
-
测试代码
package com.lbx.model.test; import java.util.List; import junit.framework.TestCase; import org.hibernate.Session; import org.hibernate.lucene.Text; import com.lbx.hibernate.Util.HibUtil; import com.lbx.model.Category; import com.lbx.model.Topic; public class Test extends TestCase { // 测试缓存问题(session级缓存) @Text public void testCache01(){ Session session = HibUtil.getSession(); session.beginTransaction(); //同一个session Topic t1 = (Topic)session.load(Topic.class, 1); System.out.println(t1.getTitle()); Topic t2 = (Topic)session.load(Topic.class, 1); System.out.println(t2.getTitle()); session.beginTransaction().commit(); session.close(); } @Text public void testCache02(){ Session session = HibUtil.getSession(); session.beginTransaction(); Topic t1 = (Topic)session.load(Topic.class, 1); System.out.println(t1.getTitle()); session.beginTransaction().commit(); session.close(); //一个session是不能访问其他session的 Session session2 = HibUtil.getSession(); session2.beginTransaction(); Topic t2 = (Topic)session2.load(Topic.class, 1); System.out.println(t2.getTitle()); session2.beginTransaction().commit(); session2.close(); } //测试二级缓存 @Text public void testCache03(){ Session session = HibUtil.getSession(); session.beginTransaction(); Category t1 = (Category)session.load(Category.class, 9); System.out.println(t1.getName()); session.beginTransaction().commit(); session.close(); //一个session是不能访问其他session的 Session session2 = HibUtil.getSession(); session2.beginTransaction(); Category t2 = (Category)session2.load(Category.class, 9); System.out.println(t2.getName()); session2.beginTransaction().commit(); session2.close(); } //测试查询缓存(都只发一条sql语句) @Text public void testCache04(){ Session session = HibUtil.getSession(); session.beginTransaction(); List<Category> lists1 = session.createQuery("from Category").setCacheable(true).list(); List<Category> lists2 = session.createQuery("from Category").setCacheable(true).list(); session.beginTransaction().commit(); session.close(); Session session2 = HibUtil.getSession(); session2.beginTransaction(); List<Category> lists3 = session2.createQuery("from Category").setCacheable(true).list(); List<Category> lists4 = session2.createQuery("from Category").setCacheable(true).list(); session2.beginTransaction().commit(); session2.close(); } }
注意:load默认是使用session缓存,iterate也是的, list默认是往二级缓存中加数据,但是查询的时候就不使用
重点:性能问题,先要考虑到本地内存取数据,不行再到本地硬盘读数据,再不行就到远程数据库中去读数据
发表评论
-
Hibernate查询优化
2010-12-24 14:12 1436查询性能优化 Hibernate可从下面几个方面来优化 ... -
Hibernate检索策略
2010-12-22 19:03 966Hibernate检索策略简介 类级别检索策略:Se ... -
hibernate中ID生成策越
2010-12-19 17:39 601Hibernate中的内置标识符的生成器的用法 ... -
基于Spring容器中的hibernateTemplate的分页
2010-12-03 12:54 3040基于hibernateTemplate的三个分页控制方法 p ... -
基于HibernateDaoSupport的分页
2010-12-03 12:53 2950基于HibernateDaoSupport的三个分页控制方法 ... -
Hibernate 事务的并发处理
2010-11-16 17:25 1296事务定义:数据库事务是指由一个或多个SQL语句组成的工作单元, ... -
Hibernate 1+N 问题
2010-11-15 21:45 38331+N问题的描述:举例,多个主题(Topic)属于一个帖子( ... -
通过Filter过滤器来实现OSIV模式
2010-11-13 14:44 2699使用Servlet过滤器来实现OSIV模式(Open Sess ... -
Hibernate多对多双向关联(多对多都很少用,双向都少用)
2010-10-26 16:11 983Order类 import java.io.Seria ... -
Hibernate多对多单向关联
2010-10-26 16:05 886Order类定义一个 Set products = new H ... -
Hibernate多对一单向关联
2010-10-26 15:55 1029在多方关联一方 Product(多方)(部分代码) pub ... -
Hibernate一对多单向关联
2010-10-26 15:50 943Category类(一方) import java.util ... -
Hibernate双向映射组件
2010-10-26 15:44 949和单向的类似,只不过多加了一个关联User关联Frofile, ... -
Hibernate组件单向映射
2010-10-26 15:37 463User类中有一个属性 private Profile pro ... -
Hibernate集合映射Set和Map
2010-10-26 15:32 944Set和Map基本和List一样 先看Set 只需要将L ... -
Hibernate集合映射
2010-10-26 15:28 819以User类为例: 在User类中定义一个List集合用于 ... -
Hibernate联合主键
2010-10-26 15:19 1062User类 package com.lbx.mo ... -
Hibernate 原理
2010-10-24 11:37 12081.Hibernate 的初始化. 读取Hibernat ... -
SessionFactory的一个简单的工具类
2010-10-21 12:10 978SessionFactory是一个重量级的类,不可以多new, ... -
使用xml的格式来配置Hibernate
2010-10-21 12:05 942一个简单的User类 相应的xml文件User.hbm ...
相关推荐
Hibernate缓存.docHibernate缓存.doc
**Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...
### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...
Java Hibernate缓存深入详解
Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...
本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### Hibernate缓存原理 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动...
【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...
关于hibernate缓存的一个ppt课件,60+幻灯片,有需要的可以看一下
**标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许Java...通过理解Hibernate缓存和事务管理,以及如何有效地执行查询,开发者可以创建高效、健壮的Java应用程序,降低与数据库交互的复杂性,同时提升系统性能。
### Hibernate缓存机制及优化策略 #### 一、概述 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域被广泛应用于数据库操作。它提供了丰富的缓存机制来提高应用性能并降低数据库访问压力。本文将...
Hibernate缓存原理及调优策略 Hibernate缓存原理调优策略
**Hibernate缓存详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提高数据访问性能,Hibernate引入了缓存机制,它可以减少对数据库的直接访问,从而提升应用的...
Hibernate 缓存是提高应用程序性能的关键机制,它分为一级缓存和二级缓存。一级缓存是 Hibernate Session 内部的缓存,它是默认开启且不可卸载的,主要用于保持 Session 内部数据状态同步。由于 Session 生命周期较...
这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...
**标题解析:** "Hibernate教程25_Hibernate缓存" 这个标题表明了我们要讨论的是关于Hibernate框架的第25个教程,重点是它的缓存机制。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的...
hibernate缓存深入详解