Struts、Hibernate和Spring的整合

 

 

Spring整合Hibernate

Spring以其开放性,能与大部分ORM框架良好的整合.这样Spring就能轻松地使用ORM。

Spring提供了DAO支持,DA0组件是应用的持久层访问的重要组件,我们把主要精力集中在数据的管理口上。

此外,Spring还提供了一致的异常抽象,不需要在编码时显示的捕获各种特定的异常。

通过Bibernate进行数据持久层操作时,Hibernate的Session接口提供了基本的数据访问方法,获得Hibernate Session对象方法是要实现Hibernate的SessionFactory接口,SessionFactory接口极为重要,它是单个数据库映射关系编译后的内存镜像,负责打开、关闭和管理Session。Hibernate访问时,需要手动创建SessionFactory实例,这是繁琐的工作,我们希望能以声明式的方式管理SessionFactory实例。Spring的loc容器提供了这种方式,通过配置文件的配置管理SessionFactory实例,使用Spring管理Session对象,使用Spring实现声明式的事务管理。

下面是Spring对Hibernate的整合时的关键步骤。

1、在Spring的配置文件ApplicationContext.xml中配置Hibernate对SessionFactory的设置。如下面的示例代码。

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    <property name="dataSource" ref="dataSource"/>

    <!-- 配置hibernate的其他的属性 -->

    <property name="hibernateProperties">

        <props>

            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

            <prop key="hibernate.show_sql">true</prop>

            <prop key="hibernate.format_sql">true</prop>

            <prop key="hibernate.hbm2ddl.auto">update</prop>

        </props>

    </property>

    <!-- 配置Hibernate的映射文件 -->

    <property name="mappingResources">

        <list>

            <value>cn/itcast/shop/user/vo/User.hbm.xml</value>

        </list>

    </property>

</bean>

Spring的IoC容器配置了SessionFactory Bean,它随应用的部署启动而加载,可以利用Spring依赖注入特性将该Bean注入其它Bean。我们由配置文件还可以看出,以声明式的方式管理SessionFactory时,可以让应用在不同数据源间切换,一旦持久层服务发生改变,程序代码不需要改动,只需修改配置文件即可,使得系统的可维护性加强。

2、使用Spring中的HibernateDaosupport和HibernateTemplate类简化Hibernate DAO实现类的编写,完成数据持久化的操作。

3、通过Spring的事务机制进行统一的事务管理。Spring可以采用编程式和声明式两类事务管理。声明式的事务管理更灵活。可以在Spring中使用注解式的声明式事务管理:

<!-- 配置事务管理器 -->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

    <property name="sessionFactory" ref="sessionFactory"/>

</bean>

<!-- 注解事务驱动 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

 

Spring整合Struts2

Spring也提供了MVC模式的支持,但Struts是比较单纯的MVC框架,开发中更倾向Spring和Struts整合开发。

Struts和Spring的整合比较简单顺畅。整合关键点是:将Struts中的Action的实例生成不再由Struts负责,而交给Spring容器管理,主要目的是让控制器与业务逻辑组件实现分离。基于该目的,我们采用工厂模式策略,让Spring容器管理Action,利用IoC的依赖注入特性为控制器注入业务逻辑组件。Struts只单纯扮演控制器的角色。

下面是Spring和Struts整合的关键步骤。

Struts的核心控制器必须能装载Spring的应用程序环境。

Spring和Struts整合有两种方式

1、Struts2的Action由Struts2框架自身创建.

2、Struts2的Action交给Spring框架创建.

我们推荐使用第二种方式,因为第二种方式,Action类由Spring容器进行管理,可以方便的对Action类进行AOP的编程.但第二种有一个关键地方:就是在Struts2框架创建Action类的时候,默认是多例的.而Spring容器在管理类的时候,默认创建是单例的.单例的这种方式就容易产生线程安全问题.所以一定要配置类的scope属性.

Spring的配置文件中:

<bean id="userAction" class="cn.itcast.shop.user.action.UserAction" scope="prototype">

</bean>

Struts的配置文件中:

<action name="user_*" class="userAction" method="{1}">

</action>

Struts2HibernateSpring的整合开发

将两组整合放在一起进行开发,就可以进行三者的组合开发。在进行三者整合开发时,一般可以采取由上往下和由下往上的分层开发的原则,多数实际项目开发,往往采用后者的开发模式,即:

(1)从底层开发,先开发领域对象,即一些实体类,这些领域对象会在各层之间进行传递,利用Hibernate做好领域对象和数据库表的映射关系。

