SSH整合步骤(二)

准备好所需要的JAR包后,开始进行SSH框架的整合

1. 新建WEB工程

2. 首先集成spring和hibernate

    引入spring和hibernate所必需的jar文件(将JAR文件粘贴到WEB-INF的lib目录下)

    也可以以用户库的方式引入(window-preference-java-build path-user Libraries -    new,右键工程-bulid path-configure build path-libraries-add library-user library)

3. 引入oracle数据库的驱动类

    

    ojdbc14.jar  粘贴到WEB-INF的lib目录下

4.  新建spring的配置文件

     新建beans.xml放在src目录下

     spring的配置文件主要包含以下几个部分:

     a. 可以采用自动扫描的方式管理需要管理的类,注入可以通过注解的方式注入

        <context:component-scan base-package="cn.itcast"/>

         也可以采用传统的<bean>标签的方式管理类,注入既可以采用注解的方式,也可以采用传统的ref方式注入

<bean id="employeeDao"  

class="com.sy.crm.dao.hibernate.EmployeeDaoHibernate">  

<property name="sessionFactory">  

<ref bean="sessionFactory" /> 

</property>  

</bean>  

<bean id="employeeManager"  

class="com.sy.crm.service.impl.EmployeeManagerImpl">  

<property name="employeeDao">  

<ref bean="employeeDao" />  

</property>  

</bean>  

    b.sessionFactory交个spring进行管理

    

       交给spring管理sessionFactory后,可以在DAO层直接注入sessionFactory对象,达到解耦并且减少了手动创建sessionFactory的步骤,而且spring注入的sessionFactory对象默认是单例的,省去了我们为它编写单例的代码

      annotation映射和xml映射引入的类不同,分别为

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

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

     完整的sessionFactory配置:

<!--Spring管理hibernate的sessionFactory   接管hibernate的事务管理服务-->

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

        <!--注入数据源配置-->

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

        <!--指定hibernate的映射文件

        <property name="mappingResources">                              

              <list>

                  <value>cn/itcast/bean/buyer.hbm.xml</value>

              </list>

        </property>-->

        <!--指定hibernate的属性值-->

        <property name="hibernateProperties">

       

           <props>

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

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

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

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

           </props>                            

             <!-- <value>

                  hibernate.dialect=org.hibernate.dialect.OracleDialect

                  hibernate.hbm2ddl.auto=update

                  hibernate.show_sql=true

                  hibernate.format_sql=true

              </value>-->

        </property>

        <property name="packagesToScan" value="com.gyjx19e.om.*"/>  //此句必须写到上层目录 例如我的bean都在com.gyjx19e.om.bean下,但是我value写com.gyjx19e.om.bean.*会报实体找不到的错误,改为com.gyjx19e.om.*就正确了  此句用来扫描所有的实体类,以便在保存实体的时候可以找到实体与对应数据库表的映射关系(采用xml映射文件配置,则不需要该句)

     </bean>

    

   c. 配置数据源

      可以采用c3p0、dbcp、prxool等方式配置数据源

      本例采用c3p0方式

      //配置数据源 采用c3p0方式配置     <!--配置数据源 采用c3p0方式配置-->

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

           <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>

           <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.31.195:1521:OM"/>

           <property name="user" value="om"/>

           <property name="password" value="om"/>

          

           <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default:3-->

           <property name="initialPoolSize" value="1"/>

           <!--连接池中保留的最小连接数。-->

           <property name="minPoolSize" value="1"/>

           <!--连接池中保留的最大连接数。 Default:15-->

           <property name="maxPoolSize" value="300"/>

           <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default:0-->

           <property name="maxIdleTime" value="60"/>

           <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:3-->

           <property name="acquireIncrement" value="5"/>

           <!--每60秒检查所有连接池中的空闲连接。Default:0-->

           <property name="idleConnectionTestPeriod" value="60"/>

    </bean>

 

   d. 配置spring事务管理服务

 

      可以采用注解的方式实现事务管理也可以采用传统xml的方式配置事务

 

      注解的方式:

 

      //声明事务处理器  采用注解的方式实现事务管理

