基于SSH框架的企业级应用开发

精通JAVA SSH框架:企业级应用开发指南 本文还有配套的精品资源,点击获取 简介:SSH框架是Java Web开发中的经典组合,包括Struts2、Spring和Hibernate,分别处理MVC的Controller、IoC/AOP和ORM任务。本课程深入解析每个框架的核心概念和特性,如Struts2的拦截器、Spring的依赖注入和AOP、Hibernate的对象关系映射。同时,介绍SSH框架整合后的应用架构,... 阅读详情

4.1.1 Hibernate框架简介及其环境搭建

 

  1. Hibernate框架

Hibernate是数据持久化工具。也是一个开放源代码的ORM解决方案。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API

 

  1. Hibernate是ORM解决方案

基于ORM、Hibernate在对象模型和关系数据库的表之间建立了一座桥梁,通过Hibernate,程序员就不需要再使用SQL语句操作数据库中的表,使用API直接操作 JavaBean 对象就可以实现数据的存储,查询。更改和删除等操作。显著降低了由于对象与关系数据库在数据表现方面的范例不匹配导致的开发成本。

 

 

4.1.2 Hibernate 框架的优缺点及适用场合

用JDBC 查询返回的是ResultSet对象,ResultSet往往不能直接使用,还需要转换成List,并且通过JDBC查询不能直接得到具体的业务对象,这样在整个查询的过程中,就需要做很多重复性的转换工作。

使用Hibernate 完成持久化操作,只需要编写如下代码:

Session session = HibernateUtil.currentSession();

Query query = session.createQuery(“from User”);

List<User> users = (List<User>) query.list();

 

HibernateUtil 是一个自定义的工具类,用于获取Hibernate的Session对象,Session是Hibernate执行持久化操作的核心API。Hibernate 处理数据库查询时,编写的代码非常简洁,作为查询结果,可以直接获得一个存储着User实例的List集合实例,能够直接使用,避免了繁琐的重复性的数据转换过程。

 

  1. Hibernate 框架的优点
  1. Hibernate 功能强大,是Java应用与关系数据库之间的桥梁,较之JDBC方式操作数据库代码量大大减少。提高了持久化代码的开发熟读,降低了维护成本。
  2. Hibernate 支持许多面向对象的特性,如组合、继承、多态等,使得开发人员不必在面向业务领域的对象模型和面向数据库的关系数据模型之间来回切换,方便开发人员进行领域驱动的面向对象的设计与开发。
  3. 可移植性好,系统不会绑定在某个特定的关系型数据库上,对于系统更换数据库,通常只需要修改Hibernate配置文件即可正常运行。
  4. Hibernate框架开源免费,可以在需要时研究源代码,改写源代码,进行功能的定制,具有可扩展性。

2.Hibernate框架的缺点

(1)不适合以数据为中心大量使用存储过程的应用。

(2)大规模的批量插入、修改和删除不适合用Hibernate。

 

4.1.3 Hibernate 与MyBatis的比较

Hibernate与MuBatis都属于ORM框架,为数据层提供持久化操作的支持。下面从几个方面对Hibernate和MyBatis做一下比较,也为选择框架提供一些参考价值。

  1. 相当于MyBatis的”SQL-Mapping”的ORM实现,Hibernate的ORM实现更加完善,提供了对象状态管理的功能。Hibernate对数据操作,针对的是Java对象,即使使用Hibernate的查询语言(HQL语句),其书写规则也是面向对象的。、
  2. Hibernate 与具体数据库的关联只需要在XML中配置即可,Hibernate开发者不需要关注SQL的生成与结果的映射,所有的HQL语句与具体使用的数据库无关,便于修改,移植性好。而MyBatis直接使用SQL语句。不同数据库可能会有差异,修改工作量大。可移植性差。
  3. 由于直接使用SQL语句,所以MyBatis的使用灵活性更高,而Hibernate对于关系模型设计不合理、不规范的系统不适应。在不考虑缓存的情况下,MyBatis的执行效率也比Hibernate高一些

 

4.1.4 Hibernate环境搭建

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.3.1 Java对象的三种状态

