1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件
3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build Path, 同时也提供了 applicationcontext.xml 文件 注意 : 最好把 applicationcontext.xml 文件保存到当前项目的 WebRoot/WEB-INF 的根目录下
4. 删除 hibernate.cfg.xml 文件, 修改 applicationcontext.xml 文件的内容, 增加 sessionfactory 和 datasource 的设置 修改的内容如下所示 : <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource"> <property name="driverclassname" value="oracle.jdbc.driver.oracledriver"> <property name="url" value="jdbc:oracle:thin:@liuweiv3000:1521:ora9">
</bean> <property name="username" value="scott"> <property name="password" value="tiger"> <bean id="sessionfactory" class="org.springframework.orm.hibernate3.localsessionfactorybean"> <property name="datasource"> <ref bean="datasource" /> <property name="hibernateproperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.oracle9dialect </prop> </props> <property name="mappingresources"> <list> <value>cn/com/jobedu/shop/model/catalog.hbm.xml</value> </list> </bean> </beans> 5. 通过 MyEclipse 的向导方式, 生成 POJO 类和对应的映射文件
6. 修改 applicationcontext.xml 文件中 <property name="mappingresources"> 元素的内容 如下所示 : <property name="mappingresources"> <list> <value>cn/com/jobedu/shop/model/catalog.hbm.xml</value> <value>cn/com/jobedu/shop/model/product.hbm.xml</value> </list> 7. 编写 DAO 接口 package cn.com.jobedu.shop.dao; import java.util.list; import cn.com.jobedu.shop.model.catalog; public interface CatalogDao { public void create(catalog c); public Catalog getcatalog(long id); public List getcatalogs(); public void update(catalog c); public void remove(long id); 8. 编写 DAO 接口的实现类, 实现类使用 Spring 提供的帮助类 示意如下 : package cn.com.jobedu.shop.dao.hibernate; import java.util.list; import org.springframework.orm.hibernate3.support.hibernatedaosupport; import cn.com.jobedu.shop.dao.catalogdao; import cn.com.jobedu.shop.model.catalog;
public class CatalogDaoHibernate extends HibernateDaoSupport implements CatalogDao { @Override public void create(catalog c) { // HibernateTemplate template=gethibernatetemplate(); // template.save(c); gethibernatetemplate().save(c); @Override public Catalog getcatalog(long id) { return (Catalog)getHibernateTemplate().get(Catalog.class, id); @Override public List getcatalogs() { return gethibernatetemplate().find("from Catalog order by id desc"); @Override public void remove(long id) { // Catalog c=this.getcatalog(id); // gethibernatetemplate().delete(c); gethibernatetemplate().delete(getcatalog(id)); @Override public void update(catalog c) { gethibernatetemplate().update(c); 9. 修改 applicationcontext.xml 文件, 增加对 Dao 实现类的配置 <bean id="catalogdao" class="cn.com.jobedu.shop.dao.hibernate.catalogdaohibernate"> <property name="sessionfactory"> <ref bean="sessionfactory" /> </bean>
1.2 再组合 Struts2, 完成 Struts2 Spring 和 Hibernate 的三者组合 0. 修改 web.xml 文件, 增加 struts2 的所需要的过滤器配置 <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 1. 增加 Struts2 相应类库, 增加 struts2-spring-plugin-x-x-x.jar 文件 (Struts 的压缩包中,Struts 所提供的 )
2. 需要拷贝 struts.xml 文件到 src 跟目录下, 再修改 struts.xml 文件, 进行常量配置 <struts> <constant name="struts.objectfactory" value="spring" /> </struts> 3. 修改 web.xml 文件, 配置 Spring 监听器和上下文变量 <context-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/applicationcontext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> 修改 web.xml 文件, 增加 OpenSessionInViewFilter 的设置 <filter> <filter-name>lazyloadingfilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.opensessioninviewfilter </filter-class>
</filter> <filter-mapping> <filter-name>lazyloadingfilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> 4. 编写 Action 类 5. 配置 struts.xml 文件 struts.xml <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.objectfactory" value="spring" /> <include file="struts-default.xml"/> <package name="default" extends="struts-default"> <action name="hello" class="hellobean"> <result>hello.jsp</result> </action>... </package> </struts> 6. 修改 applicationconext.xml, 默认情况下,Spring 从下面的文件中寻找为 action 所做的配置 <?xml version="1.0" encoding="utf-8"?> <beans default-autowire="byname"> <bean id="hellobean" class="cn.com.jobedu.helloworld" scope="prototype"/>... </beans> 7. 编写所需要的 JSP 文件 8. 部署, 调试整个项目 <!-- 配置事务管理器 -->
<bean id="transactionmanager" class="org.springframework.orm.hibernate3.hibernatetransactionmanager"> <property name="sessionfactory"> <ref local="sessionfactory"/> </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> <!-- 配置那些类的方法进行事务管理, 当前 cn.com.jobedu.crm.service 包中的子包 类中所有方法需要, 还需要参考 tx:advice 的设置 --> <aop:config> <aop:pointcut id="allmanagermethod" expression="execution (* cn.com.jobedu.crm.service.*.*(..))"/> <aop:advisor advice-ref="txadvice" pointcut-ref="allmanagermethod"/> </aop:config>