在學習這一部分的時候我作了一個用StrutsAction訪問UserDAO中方法,此方法使用了hibernateTemplate。調試過程中問題多多,好在一個一個解決了。
JPetStore2.0
已經有ibatis做為OR層了,我要換成hibernate需要修改Spring配置文件中的bean
id="TransactionManager" 、增加bean
id=“sessionFactory”。又因為配置文件id=TransactionManager的bean只能有一個,修改為hibernate后
原來使用ibatis的bean就都不好用了,所以我新創建了一個空的配置文件dataAccessContext-hibernate.xml。只有幾
個字定義的bean,如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- ========================= RESOURCE DEFINITIONS ========================= -->
<!-- Local Apache Commons DBCP DataSource that refers to a combined database --> <!-- (see dataAccessContext-jta.xml for an alternative) --> <!-- The placeholders are resolved from jdbc.properties through --> <!-- the PropertyPlaceholderConfigurer in applicationContext.xml --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost:3306/jpetstore</value></property> <property name="username" ><value>root</value></property> <property name="password" ><value>123456</value></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource"/> </property> <property name="mappingResources"> <list> <value>srx/test/hibernate/Account.hbm</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> net.sf.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.showsql"> true </prop> </props> </property> </bean> <!-- Transaction manager for a single JDBC DataSource --> <!-- (see dataAccessContext-jta.xml for an alternative) --> <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> <!-- this bellow is hibernate configuration for srx test--> <bean id="userDAO" class="srx.test.testhibernate.UserDAO"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> </beans>
|
原來包含很多復雜內容的applicationContext.xml也拷貝一份applicationContext2.xml,刪除和JPetStore相關的內容,留下通用的部分:
在Struts配置文件中增加自己的Action如下:
<action path="/showusers" type="srx.test.struts.action.UserAction"> <forward name="success" path="/WEB-INF/jsp/srx/test/hibernate/showusers.jsp"/> </action> |
web.xml中使用action作為*。do處理的servlet而不是默認的petstore。
并注釋掉名字為petstore,remoting的servlet。如下:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>Spring JPetStore</display-name>
<description>Spring JPetStore sample application</description>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>petstore.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/dataAccessContext-hibernate.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
...
</web-app>