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();当相应的对象存在时候,更新数据,数据库中不存在相应的对象时候创建保存数据。即新创建的对象会被持久化到缓存当中,从数据库获取的持久化对象则是修改数据。
相关推荐
在这个项目中,"hibernate二级缓存 SSH" 的标题表明我们将探讨如何在SSH框架中实现Hibernate的二级缓存功能。Hibernate二级缓存是一个优化策略,它能提高数据访问性能,减少对数据库的直接访问。 首先,Struts2作为...
以上是构建SSH框架中Hibernate部分所需的基本知识。在实际项目开发中,还需要结合Spring的依赖注入和AOP特性,以及Struts的控制器和视图层管理,形成完整的SSH架构,以实现高效、模块化的Web应用开发。
在SSH架构中,Hibernate主要负责数据访问层,即持久化层。 1. **核心功能**: - **ORM(Object Relational Mapping)**:提供对象关系映射机制,简化了Java应用与数据库的交互过程。 - **Session管理**:通过...
10. **Struts整合Hibernate**:Struts的Action类可以通过Spring注入Hibernate的SessionFactory,然后在业务逻辑中调用Session进行数据操作。此外,Struts的拦截器也可以用来优化性能,如缓存结果。 对于初学者,...
在Java1Hibernate这个文件中,可能包含了SSH项目中关于Hibernate的示例代码,包括实体类、映射文件、配置文件以及使用Hibernate进行数据操作的Java代码。通过学习和理解这些代码,你可以更好地掌握SSH框架下...
本篇主要关注的是SSH中的Hibernate部分,一个强大的对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库,而无需直接编写SQL语句。 在“SSH学习记录(5)-简单Hibernate”中,我们可能将深入探讨以下几点:...
总之,SSH框架中的Hibernate二级缓存是提高系统性能的有效手段,但使用时需考虑其与数据一致性的平衡,合理配置并谨慎使用。通过熟练掌握二级缓存的配置和使用,开发者能够更好地优化Java Web应用程序的性能。
在SSH中,Hibernate处理数据库的CRUD(Create, Read, Update, Delete)操作,并通过HQL(Hibernate Query Language)或Criteria API进行查询。 4. **Hibernate Search**:文件名`hibernate-search-4.4.6.Final`表明...
本笔记主要关注SSH中的Session管理和数据库的批量操作,这在实际开发中是非常关键的部分。 1. **Spring Session管理**: - Spring提供了一种强大的依赖注入(DI)机制,使得我们可以轻松地管理Session。它允许我们...
5. Service层通常会通过Hibernate的Session对象与数据库交互,进行数据的增删改查操作。 6. Service完成业务处理后,将结果返回给Action。 7. Action根据结果选择一个Result,可能是一个JSP页面、JSON数据或者其他...
在这个“SSH框架网上商城项目第16战”中,我们关注的是如何利用Hibernate的二级缓存来优化首页热门商品的显示,提高系统性能。 首先,二级缓存是Hibernate提供的一个特性,用于缓存持久化对象,它可以跨多个会话...
SSH(Struts、Spring、Hibernate)是Java Web开发中常见的三大框架,而Hibernate作为ORM(对象关系映射)框架,是连接Java应用程序与数据库的关键组件。本总结将围绕Hibernate的核心概念、配置、对象状态、关系映射...
SSH,即Struts、Spring和Hibernate,是Java开发中常用的一种技术栈,主要用于构建企业级应用。这三种框架分别在MVC模式中的表现层、业务层和服务层起到关键作用。以下是对SSH面试题中涉及的一些核心知识点的详细解释...
4. **Session接口**: Session是Hibernate的主要工作单元,用于与数据库进行交互,支持CRUD(创建、读取、更新、删除)操作。 5. **Criteria查询**: Hibernate提供了一种基于对象的查询方式,可以动态构建查询条件。...
在IT行业中,SSH(Struts、Spring、Hibernate)是一个经典的Java Web开发框架组合,其中Hibernate是专注于对象关系映射(ORM)的框架。本章主要介绍Hibernate的基本概念、工作原理以及如何在实际项目中应用。 一、...
SSH(Struts、Spring、Hibernate)是Java Web开发中常用的一种技术栈,其中Hibernate是一个强大的对象关系映射(ORM)框架。这篇文档将详细介绍Hibernate在应用开发中的基础使用,帮助初学者快速入门。 **SSH框架...
在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,与Spring进行集成,可以实现声明式事务管理,并且可以借助Spring的IoC容器管理SessionFactory和Session,进一步提升应用的可维护性和灵活性。...
在现代Web应用开发中,SSH(Struts2、Spring、Hibernate)框架因其各自独特的功能和优势,常被组合使用以构建高效、稳定且易于维护的系统。以下是针对SSH框架整合的具体实施步骤和思路。 #### 二、整合步骤详解 ##...
3. **Session接口**:在Hibernate中,Session是与数据库交互的主要接口,它提供了增删改查(CRUD)操作,同时管理事务和缓存。例如,`save()`方法用于保存对象到数据库,`update()`用于更新已存在的对象,`delete()`...
4. **Session与Transaction**:Hibernate中的Session是与数据库交互的主要接口,负责对象的持久化操作。Transaction则管理事务,确保数据的一致性。教程会阐述如何使用SessionFactory创建Session,进行CRUD(创建、...