1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
public class Client
{ public static void main(String[] args)
{ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = null ;
try { /*开启一个事务*/ tx = session.beginTransaction(); /*从数据库中获取id="402881e534fa5a440134fa5a45340002"的Customer对象*/ Customer customer1 = (Customer)session.get(Customer.class, "402881e534fa5a440134fa5a45340002"); System.out.println("customer.getUsername is"+customer1.getUsername()); /*事务提交*/ tx.commit(); System.out.println("-------------------------------------"); /*开启一个新事务*/ tx = session.beginTransaction(); /*从数据库中获取id="402881e534fa5a440134fa5a45340002"的Customer对象*/ Customer customer2 = (Customer)session.get(Customer.class, "402881e534fa5a440134fa5a45340002"); System.out.println("customer2.getUsername is"+customer2.getUsername()); /*事务提交*/ tx.commit(); System.out.println("-------------------------------------"); /*比较两个get()方法获取的对象是否是同一个对象*/ System.out.println( "customer1 == customer2 result is " +(customer1==customer2));
} catch (Exception e)
{ if (tx!= null )
{ tx.rollback(); } } finally { session.close(); } } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Test public void testCache2() {
Session session1 = sf.openSession(); //获得Session1
session1.beginTransaction(); Category c = (Category)session1.load(Category. class , 1 );
System.out.println(c.getName()); session1.getTransaction().commit(); session1.close(); Session session2 = sf.openSession(); //获得Session2
session2.beginTransaction(); Category c2 = (Category)session2.load(Category. class , 1 );
System.out.println(c2.getName()); session2.getTransaction().commit(); session2.close(); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
< ehcache >
<!-- 缓存到硬盘的路径 --> < diskStore path = "d:/ehcache" />
< defaultCache
maxElementsInMemory = "200" <!-- 最多缓存多少个对象 -->
eternal="false" <!-- 内存中的对象是否永远不变 -->
timeToIdleSeconds="50" <!--发呆了多长时间,没有人访问它,这么长时间清除 -->
timeToLiveSeconds="60" <!--活了多长时间,活了1200秒后就可以拿走,一般Live要比Idle设置的时间长 -->
overflowToDisk="true" <!--内存中溢出就放到硬盘上 -->
/> <!-- 指定缓存的对象,缓存哪一个实体类 下面出现的的属性覆盖上面出现的,没出现的继承上面的。 --> < cache name = "com.suxiaolei.hibernate.pojos.Order"
maxElementsInMemory = "200"
eternal = "true"
timeToIdleSeconds = "0"
timeToLiveSeconds = "0"
overflowToDisk = "false"
/> </ ehcache >
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
< hibernate-mapping >
< class name = "com.suxiaolei.hibernate.pojos.Order" table = "orders" >
< cache usage = "read-only" />
< id name = "id" type = "string" >
< column name = "id" ></ column >
< generator class = "uuid" ></ generator >
</ id >
< property name = "orderNumber" column = "orderNumber" type = "string" ></ property >
< property name = "cost" column = "cost" type = "integer" ></ property >
< many-to-one name = "customer" class = "com.suxiaolei.hibernate.pojos.Customer"
column = "customer_id" cascade = "save-update" >
</ many-to-one >
</ class >
</ hibernate-mapping >
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< hibernate-mapping >
< class name = "com.suxiaolei.hibernate.pojos.Customer" table = "customer" >
<!-- 主键设置--> < id name = "id" type = "string" >
< column name = "id" ></ column >
< generator class = "uuid" ></ generator >
</ id >
<!-- 属性设置--> < property name = "username" column = "username" type = "string" ></ property >
< property name = "balance" column = "balance" type = "integer" ></ property >
< set name = "orders" inverse = "true" cascade = "all" lazy = "false" fetch = "join" >
< cache usage = "read-only" />
< key column = "customer_id" ></ key >
< one-to-many class = "com.suxiaolei.hibernate.pojos.Order" />
</ set >
</ class >
</ hibernate-mapping >
|
refurl:http://flyingsnail.blog.51cto.com/5341669/1282367
相关推荐
总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
Hibernate 一级缓存和二级缓存的区别
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
总的来说,"hibernate二级缓存实例"是一个很好的学习资源,它可以帮助我们理解二级缓存的工作机制,掌握如何在项目中配置和使用,以及注意潜在的问题和优化策略。通过实践,我们可以更好地运用这一技术,提升Java...
在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个实体被加载到Session后,该实体的状态就会被缓存。然而,一级缓存的范围仅限于单个Session,当Session关闭后,其中的数据就会丢失。...
标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...
本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...
本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...
Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
一级缓存是每个Session内部的缓存,而二级缓存则是SessionFactory级别的,它可以被多个Session共享。二级缓存主要由第三方缓存提供者如Ehcache、Infinispan等实现,它们将数据存储在内存或磁盘中,以便于快速访问。 ...
**hibernate二级缓存详解** Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,在处理大量数据时,性能优化显得尤为重要,这就是二级缓存的作用。本文将深入探讨Hibernate...
二级缓存是相对于一级缓存(Session 缓存)而言的,一级缓存是每个 Hibernate Session 内部的缓存,而二级缓存则是在 SessionFactory 级别的,可以被多个 Session 共享。它能够存储对象的状态,避免频繁的数据库交互...
Hibernate 二级缓存是一种高效的数据存储机制,它能够显著提升Web应用的性能,尤其是在处理大量数据流动时。缓存的主要目标是减少应用与数据库之间的交互次数,从而降低延迟并减轻数据库服务器的压力。在Hibernate...
通常,一级缓存由Hibernate Session管理,而二级缓存则可以跨越多个Session进行共享。 在Spring Boot项目中配置Redis作为Hibernate的二级缓存,我们需要以下步骤: 1. **添加依赖**: 首先,在`pom.xml`文件中...
《深入理解Hibernate的一级缓存与二级缓存》 Hibernate作为一款强大的ORM框架,其缓存机制是优化数据库操作性能的关键之一。缓存主要分为一级缓存和二级缓存,它们各自承担着不同的职责,共同提升了数据访问的效率...
Hibernate二级缓存是Java开发中使用Hibernate框架进行数据持久化时优化性能的一种重要技术。它在一级缓存(Session级别的缓存)的基础上,提供了一个全局的、跨会话的数据存储层,可以显著减少对数据库的访问,从而...
1. **Hibernate二级缓存**:二级缓存是Hibernate在一级缓存(Session级别的缓存)之外提供的全局共享缓存,可以跨Session共享数据。它允许多个并发用户访问相同的数据,减少对数据库的访问次数,提高系统性能。 2. ...
二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...