Myeclipse工具下Spring+Hibernate+Struts框架搭建

1.导入Struts包 

2.导入Spring包.

      选择Spring1.2 Core Libraries;

             Spring1.2 AOP Libraries;

             Spring1.2 ORM/DAO/Hibernate3 Libraries;

    其它为可选包.

3.导入Hibernate3.0包

    hibernate.cfg.xml中配置数据源,建议设定<property name="show_sql">true</property>以跟踪数据交互中的SQL语句.全文如下:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
 <property name="connection.username">gl114</property>
 <property name="connection.url">jdbc:oracle:thin:@132.159.173.154:1521:ora10g</property>
 <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
 <property name="connection.password">gl114</property>
 <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
 <property name="show_sql">true</property>
 <property name="myeclipse.connection.profile">ORACLE10G</property>

<! -----以下是映射文件,Myeclipse Database Explorer工具可以选定数据表自动生成此文件以及框架中至关重要的POJO和DAO类 -------->

 <mapping resource="com/ideal/framework/dao/RoleSource.hbm.xml"></mapping>
 <mapping resource="com/ideal/framework/dao/Source.hbm.xml"></mapping>
 <mapping resource="com/ideal/framework/dao/Role.hbm.xml"></mapping>
 <mapping resource="com/ideal/framework/dao/RoleUser.hbm.xml"></mapping>
 <mapping resource="com/ideal/framework/dao/RoadName.hbm.xml" />

</session-factory>

</hibernate-configuration>

4.在Spring的applicationContext.xml中配置Hibernate sessionFactory及事务处理,全文如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    

<!-----配置HibernateSessionFactory------->


 <bean id="HibernateSessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation">
   <value>/hibernate.cfg.xml</value>
  </property>
 </bean>
 
 <!--  Session end   -->

<!-----配置事务处理------->

 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="HibernateSessionFactory" />
  </property>
 </bean>
 <bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="remove*">PROPAGATION_REQUIRED</prop>
    <prop key="add*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
 </bean>

 <!--  Transaction end   -->


 <!----在Service中注入DAO实例---->


 <bean id="RoadNameService" parent="txProxyTemplate">
  <property name="target">
   <bean class="com.ideal.framework.service.RoadNameService">

     <!-----此name需与RoadNameService中的属性名大小写一致,且Service中必须要定义有它相应的getter和setter方法.此处亦可定义多个属性----->
    <property name="roadNameDAO">

     <!-----此bean需与DAO部分中定义的 <bean id="RoadNameDAO" >一致----->
     <ref bean="RoadNameDAO" />
    </property>
   </bean>
  </property>
 </bean>
 
 
 <!--  Service end   -->

<!----DAO部分在生成映射文件及DAO和POJO的时候会自动更新到此文件-------->


 <bean id="RoleSourceDAO" class="com.ideal.framework.dao.RoleSourceDAO">
  <property name="sessionFactory">
   <ref bean="HibernateSessionFactory" />
  </property>
 </bean>
 <bean id="SourceDAO" class="com.ideal.framework.dao.SourceDAO">
  <property name="sessionFactory">
   <ref bean="HibernateSessionFactory" />
  </property>
 </bean>
 <bean id="RoleDAO" class="com.ideal.framework.dao.RoleDAO">
  <property name="sessionFactory">
   <ref bean="HibernateSessionFactory" />
  </property>
 </bean>
 <bean id="RoleUserDAO" class="com.ideal.framework.dao.RoleUserDAO">
  <property name="sessionFactory">
   <ref bean="HibernateSessionFactory" />
  </property>
 </bean>
 <bean id="RoadNameDAO" class="com.ideal.framework.dao.RoadNameDAO">
  <property name="sessionFactory">
   <ref bean="HibernateSessionFactory" />
  </property>
 </bean>

<!------DAO end-------->
</beans>


5.log4j.properties文件用来记载服务启动日志.如下:

#set the level of the root logger
log4j.rootLogger = INFO,CONSOLE,DAYFILE

#################### Console Appender ###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,} %m%n

#################### File Appender ###################
log4j.appender.DAYFILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DAYFILE.file=log4j.log
log4j.appender.DAYFILE.datePattern = '.'yyyy-MM-dd
log4j.appender.DAYFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.DAYFILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,} %m%n


6.设计框架类BaseAction.java继承Struts中的DispatchAction

