zoukankan      html  css  js  c++  java
  • 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"/>

     

  • 相关阅读:
    定力
    cordova build android 环境的坑
    我和数据差个“axios" -- axios的原理解析
    Promise的原理探究及手写Promise
    vue长列表优化
    koa-中间件使用
    vue组件库自动生成文档-vue-styleguidist(二)
    vue组件库自动生成文档-vue-styleguidist(一)
    vue组件库自动生成文档-生成方式对比(1)
    我的目录
  • 原文地址:https://www.cnblogs.com/fifiyong/p/6388904.html
Copyright © 2011-2022 走看看