当应用通过调用Hibernate API与框架进行交互时,需要从持久化的角度关注应用对象的生命期,持久化生命周期是Hibernate中的一个关键概念,正确的理解生命周期,可以更好得了解Hibernate的实现原理,掌握Hibernate的正确用法,Hibernate框架通过Session来管理Java对象的状态,在持久化生命周期中,Java对象存在着如下三种状态。

1.瞬时状态(Transient)

瞬时状态又称临时状态,如果java对象与数据库中的数据没有任何的关联,即此Java对象在数据库中没有相关联的记录,此时Java对象的状态为瞬时状态,Session对于瞬时状态的Java对象是一无所知,当对象不再被其他对象引用时,它的所有数据也就丢失了,对象将会被Java虚拟机按照垃圾回收机制处理。

  1. 持久状态(Persistent)

当对象与Session关联,被Session管理时,它就处于持久状态,处于持久状态的对象拥有数据库标识(数据库中的主键值)。那么,对象是什么时候与Session发生关联的呢?

第一种情况,通过Session的查询接口,或者get()方法,或者load()方法从数据库中加载对象的时候,加载的对象是与数据库表中的一条记录关联的,此时对象与加载它的Session发生关联的。

第二种情况,对瞬时状态的对象调用Session的save()、savaOrUpdate()等方法时,在保存对象数据的同时,java对象也会与Session发生关联。对于处于持久状态的对象,Session会持续跟踪和管理它们,如果对象的内部状态发生了任何变更,Hibernate会选择合适的时机(如事务提交时)将变更同步到数据库中,

  1. 游离状态(Detached)

游离状态又称脱管状态,处于持久状态的对象,脱离与其关联的Session的管理后,对象就处于游离状态,处于游离状态的对象,Hibernate无法保证对象所包含的数据与数据库中的记录一致,因为Hibernate已经无法感知对该对象的任何操作,Session提供了update()、

savaOrUpdate()等方法,将处于游离状态的对象的数据以更新的方式同步到数据库中,并将该对象与当前的Session关联,这时,对象的状态就从游离状态重新转换为持久状态。

4.3.2 三种状态之间的转换

(1).瞬时状态转为持久状态

使用Session的Sava()、savaOrUpdate()等方法保存对象后,该对象的状态由瞬时状态转换为持久状态。

使用Session的get()或load()方法获取对象,该对象的状态是持久状态。

(2).持久状态转为瞬时状态

执行Session的delete()方法后,对象由原来的持久状态变为瞬时状态,因为此时该对象没有与任何的数据库数据关联。

(3).持久状态转为游离状态

执行Session的evict()、chear()或close()方法,对象由原来的持久状态转为游离状态。

 

  1. .游离状态转为持久状态

执行Session的update()或savaOrUpdate()方法,对象由游离状态转为持久状态,该对象再次与当前Session相关联

  1. 游离状态转为瞬时状态

执行Session的Delete()方法,对象由游离状态转为瞬时状态。

 

提示:

处于瞬时状态或游离状态的对象不再被其他对象引用时,会被Java虚拟机按照垃圾回收机制处理。

 

 

 

4.4脏检查及刷新缓存机制

Session是Hibernate向应用程序提供的持久化操纵的主要接口,它提供了基本的保存、更新、删除和加载Java对象的方法。Session具有一个缓存,可以管理和跟踪所有持久化对象,在某些时间点,Session会根据缓存中对象的变化来执行相关SQL语句,将对象发生的变化同步到数据库中,换句话说就是将数据库同步为与Session缓存一致。这一过程称为刷新缓存!

 

4.4.1脏检查

在Hibernate中,数据前后发生变化的对象,称为藏对象,如一下代码所示:

Tx = session.beginTransaction();

//获取部门对象,dept对象处于持久状态

Dept  dept  =  (Dept) session.load(Dept.class,new Byte(“11”));

//修改后,部门信息和之前不同,此时dept对象成为所谓的“脏对象”

Dept.setDname(“质管部”);

//提交事务

Tx.commit();

 

