用Hibernate做了些项目感觉Hibernat之所以如此流行主要是两个方面:
1、是一个Orm的轻量级实现,让我们可以使用面向对象的方式对数据库进行操作,显得更加方便,代码更加精炼。
2、提供了缓存机制,取数据时不一定要都查询数据库,可以从缓存中取,减少了访问数据库的次数,提高了性能。
缓存的概念:
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
Hibernate主要保存了两级缓存:
一级缓存:
就是Session缓存,由于Session对象的生命周期对应的是一个数据库事务或一个应用级事务,因此可以一级缓存是事务级的缓存,一级缓存是必须的,不允许而且事实上也是无法被卸载,在一级缓存中每个持久化的对象都有一个唯一的OID.
二级缓存:
可以说是一个可选的缓存插件。它是有SessionFactory负责管理。由于SessionFactory对于是程序整个过程,因此第二级缓存是进程或集群范围的缓存,因此可能出现并发性问题,因此要采用适当的事务隔离级别。这个缓存保存是对象的松散型数据,为了把第三方的插件和Hibernate集成起来,Hibernate提供了一个缓存适(org.hibernate.cache .CacheProvider),也就是一个接口让第三方插件产生的插件实现提供了好的标准。
为了很好的利用缓存带给我们好处,下面我们来看看二级缓存的配置方法:以org.hibernate.cache.EhCacheProvider
这个缓存插件的配置为例:
首先,我在Hibernte的核心配置文件中加上这么一段:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="connection.username">sa</property> <property name="connection.url"> jdbc:sqlserver://localhost:1433;databaseName=test </property> <property name="dialect"> org.hibernate.dialect.SQLServerDialect </property> <property name="myeclipse.connection.profile"> SQL Server2005 </property> <property name="connection.password">123</property> <property name="connection.driver_class"> com.microsoft.sqlserver.jdbc.SQLServerDriver </property> <property name="show_sql">true</property> <property name="sql_format">true</property> <!-- 声明使用二级缓存--> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 配置二级缓存的实现类 --> <property name="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <mapping resource="entity/Team.hbm.xml" /> <mapping resource="entity/Student.hbm.xml" /> </session-factory> </hibernate-configuration>
然后再对象映射文件的集合属性:
<set name="students" cascade="all" inverse="true" lazy="false"> <!-- 对集合中的对象放入缓存中 --> <cache usage="read-write"/> <key> <column name="tid"></column> </key> <one-to-many class="entity.Student"/> </set>
对集合中的类对应的配置问中的class标签下加入:
<class name="Student" table="Student" > <cache usage="read-write"/> </class>
最后,我们还要针对缓存提供一个配置文件,放在项目的src目录下
文件名为:ehcache.xml,一般在我们下载的Hibernate框架包下面的etc文件夹中找的到。
如下:
<?xml version="1.0" encoding="UTF-8"?> <!-- 缓存的配置文件 --> <ehcache> <!-- diskStore标签:硬盘保存 属性: path:保存的位置 --> <diskStore path="D:/ehcache" /> <!-- defaultCache标签:指定默认的缓存配置: 属性: maxElementsInMemory:在内存中保存对象的个数 eternal:是否是不变的 timeToIdleSeconds:从上次使用到过期的时间 timeToLiveSeconds:对象自创建到过期存活时间 overflowToDisk:超过内存的个数是否保存到硬盘 --> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" /> <!-- cache标签:对指定的类进行缓存配置 属性和上面默认属性一样,如果设置了就覆盖上面的默认设置,没有设置,则引用默认设置 --> <cache name="entity.Student" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" /> </ehcache> <!--如果对象过期,当查询的时候不会打缓存当中找而会直接查询数据库-->
基本的配置也就这样子,如有不到位的地方希望各位同仁指点下啊
相关推荐
总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...
总的来说,"hibernate二级缓存实例"是一个很好的学习资源,它可以帮助我们理解二级缓存的工作机制,掌握如何在项目中配置和使用,以及注意潜在的问题和优化策略。通过实践,我们可以更好地运用这一技术,提升Java...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
本文将详细探讨如何在Spring集成的Hibernate环境中配置二级缓存,以及其背后的原理和实践。 首先,我们需要了解什么是二级缓存。在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个...
以下是一个简单的二级缓存配置示例: ```xml <hibernate-configuration> <!-- 配置缓存插件 --> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory ...
总结来说,Hibernate的二级缓存是提升性能的关键手段,通过合理配置和使用,可以有效减少数据库交互,提高应用响应速度。需要注意的是,二级缓存虽然强大,但也需谨慎使用,防止数据一致性问题,尤其是在高并发环境...
综上所述,通过学习`hibernate二级缓存示例源码`,我们可以了解到如何在实际项目中配置和使用Hibernate二级缓存,从而提升系统的性能。在实际应用中,应结合具体场景选择合适的缓存策略,以达到最佳的性能优化效果。
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
综上所述,Hibernate二级缓存配合Ehcache使用,能够有效提升Java应用的性能,降低数据库压力,同时Ehcache提供的丰富功能和灵活性使其成为Java缓存领域中的热门选择。在实际项目中,正确配置和使用Ehcache,能够为...
**二、Hibernate二级缓存** 二级缓存是SessionFactory级别的,跨越了多个Session,可以被多个线程共享。它通常由第三方插件如EhCache、Infinispan等提供。二级缓存分为以下几种类型: 1. **集合缓存**:用于存储...
在Java企业级开发中,Spring和Hibernate是两个非常...3. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,配置Hibernate SessionFactory,并注入二级缓存配置。以下是一个配置示例: ```xml ...
通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...
在处理大数据量或高并发的场景下,为了提高性能和减少数据库负载,Hibernate 提供了二级缓存机制。本文将深入探讨Hibernate的二级缓存,并结合相关源码进行解析。 ### 一、一级缓存与二级缓存 1. **一级缓存...
- 类和集合的缓存配置:在实体类上使用 `@Cacheable` 注解,以及在集合属性上使用 `@Cache` 注解来指定哪些对象或集合需要被缓存。 - 缓存策略:可以选择读/写策略、只读策略、非事务性策略等,根据业务需求调整。...
本篇文章将深入探讨Hibernate二级缓存的概念、工作原理以及如何在实际项目中设置和使用。 **一、二级缓存概念** 一级缓存是每个Hibernate Session内部的一个内存区域,用于存储Session期间的操作对象。当Session...
本篇将详细介绍Hibernate二级缓存的概念、作用以及所需jar包的作用。 一、Hibernate二级缓存概念 Hibernate的一级缓存是指Session级别的缓存,每个Session内部都有一个一级缓存,用于存储实体对象,当Session关闭时...
描述部分提到的“博文链接:https://zhaoshijie.iteye.com/blog/998230”虽然没有提供具体信息,但可以推断出这是一个完整的博客文章,其中详细阐述了关于Hibernate二级缓存的使用和实现,可能包括了配置、注解的...
本压缩包提供的资源应该包含了实现Hibernate二级缓存所需的关键组件和库文件。 一级缓存是Hibernate Session内的缓存,它是每个Session实例独有的,当Session关闭时,一级缓存中的数据也会被清除。而二级缓存则是一...