package com.ideal.framework.design;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.actions.DispatchAction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class BaseAction extends DispatchAction {

//  加载日志跟踪文件
 public final Log log = LogFactory.getLog(getClass());

 private static ApplicationContext ctx = null;

//  定义getBean(String name)方法用以从spring beanfactory中查找对应的bean.

 public Object getBean(String name) {
  if (ctx == null) {
   initSpringConfig();
  }
  return ctx.getBean(name);
 }

//  初始化applicationContext.xml得到beanfactory

 public void initSpringConfig() {

  try {
   if (ctx == null) {
    String[] ctxs = new String[] { "applicationContext.xml" };

    ctx = new ClassPathXmlApplicationContext(ctxs);
    log.debug(" |Load Spring Config succeed.");

   }
  } catch (Exception e) {
   log.debug(" |Load Spring Config Fail.");
   e.printStackTrace();
   System.exit(0);
  }
 }

 /**
  * Convenience method to initialize messages in a subclass.
  *
  * @param request
  *            the current request
  * @return the populated (or empty) messages
  */
 public ActionMessages getMessages(HttpServletRequest request) {
  ActionMessages messages = null;
  HttpSession session = request.getSession();

  if (request.getAttribute(Globals.MESSAGE_KEY) != null) {
   messages = (ActionMessages) request
     .getAttribute(Globals.MESSAGE_KEY);
   saveMessages(request, messages);
  } else if (session.getAttribute(Globals.MESSAGE_KEY) != null) {
   messages = (ActionMessages) session
     .getAttribute(Globals.MESSAGE_KEY);
   saveMessages(request, messages);
   session.removeAttribute(Globals.MESSAGE_KEY);
  } else {
   messages = new ActionMessages();
  }

  return messages;
 }
}

7.定义BaseService.java中跟踪日志的代码

package com.ideal.framework.design;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class BaseService {
 private final Log log = LogFactory.getLog(getClass());
}

8.DAO类中会自动生成对表操作的基本方法,设计人员也可自行添加业务所需要的方法.

package com.ideal.framework.dao;
// default package

import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.hibernate.criterion.Example;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 * Data access object (DAO) for domain model class Role.
 * @see .Role
 * @author MyEclipse - Hibernate Tools
 */
public class RoleDAO extends HibernateDaoSupport {

    private static final Log log = LogFactory.getLog(RoleDAO.class);

 protected void initDao() {
  //do nothing
 }
   
    public void save(Role transientInstance) {
        log.debug("saving Role instance");
        try {
            getHibernateTemplate().saveOrUpdate(transientInstance);
            log.debug("save successful");
        } catch (RuntimeException re) {
            log.error("save failed", re);
            throw re;
        }
    }
   
 public void delete(Role persistentInstance) {
        log.debug("deleting Role instance");
        try {
            getHibernateTemplate().delete(persistentInstance);
            log.debug("delete successful");
        } catch (RuntimeException re) {
            log.error("delete failed", re);
            throw re;
        }
    }
   
    public Role findById( RoleId id) {
        log.debug("getting Role instance with id: " + id);
        try {
            Role instance = (Role) getHibernateTemplate()
                    .get("Role", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }
   
   
    public List findByExample(Role instance) {
        log.debug("finding Role instance by example");
        try {
            List results = getSession()
                    .createCriteria("Role")
                    .add(Example.create(instance))
            .list();
            log.debug("find by example successful, result size: " + results.size());
            return results;
        } catch (RuntimeException re) {
            log.error("find by example failed", re);
            throw re;
        }
    }   
   
    public Role merge(Role detachedInstance) {
        log.debug("merging Role instance");
        try {
            Role result = (Role) getHibernateTemplate()
                    .merge(detachedInstance);
            log.debug("merge successful");
            return result;
        } catch (RuntimeException re) {
            log.error("merge failed", re);
            throw re;
        }
    }

    public void attachDirty(Role instance) {
        log.debug("attaching dirty Role instance");
        try {
            getHibernateTemplate().saveOrUpdate(instance);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }
   
    public void attachClean(Role instance) {
        log.debug("attaching clean Role instance");
        try {
            getHibernateTemplate().lock(instance, LockMode.NONE);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }

 public static RoleDAO getFromApplicationContext(ApplicationContext ctx) {
     return (RoleDAO) ctx.getBean("RoleDAO");
 }
}

9.每个业务模块对应最基本的四层,即DAO(继承HibernateDaoSupport类)-->Service(继承BaseService)-->Action(继承BaseAction)-->JSP

    DAO:组装SQL.,访问数据库.HibernateDaoSupport中定义了getHibernateTemplate()方法.

    Service:拥有DAO实例.处理业务逻辑

    Action:调用Service对象,根据处理结果定义用户响应页面的跳转.同时也可包含少量的业务逻辑.

   JSP:与用户信息交互的窗口

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值