`
youyu4
  • 浏览: 440578 次
社区版块
存档分类
最新评论

Hibernate--缓存机制+懒加载

 
阅读更多

声明:本贴只用于个人学习和总结,没有任何商业用途,如果侵权或问题,请尽早联系,本人马上删贴。

 

Hibernate--缓存机制+懒加载

 

       Hibernate作为和数据库数据打交道的框架,自然会设计到操作数据的效率问题,而对于一些频繁操作的数据,缓存策略就是提高其性能一种重要手段,而hibernate框架是支持缓存的,而且支持一级和二级两种缓存,合理的使用缓存策略可以大大提高我们的操作数据效率,但是利用不能,可能会造成不必要的麻烦。

 

 

一级缓存

 

      Session缓存表示将查询结果放置到Session的临时存储空间(一级缓存中)。Hibernate框架默认支持一级缓存的。一级缓存的范围较小,一旦Session关闭,那么缓存失效。我们使用框架的各种方法,例如:get,load,save,update,delete等都支持一级缓存的。

 

 

 

二级缓存

 

      二级缓存其实就是将查询的数据放置在SessionFactory临时存储空间中,因为一个SessionFactory可以创建多个Session对象,所以范围比Session缓存的要大,多个Session可以共享二级缓存的数据。当然了二级缓存也不能存储大量的数据,这个要根据我们电脑配置进行设置。

 

 

二级缓存配置步骤

 

1. 在hibernate.cfg.xml配置文件中添加属性标签,启用二级缓存:

   <!--启用二级缓存 -->

   <propertyname="hibernate.cache.use_second_level_cache">true</property>

 

2. 二级缓存需要使用额外的第三方组件:ehcache。需要我们拷入对应的jar包,以及将对应的ehcache.xml存放到src目录下。在这个配置文件中,我们可以设置二级缓存的大小等。

 

3. 让框架识别添加入的ehcache缓存组件,在hibernate.cfg.xml配置文件中添加属性标签:

   <!--让框架识别ehcache缓存组件 -->

   <propertyname="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

 

4. 设置需要缓存的映射类,这里只是将一些查询操作比较频繁的类指定即可,哪些不经常操作的数据,是没有必要利用缓存的。这里例如:

   <!-- 将指定的类存放到二级缓存中,其中read-only是指放入缓存的数据是只读的-->

   <class-cache usage="read-only" class="com.ljh.hibernate.pojo.Student"/>

 

 

缓存的操作数据原理

                   

      查询数据时,会首先从一级缓存中取数据,如果取上,则直接使用,否则到二级缓存中取,如果取到则直接使用,否则,就会发送语句查询数据库。这样利用一级和二级缓存会提高访问效率。

 

 

二级缓存要注意

 

      当然使用二级缓存要慎重,要考虑数据的操作频繁性,服务器的硬件配置,数据的安全性等等方面,这样才能很好的利用二级缓存,提高我们操作数据的效率,否则使用不当就会带来不必要的麻烦。

 

 

 

Lazy(懒加载)

 

lazy(Hibernate的延迟加载功能):表示查询当前对象或关联对象数据时,不真正访问数据库,当使用对象非主键属性时,才真正发送查询语句,访问数据库。由于在某些情况下,查的数据在后续流程到可能用不上,如果做查询处理就多余了,所以延迟加载功能可以提高性能,合理使用即可。当然了Hibernate框架是通过Cglib代理来完成延迟加载功能的扩展的。

 

 

用到lazy地方总结

 

 

这里只是对类和映射的地方简单总结了一下,在实际运用中我们还要学会恰当的选择:



 

 

 

Lazy遇到的问题

 

      延迟加载功能是运用的一级缓存,也就是利用的是session的内存,一般情况下,我们在用完session后会进行关闭,但是关闭后我们就无法进行延迟查询数据了,也就是说,延迟加载功能就将失效,剖出异常:No Sesssion,所以这是需要我们解决的。

 

 

NoSession异常的解决

 

     a,解决原理:我们可以在dao层不进行session的关闭,通过前边学习的AOP编程思想,添加过滤器,在视图层进行数据取完毕后进行关闭session,这样就可以解决了NoSession异常了。但是怎么获取呢?这里又想到了前边学习的ThreadLocal,我们可以将Session对象放到Threadlocal对象中,和线程进行绑定,到视图层再通过ThreadLocal进行获取关闭即可。

 

 

     b,解决方案,AOP编程思想,想必都想到了spring框架了吧,的确,Spring框架提供了OpenSessionInViewFilter过滤器解决NoSession异常,这里我们只需要配置一下即可。在web.xml中进行此过滤器的配置即可:

<!-- 过滤器需要配置在Struts2框架过滤器前面,否则不起作用。 -->  
<filter>  
    <filter-name>OpenSessionInViewFilter</filter-name>  
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
</filter>  
<filter-mapping>  
    <filter-name>OpenSessionInViewFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>   

 

 

 

     c,配置的顺序问题,应该将openSessionInViewFilter配置到Struts2的流程前边,这是因为Filter执行顺序是从上向下的,而且Struts2框架的执行流程基本上包含了整个项目顺序的全部流程,MVC流程框架么,就体现在这里了。配置到Struts2框架的流程后边的过滤器是起不到作用的。



 

      我们可以通过合理使用缓存和lazy机制,使我们的程序变得性能更加强,考虑优化项目时,这两项是必须要考虑的。这些东西看起来是比较虚的内容,还需要我们通过一些小例子和实际应用加深理解。

  • 大小: 57.9 KB
  • 大小: 39.5 KB
分享到:
评论

相关推荐

    hibernate-3.2.6完整jar包+src

    2. ` cglib-nodep.jar`:用于创建代理对象,当Hibernate需要对非接口类型进行动态代理时,比如实现懒加载。 3. `asm-attrs.jar`:ASM库的一个版本,用于字节码操作,与CGLib一起工作。 4. `dom4j-1.6.1.jar`:DOM4J...

    hibernate3-2 官方jar包+api

    7. **Cache**:为了提高性能,Hibernate支持缓存机制,包括一级缓存(Session级别)和二级缓存(SessionFactory级别),能够减少对数据库的访问次数。 8. **懒加载(Lazy Loading)**:Hibernate支持延迟加载,即...

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    2. 性能优化:通过改进缓存机制和查询执行效率,提升了整体性能。 3. 更好的类型安全:引入了TypeSafe HQL,使得HQL查询更加健壮,减少了运行时错误。 二、Hibernate Annotations 3.4.0详解 Hibernate Annotations...

    hibernate-release-5.2.10

    6. **缓存**:Hibernate内置了二级缓存机制,可以通过配置使用如Ehcache这样的缓存提供者,提高性能。 7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@...

    hibernate-core 核心jar包

    9. **缓存机制**:Hibernate有两层缓存,第一层是Session级别的缓存,称为一级缓存;第二层是可选的,可以配置为使用第三方缓存服务,如Ehcache,称为二级缓存。缓存可以显著提升数据访问速度。 10. **事件和监听器...

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    - **延迟加载**: JPA的懒加载机制使得关联的对象只有在真正需要时才从数据库加载,提高性能。 **3. Hibernate JPA 2.1 API的使用** - **配置**: 开发者需要在pom.xml或build.gradle文件中添加`hibernate-jpa-2.1-...

    hibernate-release-5.0.0.Final(1).zip

    - 利用缓存机制提高数据访问速度,如一级缓存(Session级)和二级缓存(SessionFactory级)。 五、最佳实践 1. 合理设计实体类:遵循单一职责原则,避免实体类过于庞大,提高代码可维护性。 2. 选择合适的映射策略...

    Hibernate-annotations-3.4最新版本

    在实际应用中,Hibernate-annotations-3.4.0.GA还包含了事务管理、缓存机制等功能。@Transactional注解可以标记一个方法为事务边界,而Hibernate的二级缓存通过@Cacheable和@Cache配置,可以提高查询性能,降低...

    hibernate-distribution-3.3.2.GA-dist

    8. **延迟加载**:Hibernate的懒加载策略能有效减少数据库交互,只有在真正需要时才加载关联的对象,提高了程序效率。 9. **类型转换**:Hibernate提供了一系列的Type实现,将Java类型和数据库类型之间进行自动转换...

    hibernate-orm-master.zip

    五、缓存机制 Hibernate内置了两级缓存:一级缓存是Session级别的,每个Session都有自己的缓存,存储最近操作的对象;二级缓存可配置为进程级或集群级,用于存储经常访问的数据,提高性能。另外,Hibernate还支持第...

    hibernate-release-4.3.10.Final.zip

    - 注意懒加载(Lazy Loading)与级联操作的使用,防止“懒加载地狱”。 总结,`hibernate-release-4.3.10.Final`版本是Hibernate框架的一个重要里程碑,其提供的强大功能和优化特性使得Java开发者在处理数据库操作...

    hibernate-3.3.2.GA-jar包集合

    10. **缓存机制**: - Hibernate提供了第一级缓存(Session级别)和第二级缓存(SessionFactory级别),以提高性能。还可以集成第三方缓存如 Ehcache。 11. **关联映射**: - Hibernate支持一对一、一对多、多对...

    hibernate-orm-3.3源码

    为了提高性能,Hibernate 提供了二级缓存机制。它允许在 SessionFactory 级别共享对象,减少对数据库的访问。常用的二级缓存提供商有 EhCache 和 Infinispan。 六、懒加载与代理 Hibernate 支持懒加载(Lazy ...

    hibernate-core包

    Hibernate支持事件监听机制,允许开发者在特定操作(如对象加载、保存等)前后执行自定义逻辑。通过实现相应的监听器接口,可以扩展Hibernate的功能。 10. **实体状态管理** Hibernate管理着实体的四种状态:瞬时...

    Java Web开发技术大全--JSP+Servlet+Struts 2+Hibernate+Spring+AJAX.(李宁)

    Hibernate支持多种数据库,提供了缓存机制和查询语言HQL,使得数据操作更加便捷。 **Spring** 是一个全面的Java企业级应用框架,不仅包含了IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented ...

    hibernate-extensions-2.1.3

    1. **延迟加载(Lazy Loading)增强**:Hibernate核心库已经支持延迟加载,但扩展可能提供了更精细的控制,例如按需加载关联的对象集合,减少内存占用和提高性能。 2. **批量操作**:批量插入、更新和删除功能可以...

    hibernate-release-4.2.3.lib.zip

    五、缓存机制 Hibernate 4.2.3版本支持二级缓存,通过配置CacheProvider和查询缓存,提高数据访问速度。一级缓存是Session级别的,每个Session都有自己的缓存;二级缓存则全局共享,可跨Session使用。 六、懒加载...

    csdn hibernate-jars

    Hibernate架构由多个模块组成,包括核心API、CGLIB/Javaassist动态代理、JDBC连接管理、缓存机制等。其中,`hibernate-core.jar`是核心组件,包含了ORM的主要接口和实现,如Session、SessionFactory、Entity、Query...

Global site tag (gtag.js) - Google Analytics