Roy-Spring手记-1-配置与集成Hibernate+Struts

一、配置
 
环境:spring-framework-2.0-rc3 Eclipse-3.2.1 tomcat-5.0.28 
 
1.准备:
 
  由于MyEclipse5.1还是spring1.2,所以我只使用了MyEclipse中的一般配置,当加入Spring支持后,删除MyEclise中有关Spring的构建路径的引用,添加自己的用户库,如:Spring-2.0。将spring中所有的jar文件都添加到这个用户库中,由于spring.jar并没有将所有组件都打到包内,对于初学者来说的话将spring-framework-2.0-rc3/dist/modules和spring-framework-2.0-rc3/lib里的包都加入到用户库中。(例外:删除了commons-attributes-api.jar和commons-attributes-compiler.jar两个包,原因是这两个包需要的东西我没有找到,至今没有发现有什么影响)
 
  将applicationContext.xml、log4j.properties、jdbc.properties放在WEB-INF里
 
  将hibernate-mapping.hbm.xml、放在src里
 
  注意:要将数据库连接所需的包加入Eclipse的构建路径里。
 
2.配置web.xml,添加如入代码
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
 </context-param>
 <context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>/WEB-INF/log4j.properties</param-value>
 </context-param>
 <listener>
  <listener-class>
   org.springframework.web.util.Log4jConfigListener
  </listener-class>
 </listener>
 <listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener
  </listener-class>
 </listener>
以上代码实现context的自动加载
 
3.配置applicationContext.xml
 
  第一,更改文档声明部分为:
 
  说明:Spring的文档中为 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd,系统没有找到配置。而spring-beans.jar包中的spring.schemas文件中给定的映射不是 spring-beans-2.0.xsd,而是spring-beans.xsd
 
  第二,添加如下内容:
<bean id="propertyConfigurer"
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="/WEB-INF/jdbc.properties" />
 </bean>
 
 <bean id="dataSource"
  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName"
   value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
 </bean>
 
 <!-- JNDI DataSource for J2EE environments -->
 <!--
  <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/petclinic"/>
  </bean>
 -->
 
 <!-- Hibernate SessionFactory -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mappingResources">
   <value>hibernate-mapping.hbm.xml</value>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     ${hibernate.dialect}
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.generate_statistics">true</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
  <property name="eventListeners">
   <map>
    <entry key="merge">
     <bean
      class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
    </entry>
   </map>
  </property>
 </bean>
 
 <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 
  以上配置复制自spring自带的例子petclinic的配置文件
 
4.配置hibernate-mapping.hbm.xml
 
  在hibernate-mapping.hbm.xml配置hibernate的映射关系
 
 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true" default-lazy="false">
 
 <class name="User" table="TEST_USER">
  <id name="id" column="ID_">
   <generator class="native" />
  </id>
  <property name="name" column="NAME_" />
 </class>
</hibernate-mapping>
 
5.整合struts
 
  (1)为了在Struts中加载Spring Context,在 struts-config.xml中增加如下部分:
 
<struts-config>
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
   <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
  </plug-in>
</struts-config>
 
  (2)通过plug-in我们实现了Spring Context的加载,不过仅仅加载 Context并没有什么实际
意义,我们还需要修改配置,将Struts Action交给 Spring容器进行管理,如下:
 
<action path="/login" type="org.springframework.web.struts.DelegatingActionProxy" name="loginForm">
 
  (3)在applicatinContext.xml里添加bean
 
<bean name="/login" class="net.xiaxin.action.LoginAction"
   singleton="false">
   <property name="userDAO">
     <ref bean="userDAOProxy" />
   </property>
  </bean>
 
 
 
 
附录:
1.jdbc.properties
# Properties file with JDBC-related settings.
# Applied by PropertyPlaceholderConfigurer from "applicationContext-*.xml".
# Targeted at system administrators, to avoid touching the context XML files.
 
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
#jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:ROYORA
#jdbc.url=jdbc:mysql://localhost:3306/petclinic
jdbc.username=
jdbc.password=
 
# Property that determines the Hibernate dialect
# (only applied with "applicationContext-hibernate.xml")
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
#hibernate.dialect=org.hibernate.dialect.MySQLDialect
 
# Property that determines the JDBC implementation of Clinic
# (only applied with "applicationContext-jdbc.xml")
#petclinic.jdbcImplBeanName=hsqlClinic
#petclinic.jdbcImplBeanName=mysqlClinic
 
# Note that OJB expects the database platform to be set in
# "OJB-repository.xml" (jdbc-connection-descriptor platform).
 
2.log4j.properties
 
# Set root logger level to DEBUG and its only appender to CONSOLE.
log4j.rootLogger=DEBUG, CONSOLE
 
# CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%t] %-5p %C{1} : %m%n
 
# LIMIT CATEGORIES
log4j.logger.org.jbpm=DEBUG
#log4j.logger.org.jbpm.graph=DEBUG
 
# Hibernate debugging levels and their output
log4j.logger.org.hibernate=INFO
#Log all SQL DML statements as they are executed
#log4j.logger.org.hibernate.SQL=DEBUG
#Log all JDBC parameters
#log4j.logger.org.hibernate.type=DEBUG
#Log all SQL DDL statements as they are executed
#log4j.logger.org.hibernate.tool.hbm2ddl=DEBUG 
#Log the state of all entities (max 20 entities) associated with the session at flush time
#log4j.logger.org.hibernate.pretty=DEBUG 
#Log all second-level cache activity
#log4j.logger.org.hibernate.cache=DEBUG 
#Log transaction related activity
#log4j.logger.org.hibernate.transaction=DEBUG 
#Log all JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=TRACE 
#Log HQL and SQL ASTs and other information about query parsing
#log4j.logger.org.hibernate.hql.ast=DEBUG 
#Log all JAAS authorization requests
#log4j.logger.org.hibernate.secure=DEBUG 
#Log everything (a lot of information, but very useful for troubleshooting)
#log4j.logger.org.hibernate=DEBUG 
#log4j.logger.org.hibernate.tools=DEBUG 
 
log4j.logger.net.sf.ehcache=INFO
 
 
二、创建Web应用程序
 
 
1.配置applicationContext

 <bean id="userService"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="target">
   <ref local="userTarget" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>
 <bean id="userTarget" class="mtn.hqzh.service.spring.UserService">
  <property name="userDAO">
   <ref local="userDAO" />
  </property>
 </bean>
 <bean id="userDAO" class="mtn.hqzh.service.dao.hibernate.UserDAO">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>
 
2.几个类和接口
 
(1) UserDAO类:实现持久层的数据库操作,UserDAO类实现IUserDAO接口,继承HibernateDaoSurpport类;
(2) UserService类:处于业务逻辑层,通过IUserDAO访问数据。UserService类实现IUserService接口,在UserService类中定义IUserDAO属性;
(3) 在Web应用中,通过Spring获得userService代理类,然后进行数据的操作
 
a.IUserDAO接口
 
public interface IUserDAO {
 
 public abstract User getUserById(final long id);
 public abstract void saveUser(final User user);
 public abstract List getUsers();
 
}
 
b.IUserService 接口
 
public interface IUserService {
 public abstract void saveUser(User user);
 
 public abstract List getUsers();
 
 public abstract User findUserById(long id);
 
 
 public abstract IUserDAO getUserDAO();
 
 public abstract void setUserDAO(IUserDAO userDAO);
 
}
c.UserDAO类
public class UserDAO extends HibernateDaoSupport implements IUserDAO {
 
 public UserDAO() {
  super();
 }
 
 public User getUserById(long id) {
  return (User) this.getHibernateTemplate().get(User.class, id);
 }
 
 public void save(User user) {
  this.getHibernateTemplate().save(user);
 }
 
 public void saveUser(User user) {
  this.getHibernateTemplate().save(user);
 }
 
 public List getUsers() {
  return this.getHibernateTemplate().find("from User u order by u.id");
 }
 
}
 
d.UserService类
 
public class UserService implements IUserService {
 
 private IUserDAO userDAO;
 
 public UserService() {
  super();
 }
 
 public User findUserById(long id) {
  return userDAO.getUserById(id);
 }
 
 public IUserDAO getUserDAO() {
  return this.userDAO;
 }
 
 public List getUsers() {
  return userDAO.getUsers();
 }
 
 public void saveUser(User user) {
  userDAO.saveUser(user);
 }
 
 public void setUserDAO(IUserDAO userDAO) {
  this.userDAO = userDAO;
 
 }
 
}
 
3.与Struts集成
创建BaseAction,代码如下:
public abstract class BaseAction extends DispatchAction {
 
 private IUserService userService;
 
 public void setServlet(ActionServlet actionServlet) {
  super.setServlet(actionServlet);
  ServletContext servletContext = actionServlet.getServletContext();
  WebApplicationContext wac =
   WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
  this.userService = (IUserService) wac.getBean("userService");
 }
 
 public IUserService getUserService() {
  return userService;
 }
 

}
Struts中的Action继承这个BaseAction,代码如下:
public class UserAction extends BaseAction {
  public ActionForward list(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  UserForm theForm = (UserForm) form;
  theForm.setUsers(this.getUserService().getUsers());
  return mapping.findForward("index");
 }
 
}
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值