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来处理请求,则后面的过滤器执行不到了

posted @ 2020-04-29 10:46  爱编程DE文兄  阅读(296)  评论(0编辑  收藏  举报