以上代码中,dept对象处于持久状态,当dept对象被加入Session缓存中时,Session会为dept对象的值类型的属性复制一份快照。操作中,dname属性发生改变,dept对象即成为脏对象,在事务提交时,Hibernate会对Session中持久状态的对象进行检测,即比较dept对象的当前属性与它的快照。以判断dept对象的属性是否发生了变化。这种判断称为脏检查,如果对象发生了改变,Session会根据脏对象的最新属性值来执行相关的SQL语句,将变化更新到数据库中,以确保内存中的对象数据与数据库中的数据一致!

 

4.4.2 刷新缓存机制

需要注意的是,当Session缓存中对象的属性发生变化时,Session并不会立即执行脏检查和执行相关的SQL语句,而是在特定的时间点。即刷新缓存时才执行。这使得Session能够把多次变化合并为一条或者一批SQL语句,减少了访问数据库的次数,从而提高应用程序的数据访问性能。

在默认情况下,Session会在以下时间点刷新缓存。

  1. 应用程序显示调用Session的flush()方法时。

Session的flush()方法进行刷新缓存的操作,会触发脏检查,视情况执行相关的SQL语句。

  1. 应用程序调用Transaction的commit()方法时

Commit()方法会先调用Session的刷新缓存方法flush(),然后向数据库提交事务。

在提交事务时执行刷新缓存的动作,可以减少访问数据库的频率,尽可能缩短当前事务对数据库中相关资源的锁定时间。

 

4.5 更新数据的方法

Hibernate中的Session提供了多种更新数据的方法,如update()、savaOrUpdate()、merge()方法:

  1. update()方法,用于将游离状态的对象恢复为持久状态,同时进行数据库更新操作,当参数对象的OID为NULL时会报异常。
  2. savaOrUpdate()方法,同时包含了sava()与()update()方法的功能,如果入参时瞬时状态的对象就调用sava()方法。如果入参时游离状态的对象,则调用update()方法。

(3)merge()方法,能够把作为参数传入的游离状态对象的属性复制到一个拥有相同OID的持久状态对象中,通过对持久状态对象的脏检查实现更新操作,并返回该持久状态对象,如果无法从Session缓存或数据库中加载到相应的持久状态对象,即传入的时瞬时对象,则创建其副本执行插入操作。并返回这一新的持久状态对象,无论何种情况,传入的东西状态都不受影响。

ACCP8.0Y2的基于SSH框架的企业级应用开发第一部分 北大青鸟ACCP8.0Y2学期中的基于SSH框架的企业级应用开发完整版,分成了9个部分,这是第一部分,请下载 立即下载

相关推荐

ssh企业级框架精简版本,纯注解,绝对原创

ssh企业级框架精简版本,纯注解,绝对原创(csdn不支持大文件,所以放到摆渡云盘上去了)

基于SSH框架实现的管理系统(包含java源码+数据库)

基于SSH框架的管理系统简洁版; 实现登录、注册、增、删、改、查; 可继续完善增加前端、校验、其他功能等; 可作为SSH(Structs Spring Hibernate)项目开发练习基础模型; 课程设计、毕业设计开发基础; 任何复杂的框架都是简单的知识组合并延伸的,学好基础知识才是最重要的; 此项目简单,便于理解基本原理,为复杂SSH复杂项目的开发打下基础。

DT程序员的博客 517

ACCP8.0Y2的基于SSH框架的企业级应用开发第四部分

北大青鸟ACCP8.0Y2学期中的基于SSH框架的企业级应用开发完整版,分成了9个部分,这是第四部分,请下载

ssh项目整合(重点篇)

