理论介绍
image.png

1.导包

image.png

image.pngimage.pngimage.png

2.配置Spring到web项目

spring 约束(idea)
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
xmlns:context=”http://www.springframework.org/schema/context
xmlns:tx=”http://www.springframework.org/schema/tx
xmlns:aop=”http://www.springframework.org/schema/aop
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

在web.xml里面配置信息
image.png

3.配置Struts2和spring整合

把action的创建交给spring来管理
image.png

1)整合方案一:不推荐理由,最好由spring完整管理action的生命周期,spring的功能才能应用到action中去。

class属性上仍然配置action的完整类名
struts2仍然创建action,有spring负责组装action中的依赖属性
image.png
image.png
image.png
image.png
成功打印userService,说明成功注入。
image.png

2)整合方案二:spring负责创建和组转action

image.png
struts.xml

image.png
Application.xml
要注意,这样就要自动装配了,要把action里面的属性手动装配,而且action的对象范围要是多例才行。

4.配置hibernate到web项目

这里的隔离级别和session管理都不要配置了,因为spring有一套自己的管理机制
image.png
测试一下
image.png
保存成功了
image.png

5.spring整合hibernate

最核心的关键就是将SessionFactory放到Spring容器中

1)配置方案一:仍然使用外部的hibernate.cfg.xml文件

image.png
applicationContext.xml

image.pngimage.png
同样成功了。

2)配置方案二:在spring种配置hibernate.cfg.xml文件

image.png

6.使用c3p0连接池

直接从连接池获得连接,就不用hibernate去连接了,上图的那些配置就不需要了
image.png
将连接池导入hibernate配置里面
image.png

7.HibernteTemplate来操作数据库

这里创建一个UserDao来操作数据库
因为这个模板是依赖sessionFactory的,所以要注入
image.png
下图是分别是hql 和criteria 的查询方法
image.png

两个测试方法都过了
image.png

8.整合AOP事务(aop事务是啥来着,真就学了后面忘了前面)

XML配置事务

就挺离谱的。写这个真就一波三折,但都是自己翻的错。服了。
最重要的就是下面这里面的配置。
image.png
Servicce写了一个userDao.save()方法来保存用户。
image.png
UserDao里面有一个getHIbernateTemplate方法,然后直接调用sava就可以保存传来的user对象。
image.png
我的悲剧就是从这里开始的,一开始就提示,NoSuchMethod,后面查询说是要把spring升级到5.05版本。但是一开始没有升级,我就去改了配置文件。不知道动了哪里,然后就一直报错,说是什么不能创建bean,就是sessionFactory创建失败。后面找到原因了,那个核心管理器那里,class写错了,我真的服了,不同的模板有不同的类,jdbc,mybatis,hibernate,我的的确确吐了,昨天写的jdbc的模板是依赖datasource的,我没注意,今天hibernate是依赖sessionFactory的,人傻了。然后这里一直创建bean失败,就是这里的原因。如果不加事务,运行方法就会提示,这是可读的,不能被修改巴拉巴拉的。后面找到罪魁祸首,就是事务织入那里,表达式打错了,真的真的一定要注意这个问题,太恶心了,可能会导致花好多时间来干一些和错误完全无关的事情。我还把spring升了版本。
还是注解事务好。

注解事务配置

首先下面的这里就不需要了,然后开启注解事务
image.png
开启注解事务
如果核心事务管理器的名字是transactionManager 就可以不用写
image.png
接下来配置一下Service的方法就好了。唉这简单的错误,我真的吐了。
image.png

image.png留在这里鞭尸

9.扩大session范围

把session的范围扩大到一次请求。比如hibernate里面有个懒加载,经常在页面用到的时候,session就已经在servlet关闭了。
注意:任何filter一定要在struts的filter前,因为struts是没有放行代码的
image.png