`
Harold_xlp
  • 浏览: 159318 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate的SESSION与SESSIONFACTORY

 
阅读更多

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");

分享到:
评论

相关推荐

    Hibernate中的sessionFactory

    在Hibernate3之后,SessionFactory提供了一个`getCurrentSession()`方法,可以便捷地获取与当前线程绑定的Session,简化了线程安全的管理。通过`session=factory.getCurrentSession();`这样的方式,可以确保每个线程...

    HibernateSessionFactory 代码

    本篇文章将深入探讨`HibernateSessionFactory`及其在Hibernate中的作用,以及如何使用它来实现增、删、查、改(CRUD)操作。 `SessionFactory`是Hibernate的核心组件,它是线程安全的,负责管理数据库连接和会话。`...

    Hibernate-nosession

    然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为重要。本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么...

    Hibernate面试题

    在准备Hibernate相关的面试题时,深入理解其核心概念,如映射类型、Session与SessionFactory的作用,以及缓存机制等,是至关重要的。这不仅能帮助你在面试中脱颖而出,还能提升你作为Java开发者的技术深度。通过实际...

    HibernateUtil

    《深入理解HibernateUtil:高效管理Hibernate Session与SessionFactory》 Hibernate,作为Java领域广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。而HibernateUtil则是为了方便开发者管理Hibernate的...

    hibernate和session学习

    总结来说,Hibernate简化了Java应用与数据库之间的交互,通过`SessionFactory`和`Session`的使用,我们可以方便地进行数据操作,而无需关注底层的SQL细节。学习并熟练掌握Hibernate和Session,对于提升Java开发的...

    Hibernate Session释放模式

    在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...

    hibernate session生命周期示例

    Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括保存、更新、删除和检索数据。它的生命周期主要包括以下几个阶段: 1. **创建Session**: 当我们...

    新Hibernate SessionFactory().getCurrentSession()猫腻

    当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...

    Hibernate(session管理)

    Session是Hibernate的主要工作单元,它是应用程序与数据库之间的桥梁。它负责保存、检索和更新Java对象,同时处理事务和缓存机制。Session对象具有短暂性,通常在一次业务操作或一个用户会话中创建并使用,然后关闭...

    重写hibernate的session简单增删改查

    Hibernate的Session是与数据库交互的主要接口,它负责对象的持久化操作,如保存、更新、删除和查询。Session提供了事务管理和缓存管理的功能,确保了数据的一致性和性能。 1. 增加(Create) 在Hibernate中,增加...

    使用 HibernateSessionFactory 类

    - **查询**: `SessionFactory`创建的`Session`对象可以用于执行HQL(Hibernate Query Language)和 Criteria API 查询,以更面向对象的方式操作数据库。 - **实体管理**: `Session`通过`SessionFactory`实例化、...

    HibernateSessionFactory

    用于获得Session会话及关闭Session会话

    springboot集成hibernate

    通过以上步骤,我们就完成了Spring Boot与Hibernate的集成,且在DAO层使用SessionFactory进行数据库操作。这种方式允许我们充分利用Hibernate的灵活性,同时避免了JPA的一些限制。在实际项目中,根据需求选择适合的...

    JavaEE技术-自主学习.zip_hibernate_hibernate session _javaee映射.xml

    JavaEE技术是企业级应用程序开发的重要框架,而Hibernate作为其中的一员,是用于简化Java与数据库交互的ORM(对象关系映射)工具。本教程聚焦于使用Hibernate进行数据操作,并通过XML文件来配置数据库连接和对象-...

    HibernateSessionFactory.java Hibernate使用的整合的工具文件

    Session s= HibernateSessionFactory.getSession(); 就是Hibernate的工具java类

    Hibernate_session_factory_配置.docx

    在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....

    HibernateSession , Transaction 研究

    在Hibernate中,`Session`充当了应用程序与数据库之间的桥梁,它是持久化操作的主要接口。`Session`负责管理对象的状态,执行SQL语句,并处理事务。当创建一个新的`Session`实例时,它会与数据库建立一个连接。在...

    hibernate session.doc

    在理解Hibernate框架中,Session是核心组件之一,它充当了应用程序和数据库之间的桥梁。...理解`Session`的工作原理,以及与`SessionFactory`、`Configuration`的关系,能够帮助开发者更好地利用Hibernate进行ORM编程。

Global site tag (gtag.js) - Google Analytics