ssh三大框架整合
一.ssh整合理论
1.ssh整合其实是把hibernate和struts2的依赖对象交给spring来创建和维护
2.struts2的Action创建由spring来创建
3.hibernate的sessionFactor以及session的获得,aop事务等由spring来管理
二.导包
1.hibernate(3类包):
(1)hibernate/libs/required下的所有jar
(2)hibernate/libs/jpa的一个jpa包,java持久化规范(接口)包
(3)mysql驱动包
2.struts2(2类包):
(1)struts2/apps/blank.war里的lib下所有Jar(注意的是:有一个javasist包跟hibernage提供的jar冲突了,删除低版本的那个)
(2)struts2的libs下的struts-spring插件包(导入该包后,一旦struts启动就会去找spring的配置文件,如果找不到会抛出异常)
3.spring(6类包):
(1)基本核心包4+2:spring-beans,spring-context,spring-core,spring-expression4个,logging+log4j(这个较新版本可以不用)2个包
(2)整合web 1个:spring-web包
(3)整合aop 4个:spring-aop,spring-aspect的2个spring提供,aop联盟包和weaver包的2个第三方提供
(4)整合jdbc 4个:spring-jdbc,spring-tx,spring-orm(spring整合Hibernate所需),c3p0 4个包
(5)整合junit 1个:spring-test
(6)标签库包2个(如果是my-eclipse则不用):jstl和standard包
三.单独整合spring到web项目
1.创建配置文件,导入4个约束:beans,context,aop,tx
2.配置web.xml,让容器随项目启动而启动
四.单独整合struts2到web项目
1.创建配置文件,导入约束
2.配置web.xml核心过滤器
五.整合spring与struts2
1.配置常量,在default.properties有两个常量,如图:
(1)struts.objectFactory = spring:如果打开了该常量,则struts的对象创建交给spring来负责,包括属性的装配
(2)struts.objectFactory.spring.autoWire = name:如果上面的常量打开了,这个打不打开都无所谓;该常量表示spring自动装配action中的属性,得保证action的属性名和beanName得一样才能完成自动装配
2.整合方案
(1)整合方案1:struts.xml的action元素的class属性的完整类名不变,还是由struts来创建Action对象,但spring来自动装配Action对象依赖的属性(不推荐)
(2)整合方案2:struts.xml的action元素的class属性值变成applicationContext.xml的action的beanName,由spring全权管理和维护,但action对象的依赖属性须在bean元素内手动配置<property>;且action类对应的bean的scope的值必须为prototype
六.单独整合hibernate
1.书写实体类和orm元数据,完成实体类和表之间的映射关系
2.书写主配置,包括必选配置,可选配置,引入orm元数据配置
(1)书写主配置特别注意的是有一些已经归spring管理和维护的配置就不要在配了,比如session与当前线程绑定(session相关的配置),隔离级别的指定等,如图:
七.整合spring和hibernate
1.在spring中配置sessionFactory,该对象由spring来创建和管理;注意的是该sessionFactory类是localsessionFactoryBean,由spring提供的,封装了Hibernate的sessionFactory对象;记得选的时候得对应好自己hibernate的版本
2.指定加载配置文件;hibernate时创建sessionFactory时得先加载配置文件信息,所以我们的sessionFactory是得依赖配置信息的
(1)加载配置方案1:读取hibernate.cfg.xml的配置信息
(2)加载配置方案2(推荐使用):把hibernate的主配置信息挪动spring中,读取spring中hibernate的配置信息,如图:
3.引入c3p0连接池
>spring加入hibernate的四大参数配置,hibernate直接创建连接来操作数据库。现在我们想让hibernate通过连接池来获取连接
(1).创建四大参数的配置文件
(2).在spring配置文件配置读取properties,如图:
(3).配置c3p0连接池,如图:
(4).为sessionFactory注入连接池,即可以通过连接池获取连接创建session来操作数据库,如图:
(5)删除掉在spring中配置的四大参数信息
4.HibernateTemplate操作数据库
(1)在学习spring整合jdbc时,有一个jdbcTemplate来操作数据库;spring根据不同的技术进行封装并提供了不同的模板,整合hibernate提供了HibernateTemplate对象,其底层还是封装了session代码来操作数据库,不过该对象得依赖sessionFactory来获取session;
(2)dao层可以通过继承HibernateDaoSupport来获取到HibernateTemplate对象,省了在spring配置,只需要把sessionFactory注入给HibernateDaoSupport即可
(3)用HibernateTemplate查询数据库,如图:
八.整合aop事务
在spring操作事务一定得有核心事务管理器,spring为不同的平台提供不同的事务管理器,为hibernate技术封装了HibernateTransactionManager;
1.spring配置核心事务管理器,底层封装了session代码,得依赖session工厂来获取,如图:
2.xml配置aop事务
(1)配置通知,如图:
(2)配置目标对象,如图:
(3)配置将通知织入到目标对象,如图:
3.注解配置aop事务
1.spring配置文件开启注解配置事务,如图:
2.在方法或类上加事务注解,如图:
九.扩大session的范围
1.学习hibernate懒加载时,生成的代理对象得保证它能在session的环境下使用,所以在这里也得扩大session的作用范围
2.spring已经提供了一个过滤器用于扩大session的范围,所以在web.xml配下就可以了,如图:
3.得注意的是:任何过滤器都建议放在struts核心过滤器的前面,因为到核心过滤器判断需要struts2来处理请求,则后面的过滤器执行不到了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~