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方式:
- <!-- 事务管理器 -->
- <bean id="transactionManager"
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory">
- <ref local="sessionFactory"/>
- </property>
- </bean>
- <!-- 配置事务特性,配置add,delete,update开始的方法,事务传播特性为required -->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <tx:method name="add*" propagation="REQUIRED"/>
- <tx:method name="delete*" propagation="REQUIRED"/>
- <tx:method name="update*" propagation="REQUIRED"/>
- <tx:method name="*" read-only="true"/>
- </tx:attributes>
- </tx:advice>
- <!-- 配置那些类的方法进行事务管理,当前com.sy.crm.service包中的子包,
- 类中所有方法需要,还需要参考tx:advice的设置 -->
- <aop:config>
- <aop:pointcut id="allManagerMethod" expression="execution(*
- com.sy.crm.service.*.*(..))"/>
- <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
- </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配置映射文件和事务管理或者注入,可以将相应的地方替换掉。