1.1 組合Hibernate與Spring
1. 在 Eclipse中,新建一個 Web project。
選擇Java EE 5.0 。
2. 給該項目增加 Hibernate 開發能力,增加 Hibernate 相關類庫到當前項目的 Build Path,同時也提供了 hibernate.cfg.xml 這個配置文件。
選擇Hibernate3.1,
勾選Core包。
3. 給該項目增加 Spring 開發能力,增加 spring 相關類庫到當前項目的 Build Path,同時也提供了 applicationContext.xml 文件。注意:最好把 applicationContext.xml 文件保存到當前項目的 WebRoot/WEB-INF的根目錄下。
選擇Spring 2,勾選Core,Persistence Core包(會自動選擇AOP包),
勾選Web包。
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>
<property name="url"
value="jdbc:oracle:thin:@liuweiv3000:1521:ora9">
</property> <property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>cn/com/jobedu/shop/model/Catalog.hbm.xml</value>
</list>
</property>
</bean>
</beans>
進入build path,添加commons-dbcp-1.2.2.jar和commons-pool-1.3.jar。
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>
</property>
7. 編寫 DAO接口。
package cn.com.jobedu.shop.dao;
8. 編寫 DAO接口的實現類,實現類使用 Spring 提供的幫助類。示意如下:
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);
}
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" />
</property>
</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"/>
</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>
<!-- 配置那些類的方法進行事務管理, 當前 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>