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.3\apps\struts2-blank.war\WEB-INF\lib\*.jar

struts-2.3.15.3\lib\struts2-json-plugin-2.3.15.3.jar

struts-2.3.15.3\lib\struts2-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.Final\hibernate3.jar

* hibernate-distribution-3.6.10.Final\lib\required\*.jar

* hibernate-distribution-3.6.10.Final\lib\jpa\*.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSH整合示例(详情见我博客专栏)之前的博客我们总结了spring基础、spring分别整合struts2、hibernate、mybatis等,今天我们来同时整合strutsspringhibernate,也就是所谓的 ssh 。 整合流程: 1 首先整合springhibernate,这次我们在spring 中配置bean使用注解的方式 ,hibernate实体映射关系也使用注解的方式,配置完毕后用简单方法测试下hibernate是否整合成功。 a 加入支持:添加 spring核心包、hibernate 3.6 包、 spring整合hibernate包 , 在src下建立applicationContext.xml (先建立src下便于测试hibernate)。 b 编写实体类,加入hibernate注解,编写方法类测试类,在applicationContext.xml中添加hibernate模板类配置以及包扫描语句 。在类中添加spring bean注解。 c 测试类中 主动解析applicationContext.xml ,获取bean 执行dao层方法进行测试 2 将struts2 整合进去, 这次在struts.xml中我们使用通配符的方式配置action。 a 加入支持 : 添加struts2.3.15 必需包 以及 struts json包(ajax要用到),spring整合struts2包,spring web 包,在src目录下建立struts.xml,复制头文件进去。将applicationContext.xml移到WEB-INF目录下。web容器中(web.xml)中添加struts2 filter以及spring 监听器。 b 在struts.xml中添加action,使用通配符的方式 , 注意这里和单独struts2不同的地方: class属性指向的是bean 的 id ,这里我们配置bean采用spring ioc注解的方式, 所以默认的bean的id 为 类名(首字母小写) c 编写action类、页面进行测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值