在这里我没有说明Spring与Struts1.2的整合,这部分内容请参看《SSH框架的组合方式一》~!
SSH组合方案三:Hibernate.cfg.xml由Spring管理,用到事务,事务在DAO层
1,应先写好包
com.mengya.entity:实本包
com.mengya.dao:DAO接口包
com.mengya.dao.imple实体包
com.megnya.util:uitl包
2,加上Spring支持
3,加上Struts支持
4,加上Hibernate支持
5,由Hibernate创建entity类和DAO
可以在dao中重载一下delete方法,由ID删除对象
由产生的DAO抽出接口来分别把它们分到com.megnya.dao与com.mengya.dao.imple包中
6,加入Struts中的Action与ActionForm
7,修改struts-config.xml中的action的type值为:org.springframework.web.struts.DelegatingActionProxy作为代理
在struts-config.xml中加上
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="classpath*:applicationContext.xml"/>
</plug-in>
8,在actionForm中封装BO,在action中写好要用的方法
9,在Spring的applicationContext.xml中配置上action
11,发布出错,少了一个包 commons-pool-1.3.jar
12,没有处理gbk问题,在web.xml中可以加在Spring帮我们写好的filter
applicationContext.xml配置如下:
<!-- 配置数据源 -->
<bean id="myds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url"
value="jdbc:sqlserver://localhost:1433;databaseName=mp">
</property>
<property name="username" value="sa"></property>
<property name="password" value="mengya"></property>
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="myds" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/mengya/entity/Student.hbm.xml</value>
</list>
</property>
</bean>
<!-- 配置DAO -->
<bean id="StudentDAO" class="com.mengya.dao.imple.StudentDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 配置action -->
<bean name="/stu" class="com.mengya.struts.action.StuAction">
<property name="studao" ref="StudentDAO" />
</bean>
若不用事务就不用继续
若要用到事务接着上面的进行.....
13,在Spring的applicationContext.xml中配置
<!-- 配置事务管理器 -->
<bean id="transacitonManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置抽象事务代理,这个bean可以被多个对象继承 -->
<bean id="abstractTranProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transacitonManager" />
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="merge*">PROPAGATION_REQUIRED</prop>
<prop key="*">readOnly</prop>
</props>
</property>
</bean>
<!-- 代理DAO -->
<bean id="StudentDAOProxy" parent="abstractTranProxy">
<property name="target" ref="StudentDAO"/>
</bean>
<!-- 这里的DAO是目标对象 -->
<bean id="StudentDAO" class="com.mengya.dao.imple.StudentDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
然后
<!-- action中指向代理对象 -->
<bean name="/stu" class="com.mengya.struts.action.StuAction">
<property name="studao" ref="StudentDAOProxy" />
</bean>