<beanid="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<propertyname="sessionFactory"ref="sessionFactory"/>

     </bean>

      //使用基于注解方式配置事务     <tx:annotation-driven transaction-manager="txManager"/>

 

     传统的xml方式:

 

  1.      <!-- 事务管理器 -->  
  2.     <bean id="transactionManager"    
  3.     class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  4.     <property name="sessionFactory">  
  5.     <ref local="sessionFactory"/>  
  6.     </property>  
  7.     </bean>  
  8.     <!-- 配置事务特性,配置add,delete,update开始的方法,事务传播特性为required -->  
  9.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  10.     <tx:attributes>  
  11.     <tx:method name="add*" propagation="REQUIRED"/>  
  12.     <tx:method name="delete*" propagation="REQUIRED"/>  
  13.     <tx:method name="update*" propagation="REQUIRED"/>  
  14.     <tx:method name="*" read-only="true"/>  
  15.     </tx:attributes>  
  16.     </tx:advice>  
  17.     <!-- 配置那些类的方法进行事务管理,当前com.sy.crm.service包中的子包,   
  18.     类中所有方法需要,还需要参考tx:advice的设置 -->  
  19.     <aop:config>  
  20.     <aop:pointcut id="allManagerMethod" expression="execution(*   
  21.     com.sy.crm.service.*.*(..))"/>  
  22.     <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>  
  23.     </aop:config>  

完成的spring配置文件如下:

  

<?xml version="1.0" encoding="UTF-8"?> 

  <beans xmlns="http://www.springframework.org/schema/beans" 

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:aop="http://www.springframework.org/schema/aop" 

    xmlns:tx="http://www.springframework.org/schema/tx" 

    xsi:schemaLocation="  

    http://www.springframework.org/schema/beans   

    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context-2.5.xsd 

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

    http://www.springframework.org/schema/tx  

    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">   

   

    <!--自动扫描方式管理类-->  

    <context:component-scan base-package="com.gyjx19e.om"/>

   

    <!--配置数据源 采用c3p0方式配置-->

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

           <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>

           <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.31.195:1521:OM"/>

           <property name="user" value="om"/>

           <property name="password" value="om"/>

          

           <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default:3-->

           <property name="initialPoolSize" value="1"/>

           <!--连接池中保留的最小连接数。-->

           <property name="minPoolSize" value="1"/>

           <!--连接池中保留的最大连接数。 Default:15-->

           <property name="maxPoolSize" value="300"/>

           <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default:0-->

           <property name="maxIdleTime" value="60"/>

           <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:3-->

           <property name="acquireIncrement" value="5"/>

           <!--每60秒检查所有连接池中的空闲连接。Default:0-->

           <property name="idleConnectionTestPeriod" value="60"/>

    </bean>

 

    <!--Spring管理hibernate的sessionFactory   接管hibernate的事务管理服务-->

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

        <!--注入数据源配置-->

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

        <!--指定hibernate的映射文件

        <property name="mappingResources">                              

              <list>

                  <value>cn/itcast/bean/buyer.hbm.xml</value>

              </list>

        </property>-->

        <!--指定hibernate的属性值-->

        <property name="hibernateProperties">

       

           <props>

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

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

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

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

           </props>                            

             <!-- <value>

                  hibernate.dialect=org.hibernate.dialect.OracleDialect

                  hibernate.hbm2ddl.auto=update

                  hibernate.show_sql=true

                  hibernate.format_sql=true

              </value>-->

        </property>

        <property name="packagesToScan" value="com.gyjx19e.om.*"/>

     </bean>

    

     <!--声明事务处理器  采用注解的方式实现事务管理-->

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

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

     </bean>

 

     <!--使用基于注解方式配置事务-->

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

</beans>

 

如果采用xml配置映射文件和事务管理或者注入,可以将相应的地方替换掉。

相关推荐