1.导包
2.配置Spring到web项目
spring 约束(idea)
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“
3.配置Struts2和spring整合
1)整合方案一:不推荐理由,最好由spring完整管理action的生命周期,spring的功能才能应用到action中去。
class属性上仍然配置action的完整类名
struts2仍然创建action,有spring负责组装action中的依赖属性
成功打印userService,说明成功注入。
2)整合方案二:spring负责创建和组转action
struts.xml
Application.xml
要注意,这样就要自动装配了,要把action里面的属性手动装配,而且action的对象范围要是多例才行。
4.配置hibernate到web项目
这里的隔离级别和session管理都不要配置了,因为spring有一套自己的管理机制
测试一下
保存成功了
5.spring整合hibernate
最核心的关键就是将SessionFactory放到Spring容器中
1)配置方案一:仍然使用外部的hibernate.cfg.xml文件
applicationContext.xml
2)配置方案二:在spring种配置hibernate.cfg.xml文件
6.使用c3p0连接池
直接从连接池获得连接,就不用hibernate去连接了,上图的那些配置就不需要了
将连接池导入hibernate配置里面
7.HibernteTemplate来操作数据库
这里创建一个UserDao来操作数据库
因为这个模板是依赖sessionFactory的,所以要注入
下图是分别是hql 和criteria 的查询方法
8.整合AOP事务(aop事务是啥来着,真就学了后面忘了前面)
XML配置事务
就挺离谱的。写这个真就一波三折,但都是自己翻的错。服了。
最重要的就是下面这里面的配置。
Servicce写了一个userDao.save()方法来保存用户。
UserDao里面有一个getHIbernateTemplate方法,然后直接调用sava就可以保存传来的user对象。
我的悲剧就是从这里开始的,一开始就提示,NoSuchMethod,后面查询说是要把spring升级到5.05版本。但是一开始没有升级,我就去改了配置文件。不知道动了哪里,然后就一直报错,说是什么不能创建bean,就是sessionFactory创建失败。后面找到原因了,那个核心管理器那里,class写错了,我真的服了,不同的模板有不同的类,jdbc,mybatis,hibernate,我的的确确吐了,昨天写的jdbc的模板是依赖datasource的,我没注意,今天hibernate是依赖sessionFactory的,人傻了。然后这里一直创建bean失败,就是这里的原因。如果不加事务,运行方法就会提示,这是可读的,不能被修改巴拉巴拉的。后面找到罪魁祸首,就是事务织入那里,表达式打错了,真的真的一定要注意这个问题,太恶心了,可能会导致花好多时间来干一些和错误完全无关的事情。我还把spring升了版本。
还是注解事务好。
注解事务配置
首先下面的这里就不需要了,然后开启注解事务
开启注解事务
如果核心事务管理器的名字是transactionManager 就可以不用写
接下来配置一下Service的方法就好了。唉这简单的错误,我真的吐了。
9.扩大session范围
把session的范围扩大到一次请求。比如hibernate里面有个懒加载,经常在页面用到的时候,session就已经在servlet关闭了。
注意:任何filter一定要在struts的filter前,因为struts是没有放行代码的