1.三大框架整合原理   2.导包(41) 1&gt;hibernate包 hibernate/lib/required下的所有必须包:9个 数据库驱动包:1个   2&gt;struts2包 struts2-blank\WEB-INF\lib所有必须包:13个 struts整合spring插件包:struts2-spring-plugin-2.3.24.jar(这个包导入后...

langao_q的博客 6515

ACCP8.0Y2的基于SSH框架的企业级应用开发第八部分

北大青鸟ACCP8.0Y2学期中的基于SSH框架的企业级应用开发完整版,分成了9个部分,这是第八部分,请下载

【百度网盘】SSH企业案例erp_项目整合-完整高清视频+源码

【百度网盘】SSH企业案例erp_项目整合-完整高清视频+源码

Y2 基于SSH框架的企业级应用开发 第三章 上机+课后

--上机1 1) declare v_taxes number :=3500;--起征点 v_money number ;--应交税 begin if v_sal-v_taxes<1500 then v_money :=(8000-v_taxes)*0.03-0; dbms_output.put_line('应交税:'|| v_money); ...

weixin_44269168的博客 1416

基于ssh框架+bootstrap的企业级员工信息管理系统(源码)

基于ssh框架+bootstrap的企业级员工信息管理系统(源码)

【基于SSH框架的企业级应用开发】HQL实用技术

HQL语句是面向对象的查询语言。    例如:from Emp s where s.empno='7788' order by s.empno  ;注意点:语句中所有的变量都是和实体类对应,Emp是类名,empno是类中的属性名。 2.执行HQL,并返回结果。关键代码如下:     String hql = "from Emp order by ename"; // 定义hql语句    ...

恰恰_77 707

ACCP8.0Y2的基于SSH框架的企业级应用开发第六部分

北大青鸟ACCP8.0Y2学期中的基于SSH框架的企业级应用开发完整版,分成了9个部分,这是第六部分,请下载

ssh企业级框架精简版本,纯注解,绝对原创(最新版本,之前连接失效了)

ssh企业级框架精简版本,纯注解,绝对原创(最新版本,之前连接失效了) ,超级简单,可以直接运行,已经集成数据库

【基于SSH框架的企业级应用开发】Oracle数据库应用

Oracle数据库应用 表空间和用户权限管理 表空间 1.分类: 永久性表空间 临时性表空间 撤销性表空间 2.表空间的目的 对不同用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户数据的操作,对模式对象的管理 可以将不同数据文件创建到不同的磁盘中,有利于管理磁盘空间,有利于提供I/O性能,有利于备份和恢复数据等 一般完成Oracle系统的安装并创建oracle实...

恰恰_77 768

Flutter 中使用蓝牙插件报错,说没有权限怎么解决

2、在build.grale里面更改一下版本号,我修改的是targetSdkVersion这个版本号,需要根据你自己的版本进行更改,记得更改之后先flutter clean一下再run。搞了一晚上,没搞出来,第二天用同事手机测试发现他手机可以,我手机还是不行,才发现是Android版本问题,需要修改两处地方。废话不多说,咱先看报错信息。

zzj17637822814的博客 2289

【基于SSH框架的企业级应用开发】PL/SQL编程

PL/SQL编程 什么是PL/SOL RL/SOL( Procedural Language./SL.过程语言/SOL)是结合了ole过程语言和结构化查 言(SL)的一种扩展语言,使用PL/S0L可以编写具有很多高级功能的程序,虽然通过多个 语句也能实现同样的动能。但是相比而言.PL/SaL具有更为明显的一些优点  (1)PL/SOL具有编程语言的特点,它能把一组S0L语句放到一个模块中,使其...

恰恰_77 759

读书笔记:深度学习入门-基于python的理论与实现(俗称鱼书)

终于从头到尾把鱼书看完啦,真的是非常入门,非常查漏补缺,对新手很友好,对有一定基础的人也非常不错。看完不复习等于没看,所以今天开始复盘,顺便写这篇读书笔记。希望分享给没看过这本书或者看过这本书的同僚们参考,欢迎大家指教。我将从第三章神经网络开始复习,前两章内容书里已经非常基础and清楚了。(会持续更新滴).........

博客而已 1万+

车载与安防项目实战:如何用RK3588搭配NVP6158C实现4路AHD摄像头BT1120接入与同步预览

本文详细解析了基于RK3588处理器与NVP6158C解码芯片实现4路AHD摄像头BT1120接入与同步预览的技术方案。针对车载环视和安防监控场景,重点探讨了硬件架构设计、BT1120接口配置、多路同步机制及Android HAL适配等核心问题,提供了从底层驱动到上层应用的完整实现路径,为相关领域的工程实践提供可靠参考。