(2)DAO层的开发。它是专门独立出来对数据进行持久化,即处理数据的CRUD操作,也是利用Spring对Hibernate提供的DAO支持类HibernateDaoSupport来实现的。每个DAO组件对应一个数据库表。

(3)Service层的开发。这层主要是具体业务组件开发,主要用于处理各类业务逻辑,并且能隔离事务和对其他资源调度。

(4)Action层开发。主要是处理Web请求,由Spring进行管理。

   搭建开发环境:

SSH整合:

1.创建一个web工程:

2.引入jar包和配置文件:

* struts2:

* jar:

struts-2.3.15.3appsstruts2-blank.warWEB-INFlib*.jar

struts-2.3.15.3libstruts2-json-plugin-2.3.15.3.jar

struts-2.3.15.3libstruts2-spring-plugin-2.3.15.3.jar

* 配置文件:

* web.xml

 <!-- 配置Struts2的核心过滤器 -->

 <filter>

     <filter-name>struts2</filter-name>

     <filter-class>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

 </filter>

 

 <filter-mapping>

     <filter-name>struts2</filter-name>

     <url-pattern>/*</url-pattern>

 </filter-mapping>

* struts.xml

* Spring:

* jar:

Spring3.2 开发最基本jar

spring-beans-3.2.0.RELEASE.jar

spring-context-3.2.0.RELEASE.jar

spring-core-3.2.0.RELEASE.jar

spring-expression-3.2.0.RELEASE.jar

com.springsource.org.apache.commons.logging-1.1.1.jar

com.springsource.org.apache.log4j-1.2.15.jar

AOP开发

spring-aop-3.2.0.RELEASE.jar

spring-aspects-3.2.0.RELEASE.jar

com.springsource.org.aopalliance-1.0.0.jar

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

Spring Jdbc开发

spring-jdbc-3.2.0.RELEASE.jar

spring-tx-3.2.0.RELEASE.jar

Spring事务管理

spring-tx-3.2.0.RELEASE.jar

Spring整合其他ORM框架

spring-orm-3.2.0.RELEASE.jar

Springweb中使用

spring-web-3.2.0.RELEASE.jar

Spring整合Junit测试

spring-test-3.2.0.RELEASE.jar

* 配置文件:

* web.xml

 <!-- 配置Spring的核心监听器 -->

 <listener>

     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

 </listener>

 

 <context-param>

     <param-name>contextConfigLocation</param-name>

     <param-value>classpath:applicationContext.xml</param-value>

 </context-param>

* applicationContext.xml

* log4j.properties

 

* Hibernate:

* jar:

* hibernate-distribution-3.6.10.Finalhibernate3.jar

* hibernate-distribution-3.6.10.Finallib equired*.jar

* hibernate-distribution-3.6.10.Finallibjpa*.jar

* slf4j-log4j整合的jar :

* 数据库驱动:

* 连接池:(c3p0连接池)

* 配置文件:

* 没有hibernate的核心配置文件的方式整合:

* 映射文件:

 

3.配置基本配置信息:

* C3P0连接池:

* 引入外部属性文件:

* jdbc.properties

* 配置连接池:

<!-- 配置连接池: -->

<!-- 引入外部属性文件 -->

<context:property-placeholder location="classpath:jdbc.properties"/>

<!-- 配置C3P0连接池: -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

    <property name="driverClass" value="${jdbc.driver}"/>

    <property name="jdbcUrl" value="${jdbc.url}"/>

    <property name="user" value="${jdbc.user}"/>

    <property name="password" value="${jdbc.password}"/>

</bean>

 

* Hibernate相关信息:

<!-- Hibernate的相关信息 -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    <!-- 注入连接池 -->

    <property name="dataSource" ref="dataSource"/>

    <!-- 配置Hibernate的其他的属性 -->

    <property name="hibernateProperties">

        <props>

            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

            <prop key="hibernate.show_sql">true</prop>

            <prop key="hibernate.format_sql">true</prop>

            <prop key="hibernate.connection.autocommit">false</prop>

            <prop key="hibernate.hbm2ddl.auto">update</prop>

        </props>

    </property>

    <!-- 配置Hibernate的映射文件 -->

   

</bean>

 

* 事务管理:

<!-- 事务管理: -->

<!-- 事务管理器 -->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

    <property name="sessionFactory" ref="sessionFactory"/>

</bean>

<!-- 开启注解事务 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

 

原文地址:https://www.cnblogs.com/fifiyong/p/6388904.html