`
gaosililn
  • 浏览: 73038 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ssh学习:hibernate中 Session缓存及基本操作

 
阅读更多

Session的缓存及基本操作

Session缓存原理:

Session缓存被称为Hibernate的一级缓存。

当程序调用session的CRUD方法,以及调用session的查询接口的list()、 iterate()或者filter()方法时。如果缓存中还不存在相应的对象,Hibernate就会把相应的对象缓到一级缓存当中。

当Transaction.commit()/session.flush()等方法缓存清理时,Hibernate就会根据相应的对象的状态改变来同步更新到数据库当中

Session缓存的作用:

1.减少对数据库的访问,提高数据操作的性能当缓存当中存在下相应的对象时候,程序可以从缓存当中直接获取相应的对象,而不需从数据库当中提取数据对象;当在缓存被清理之前,及时相应的对象有着N次的改变都不会一次一次的立即去更新改变对象,而是等到缓存被清理时候才合并成一条sql去更新数据库操作。

2.保证缓存的相对应对象与数据库同步

3.避免JVM栈堆溢出异常。当相应对象之间存在着死循环的关系,Session缓存保证不会对象之间访问死循环,保证避免JVM栈堆的溢出异常。

数据库更新操作的实例:

 

//获取configuration对象,默认加载hibernate.cfg.xml文件
		Configuration configuration = new Configuration().configure();
		StandardServiceRegistryBuilder applySettings = new StandardServiceRegistryBuilder()
				.applySettings(configuration.getProperties());
		ServiceRegistry sRegistry = applySettings.build();
		//获取SessionFactory对象,以便获取session对象
		SessionFactory buildSessionFactory = configuration.buildSessionFactory(sRegistry);
		//SessionFactory对象打开session获取session对象
		Session openSession = buildSessionFactory.openSession();
		//打开事务
		Transaction beginTransaction = openSession.beginTransaction();
		try {
			//获取相应的数据对象
			User user = (User) openSession.get(User.class, 1);
			System.out.println("User:" + user);
			user.setName("usc");
			System.out.println("----------");
			user.setAge(16);
			System.out.println("+++++++++++");
			//当相应的对象有着N次状态的改变,只有等到缓存清理时候才会同步到数据库当中
			//提交事务,清理缓存
			beginTransaction.commit();
		} catch (Exception e) {
			//事务回滚
			beginTransaction.rollback();
		} finally {
			//关闭session的资源
			openSession.close();
		}

 执行结果:

 

Session缓存应用:

 从代码可以看出,之前修改了2次状态,不是每次修改都会立即的更新数据库,而是等到了缓存清理时候才合并提交更新数据库。

session的应用:

session的缓存的清理一般可以使用session.flush()/Transaction.commit()或者查询等去清理缓存。通过Session.setFlushMode(FlushMode)设置清理缓存的时间点。参数可以根据需求设置

FlushMode.ALWAYS:总是清理,每当有清理缓存时候都会前去清理

FlushMode.AUTO:与FlushMode.ALWAYS没有本质的区别。Hibernate的默认参数

FlushMode.COMMIT:只有commit、flush请求是才清理,请求不清理

FlushMode.MANUAL:只有flush请求才清理,commit不清理

FlushMode.NEVER:忽略所有的清理请求

 

 

session的基本操作:

save();将数据封装的相应对象有瞬间状态转为持久化状态。

get()/load();获取相应的对象。但是也有区别:当数据库中没有所需的对象时候,get()获取的对象返回值为null,而load()则会抛出异常。使用load()方法获取持久化对象时候,提取相应对象的非持久化标识符时候才会执行sql。load()方法获取的对应的对象在session生命周期中没有加载持久化标识符,在session的生命周期结束后不能在使用session的对象了。

delete();从数据库中删除对应的数据

update();修改数据

savaOrUpdate()/merge();当相应的对象存在时候,更新数据,数据库中不存在相应的对象时候创建保存数据。即新创建的对象会被持久化到缓存当中,从数据库获取的持久化对象则是修改数据。

  • 大小: 18.2 KB
分享到:
评论

相关推荐

    hibernate二级缓存 SSH

    在这个项目中,"hibernate二级缓存 SSH" 的标题表明我们将探讨如何在SSH框架中实现Hibernate的二级缓存功能。Hibernate二级缓存是一个优化策略,它能提高数据访问性能,减少对数据库的直接访问。 首先,Struts2作为...

    SSH框架中构建hibernate必须的包

    以上是构建SSH框架中Hibernate部分所需的基本知识。在实际项目开发中,还需要结合Spring的依赖注入和AOP特性,以及Struts的控制器和视图层管理,形成完整的SSH架构,以实现高效、模块化的Web应用开发。

    SSH中 struts hibernate spring 各起什么作用

    在SSH架构中,Hibernate主要负责数据访问层,即持久化层。 1. **核心功能**: - **ORM(Object Relational Mapping)**:提供对象关系映射机制,简化了Java应用与数据库的交互过程。 - **Session管理**:通过...

    ssh框架中的hibernate5

    10. **Struts整合Hibernate**:Struts的Action类可以通过Spring注入Hibernate的SessionFactory,然后在业务逻辑中调用Session进行数据操作。此外,Struts的拦截器也可以用来优化性能,如缓存结果。 对于初学者,...

    ssh中Hibernate

    在Java1Hibernate这个文件中,可能包含了SSH项目中关于Hibernate的示例代码,包括实体类、映射文件、配置文件以及使用Hibernate进行数据操作的Java代码。通过学习和理解这些代码,你可以更好地掌握SSH框架下...

    SSH学习记录(5)-简单Hibernate

    本篇主要关注的是SSH中的Hibernate部分,一个强大的对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库,而无需直接编写SQL语句。 在“SSH学习记录(5)-简单Hibernate”中,我们可能将深入探讨以下几点:...

    SSH笔记-二级缓存

    总之,SSH框架中的Hibernate二级缓存是提高系统性能的有效手段,但使用时需考虑其与数据一致性的平衡,合理配置并谨慎使用。通过熟练掌握二级缓存的配置和使用,开发者能够更好地优化Java Web应用程序的性能。

    SSH整合hibernate完整jar包

    在SSH中,Hibernate处理数据库的CRUD(Create, Read, Update, Delete)操作,并通过HQL(Hibernate Query Language)或Criteria API进行查询。 4. **Hibernate Search**:文件名`hibernate-search-4.4.6.Final`表明...

    SSH笔记-管理Session和批量操作数据库

    本笔记主要关注SSH中的Session管理和数据库的批量操作,这在实际开发中是非常关键的部分。 1. **Spring Session管理**: - Spring提供了一种强大的依赖注入(DI)机制,使得我们可以轻松地管理Session。它允许我们...

    SSH项目(hibernate+spring+struts)

    5. Service层通常会通过Hibernate的Session对象与数据库交互,进行数据的增删改查操作。 6. Service完成业务处理后,将结果返回给Action。 7. Action根据结果选择一个Result,可能是一个JSP页面、JSON数据或者其他...

    SSH框架网上商城项目第16战之Hibernate二级缓存处理首页热门显示

    在这个“SSH框架网上商城项目第16战”中,我们关注的是如何利用Hibernate的二级缓存来优化首页热门商品的显示,提高系统性能。 首先,二级缓存是Hibernate提供的一个特性,用于缓存持久化对象,它可以跨多个会话...

    SSH之Hibernate总结

    SSH(Struts、Spring、Hibernate)是Java Web开发中常见的三大框架,而Hibernate作为ORM(对象关系映射)框架,是连接Java应用程序与数据库的关键组件。本总结将围绕Hibernate的核心概念、配置、对象状态、关系映射...

    SSH(struts+spring+hibernate)面试题总结

    SSH,即Struts、Spring和Hibernate,是Java开发中常用的一种技术栈,主要用于构建企业级应用。这三种框架分别在MVC模式中的表现层、业务层和服务层起到关键作用。以下是对SSH面试题中涉及的一些核心知识点的详细解释...

    Hibernate中文开发文档API.zip

    4. **Session接口**: Session是Hibernate的主要工作单元,用于与数据库进行交互,支持CRUD(创建、读取、更新、删除)操作。 5. **Criteria查询**: Hibernate提供了一种基于对象的查询方式,可以动态构建查询条件。...

    学习hibernate第一章内容

    在IT行业中,SSH(Struts、Spring、Hibernate)是一个经典的Java Web开发框架组合,其中Hibernate是专注于对象关系映射(ORM)的框架。本章主要介绍Hibernate的基本概念、工作原理以及如何在实际项目中应用。 一、...

    SSH应用开发-Hibernate应用入门.zip_hibernate

    SSH(Struts、Spring、Hibernate)是Java Web开发中常用的一种技术栈,其中Hibernate是一个强大的对象关系映射(ORM)框架。这篇文档将详细介绍Hibernate在应用开发中的基础使用,帮助初学者快速入门。 **SSH框架...

    hibernate3.6.10 jar包

    在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,与Spring进行集成,可以实现声明式事务管理,并且可以借助Spring的IoC容器管理SessionFactory和Session,进一步提升应用的可维护性和灵活性。...

    ssh框架整合详细步骤(spring+struts2+hibernate)

    在现代Web应用开发中,SSH(Struts2、Spring、Hibernate)框架因其各自独特的功能和优势,常被组合使用以构建高效、稳定且易于维护的系统。以下是针对SSH框架整合的具体实施步骤和思路。 #### 二、整合步骤详解 ##...

    Hibernate相关类包.zip_hibernate

    3. **Session接口**:在Hibernate中,Session是与数据库交互的主要接口,它提供了增删改查(CRUD)操作,同时管理事务和缓存。例如,`save()`方法用于保存对象到数据库,`update()`用于更新已存在的对象,`delete()`...

    hibernate中文版PDF.7z

    4. **Session与Transaction**:Hibernate中的Session是与数据库交互的主要接口,负责对象的持久化操作。Transaction则管理事务,确保数据的一致性。教程会阐述如何使用SessionFactory创建Session,进行CRUD(创建、...

Global site tag (gtag.js) - Google Analytics