weixin_30571465的博客 486

【基于SSH框架的企业级应用开发】Oracle数据库基础

Oracle数据库基础 Oracle基础知识 Oracle简介 Oracle是一个数据库管理系统,是oracle公司的核心产品. Oracle 数据主要特点 支持多用户,大事务量的事务处理 在保持数据安全性和完整性方面性能优越 支持分布式数据处理,将分布在不同物理位置的数据库用通信网络链接起来,在分布式数据库管理系统的控制下,组成一个逻辑上统一的数据库,完成数据处理任务 具有可植性...

恰恰_77 657

Material Studio中分子动力学模拟得到密度density和溶解度参数

使用sketh工具画出全原子分子,以异辛烷为例子。

handsome213的博客 7318

Y2 基于SSH框架的企业级应用开发 第一章 上机+课后

select * from employee --上机2 SQL>CREATE TABLE employee (empno NUMBER(4) NOT NULL ,--员工编号 ename VARCHAR2(10),--员工姓名 job VARCHAR2(9),--员工工种 mgr NUMBER (4),--上级经理编号 hiredate ...

weixin_44269168的博客 1327

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 418

SAP中错记虚拟利润中心的调整,冲销处理实例

我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 1795

Y2 基于SSH框架的企业级应用开发 第二章 上机+课后

--上机1 --创建表空间,大小为10M,文件大小可自动扩展,允许文件扩展的最大限度为无限制 create tablespace tp_orders datafile 'E:\作业\Y2\第一学期\第二章\tb.dbf'--注意!!!!,这个一旦创建就不要删,删除后你就登陆不了Oracle了 size 10M autoextend on ; --创建用户,密码bdqn,,默认表空间tp_ord...

weixin_44269168的博客 1066

RTX 4060笔记本也能跑!保姆级教程:用Ollama在Windows上部署DeepSeek-R1-8B模型

本文详细介绍了如何在RTX 4060笔记本上通过Ollama本地部署DeepSeek-R1-8B模型,提供从环境配置到性能调优的全流程优化指南。针对笔记本用户的显存、散热等问题,给出了量化模型选择、启动参数优化及散热解决方案,帮助用户在消费级硬件上高效运行大语言模型。

weixin_28745067的博客 524

[学习笔记] 基于SSH框架的企业级应用开发之Oracle(一)

一、初识Oracle 1、Oracle介绍: (1)Oracle数据库系统是美国Oracle公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的C/S或B/S体系结构的数据库之一。 (2)Oracle数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库, 它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。 2、Oracle数据库的主要特点: (1)支持多用户、大事务量的事务处理。 (2)在保持数据安全性和完整性

阿多的博客 296

【Agent从入门到实践】40 容错优化:异常处理、重试机制、降级策略

各位小伙伴,咱们的多Agent框架一路优化到现在,决策快、执行效率高、资源用得省,看似啥都行,但只要一遇到网络波动、工具故障、数据异常调用web_search工具时网络超时,整个检索任务直接失败,写作Agent没数据可用向量库连接异常,向量检索直接崩掉,依赖检索结果的Agent全趴窝单个Agent执行出错,整个并行任务流程直接中断,前功尽弃高并发下部分工具调用失败,框架没有备用方案,只能返回任务失败说白了,咱们之前的框架只有正常执行逻辑,没有异常兜底逻辑。

人工智能AI技术 910

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

eclipse搭建ssh的

SSH框架是最常用的框架之一,在搭建SSH框架的时候总有人遇到这样,那样的问题。下面我介绍一下SSH框架搭建的全过程。  第一步:准备工作。    下载好eclipse,Struts2,Spring,Hibernate。    1.eclipse:eclipse下载的时候建议下载JavaEE版的eclipse。                   当然你也可以下载eclipse-SDK。(

LiHu0512的专栏 1431

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 四-六章笔记
下一篇: 解决 Spring Boot 2.x css js 等静态文件不工作
OceanLee丶
博客等级 码龄9年 17粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值