Hibernate在进行数据读取时会先在缓存里找,缓存中不存在时再去数据库查询,合理使用hibernate缓存能够有效的利用内存,减少物理数据库调用的次数.
ORM缓存策略
1.事务级缓存(session level cache)
session生命周期的缓存,关闭session即消亡
2.应用级/进程级缓存(sessionFactory level cache)
某个应用中的共享缓存,多个事务可以共享,在sessionFactory层实现,所有sessionFactory创建的session可以共享.
Hibernate数据缓存
1.内部缓存(session level)一级缓存
是事务级的缓存,session中维护的一个Map,Map的key是包含了数据类型和id,从数据库加载的数据都会进入Map缓存中,通过session加载数据时会先在session缓存里找,一级缓存是session的private数据,session实例消亡就清除了,在应用中就保持在一次请求的开始和结束之间.
一般由Hibernate自动维护,也支持手动维护
session.evit(Object obj) 将持久化对象从一级缓存中清除.
session.clear() 清空一级缓存
session.contains(Object obj) 判断指定的对象是否存在于一级缓存中.
session.flush() 刷新一级缓存区的内容,使缓存与数据库数据保持同步.
2.二级缓存(sessionFactory level)
包含了应用级和分布式的缓存,由本sessionFactory的所有session实例共享,session操作时会先查一级缓存,然后查二级缓存,最后再查物理数据库.要使用二级缓存必须要进行配置.
适合用缓存的数据
1.不会被其他应用修改
包括直接用JDBC修改等,因为其他应用修改了数据之后hibernate并不知道,不能自动更新缓存,不过可以手动更新缓存
2.数据大小可以接受,毕竟内存资源也不多
3.数据更新频率低(比如数据字典等常量数据)
4.可能被系统频繁使用
5.非关键的数据
6.不会被并发访问的数据
常用的二级缓存插件
EHCache org.hibernate.cache.EhCacheProvider
OSCache org.hibernate.cache.OSCacheProvider
SwarmCahe org.hibernate.cache.SwarmCacheProvider 提供了分布式
JBossCache org.hibernate.cache.TreeCacheProvider 提供了分布式
HIBERNATE的配置文件:
<bean id="SessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="DataSource" />
<property name="configLocation">
<value>classpath:/resources/hibernate.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.OSCacheProvider</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">25</prop>
</props>
</property>
</bean>
在映射文件***.hbm.xml中指定实体的缓存同步策略
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class>
<!-- 设置该持久化类的二级缓存并发访问策略-->
<cache usage="read-write"/>
<set name = "xxx">
<cache usage="read-only" />
</set>
</class>
</hibernate-mapping>
在JAVA代码中通过下面的方式,将数据塞入二级缓存中:
getHibernateTemplate().setCacheQueries(true);
return getHibernateTemplate().find("from BjHealthDictionaryInfo");
分享到:
相关推荐
在Hibernate3之后,SessionFactory提供了一个`getCurrentSession()`方法,可以便捷地获取与当前线程绑定的Session,简化了线程安全的管理。通过`session=factory.getCurrentSession();`这样的方式,可以确保每个线程...
本篇文章将深入探讨`HibernateSessionFactory`及其在Hibernate中的作用,以及如何使用它来实现增、删、查、改(CRUD)操作。 `SessionFactory`是Hibernate的核心组件,它是线程安全的,负责管理数据库连接和会话。`...
然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为重要。本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么...
在准备Hibernate相关的面试题时,深入理解其核心概念,如映射类型、Session与SessionFactory的作用,以及缓存机制等,是至关重要的。这不仅能帮助你在面试中脱颖而出,还能提升你作为Java开发者的技术深度。通过实际...
《深入理解HibernateUtil:高效管理Hibernate Session与SessionFactory》 Hibernate,作为Java领域广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。而HibernateUtil则是为了方便开发者管理Hibernate的...
总结来说,Hibernate简化了Java应用与数据库之间的交互,通过`SessionFactory`和`Session`的使用,我们可以方便地进行数据操作,而无需关注底层的SQL细节。学习并熟练掌握Hibernate和Session,对于提升Java开发的...
在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...
Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括保存、更新、删除和检索数据。它的生命周期主要包括以下几个阶段: 1. **创建Session**: 当我们...
当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...
Session是Hibernate的主要工作单元,它是应用程序与数据库之间的桥梁。它负责保存、检索和更新Java对象,同时处理事务和缓存机制。Session对象具有短暂性,通常在一次业务操作或一个用户会话中创建并使用,然后关闭...
Hibernate的Session是与数据库交互的主要接口,它负责对象的持久化操作,如保存、更新、删除和查询。Session提供了事务管理和缓存管理的功能,确保了数据的一致性和性能。 1. 增加(Create) 在Hibernate中,增加...
- **查询**: `SessionFactory`创建的`Session`对象可以用于执行HQL(Hibernate Query Language)和 Criteria API 查询,以更面向对象的方式操作数据库。 - **实体管理**: `Session`通过`SessionFactory`实例化、...
用于获得Session会话及关闭Session会话
通过以上步骤,我们就完成了Spring Boot与Hibernate的集成,且在DAO层使用SessionFactory进行数据库操作。这种方式允许我们充分利用Hibernate的灵活性,同时避免了JPA的一些限制。在实际项目中,根据需求选择适合的...
JavaEE技术是企业级应用程序开发的重要框架,而Hibernate作为其中的一员,是用于简化Java与数据库交互的ORM(对象关系映射)工具。本教程聚焦于使用Hibernate进行数据操作,并通过XML文件来配置数据库连接和对象-...
Session s= HibernateSessionFactory.getSession(); 就是Hibernate的工具java类
在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....
在Hibernate中,`Session`充当了应用程序与数据库之间的桥梁,它是持久化操作的主要接口。`Session`负责管理对象的状态,执行SQL语句,并处理事务。当创建一个新的`Session`实例时,它会与数据库建立一个连接。在...
在理解Hibernate框架中,Session是核心组件之一,它充当了应用程序和数据库之间的桥梁。...理解`Session`的工作原理,以及与`SessionFactory`、`Configuration`的关系,能够帮助开发者更好地利用Hibernate进行ORM编程。