Eclipse下struts+spring+hibernate快速入门[1].doc_第1页
Eclipse下struts+spring+hibernate快速入门[1].doc_第2页
Eclipse下struts+spring+hibernate快速入门[1].doc_第3页
Eclipse下struts+spring+hibernate快速入门[1].doc_第4页
Eclipse下struts+spring+hibernate快速入门[1].doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

eclipse下struts+spring+hibernate快速入门courage_yhb发表于2005-03-29, 11:14 本文是开发基于spring的web应用的入门文章,前端采用Struts MVC框架,中间层采用spring,后台采用Hibernate。在写作过程中参考了appfuse和springlive项目本文包含以下内容:配置Hibernate和事务装载Spring的applicationContext.xml文件建立业务层和DAO之间的依赖关系将Spring应用到Struts中概览这个例子是建立一个简单的web应用,叫MyUsers,完成用户管理操作,包含简单的数据库增,删,查,该即CRUD(新建,访问,更新,删除)操作。这是一个三层的web应用,通过Action(Struts)访问业务层,业务层访问DAO。图一简要说明了该应用的总体结构。图上的数字说明了流程顺序从web(UserAction)到中间层(UserManager),再到数据访问层(UserDAO),然后将结果返回。Spring层的真正强大在于它的声明型事务处理,帮定和对持久层支持(例如Hiberate和iBATIS)以下下是完成这个例子的步骤:1 安装Eclipse插件2 数据库建表3 配置Hibernate和Spring4 建立Hibernate DAO接口的实现类5 运行测试类,测试DAO的CRUD操作6 创建一个处理类,声明事务7 创建Struts Action的测试类8 创建web层的Action和model9 运行Action的测试类测试CRUD操作10 创建jsp文件通过浏览器进行CRUD操作11 通过浏览器校验jsp安装eclipse插件1 Hibernate插件/hibernatesync2 Spring插件/spring-ide/eclipse/updatesite/3 MyEclipse插件(破解版)4 Tomcat插件. tanghan5 其他插件包括xml,jsp,数据库建表Create table app_user ( id number(5) not null,primate key lastname vchar2(20),firstname vchar2(20);新建项目新建一个web project,新建后的目录结构如上图所示,同时包含了新建文件夹page用于放jsp文件,和源文件夹test用于放junit测试文件。同时将用到的包,包括struts,hibernate,spring都导入到lib目录下。创建持久层O/R mapping1 在src/com.jandar.model下用hibernate插件从数据库导出app_user的.hbm.xml文件改名为User.hbm.xml2 通过hibernate synchronizer-synchronizer file生成User.java文件,User对象对应于数据库中的app_user表注:在eclipse下自动生成的对象文件不完全相同,相同的是每个对象文件必须实现Serializable接口,必需又toString和hashCode方法;import java.io.Serializable;import mons.lang.builder.EqualsBuilder;import mons.lang.builder.HashCodeBuilder;import mons.lang.builder.ToStringBuilder;import mons.lang.builder.ToStringStyle;public class BaseObject implements Serializable public String toString() return ToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);public boolean equals(Object o) return EqualsBuilder.reflectionEquals(this, o);public int hashCode() return HashCodeBuilder.reflectionHashCode(this);public class User extends BaseObject private Long id;private String firstName;private String lastName;/* return Returns the id.*/public Long getId() return id;/* param id The id to set.*/public void setId(Long id) this.id = id;/* return Returns the firstName.*/public String getFirstName() return firstName;/* param firstName The firstName to set.*/public void setFirstName(String firstName) this.firstName = firstName;/* return Returns the lastName.*/public String getLastName() return lastName;/* param lastName The lastName to set.*/public void setLastName(String lastName) this.lastName = lastName;创建DAO,访问对象1 在src/com.jandar.service.dao新建IDAO.java接口,所有的DAO都继承该接口package com.jandar.services.dao;public interface IDAO 2 在src/com.jandar.service.dao下新建IUserDAO.java接口 public interface IUserDAO extends DAO List getUsers();User getUser(Integer userid);void saveUser(User user);void removeUser(Integer id); 该接口提供了访问对象的方法,3 在src/com.jandar.service.dao.hibernate下新建UserDAOHiberante.javaimport java.util.List;import mons.logging.Log;import mons.logging.LogFactory;import org.springframework.orm.hibernate.support.HibernateDaoSupport;import com.jandar.model.User;import com.jandar.service.dao.IUserDAO;public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO private Log log=LogFactory.getLog(UserDaoHibernate.class);/* (非 Javadoc)* see com.jandar.dao.IUserDAO#getUsers()*/public List getUsers() return getHibernateTemplate().find(from User); /* (非 Javadoc)* see com.jandar.dao.IUserDAO#getUser(java.lang.Long)*/public User getUser(Integer id) / TODO 自动生成方法存根return (User) getHibernateTemplate().get(User.class,id);/* (非 Javadoc)* see com.jandar.dao.IUserDAO#saveUser(com.jandar.model.User)*/public void saveUser(User user) log.debug(xxxxxxx);System.out.println(yyyy);getHibernateTemplate().saveOrUpdate(user);if(log.isDebugEnabled()log.debug(userId set to +user.getId();/* (非 Javadoc)* see com.jandar.dao.IUserDAO#removeUser(java.lang.Long)*/public void removeUser(Integer id) Object user=getHibernateTemplate().load(User.class,id);getHibernateTemplate().delete(user);if(log.isDebugEnabled()log.debug(del user +id);在这个类中实现了IUserDAO接口的方法,并且继承了HibernateDAOSupport类。这个类的作用是通过hibernate访问、操作对象,进而实现对数据库的操作。创建业务层,声明事务业务层主要处理业务逻辑,提供给web层友好的访问接口和实现访问DAO层。用业务层的另一个好处是,可以适应数据访问层从Hibernate技术转移到其他数据访问技术。1 在src/com.jandar.service下新建一个IUserManager接口,该接口有几乎于IUserDAO同样的方法,不同的是处理参数,应为IUserManager是供web层访问的。public interface IUserManager User getUser(String userid); List getUsers();User saveUser(User user);void removeUser(String userid);2 在src/com.jandar.service.spring下新建IuserManager实现类,UserManager.java/* 创建日期 2005-3-4* TODO 要更改此生成的文件的模板,请转至* 窗口 首选项 Java 代码样式 代码模板*/package com.jandar.service.spring;import java.util.List;import mons.logging.Log;import mons.logging.LogFactory;import com.jandar.model.User;import com.jandar.service.IUserManager;import com.jandar.service.dao.IUserDAO;/* author Administrator* TODO 要更改此生成的类型注释的模板,请转至* 窗口 首选项 Java 代码样式 代码模板*/public class UserManager implements IUserManager /* (非 Javadoc)* see com.jandar.service.IUserManager#getUser(java.lang.String)*/private static Log log=LogFactory.getLog(UserManager.class);public IUserDAO userDao;/* return 返回 userDao。*/public IUserDAO getUserDao() return userDao;/* param userDao 要设置的 userDao。*/public void setUserDao(IUserDAO userDao) this.userDao = userDao;public User getUser(String userid) User user=userDao.getUser(Integer.valueOf(userid);if(user=null)log.warn( user id +userid+ not found in database);if(log.isDebugEnabled()log.debug(get a user with id +userid);return user;/* (非 Javadoc)* see com.jandar.service.IUserManager#getUsers()*/public List getUsers() / TODO 自动生成方法存根return userDao.getUsers();/* (非 Javadoc)* see com.jandar.service.IUserManager#saveUser(com.jandar.model.User)*/public User saveUser(User user) / TODO 自动生成方法存根userDao.saveUser(user);return user;/* (非 Javadoc)* see com.jandar.service.IUserManager#removeUser(java.lang.String)*/public void removeUser(String userid) / TODO 自动生成方法存根userDao.removeUser(Integer.valueOf(userid);UserManager.java通过访问dao接口实现业务逻辑和数据库操作。同时该类中提供了set方法,运用了Spring的依赖注入机制。但尚未使用spring的AOP和声明事务。配置applicationContext.xml在WEB-INF 下新建applicationContext.xmlorg.hsqldb.jdbcDriverjdbc:hsqldb:db/appfusesa!- Make sure tags are on same line - if theyre not, authentication will fail -com/jandar/model/User.hbm.xmlnet.sf.hibernate.dialect.HSQLDialectcreate PROPAGATION_REQUIREDPROPAGATION_REQUIREDPROPAGATION_REQUIRED,readOnly创建Web层1 创建Struts Action,为了在一个action中实现CRUD操作,Action继承了DispatchAction根据参数决定调用方法。在src/com.jandar.web.struts.action下创建UserAction.javaimport javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import mons.logging.Log;import mons.logging.LogFactory;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.ActionMessage;import org.apache.struts.action.ActionMessages;import org.apache.struts.action.DynaActionForm;import org.apache.struts.actions.DispatchAction;import org.appfuse.model.User;import org.appfuse.service.IUserManager;public class UserAction extends DispatchAction private static Log log = LogFactory.getLog(UserAction.class);private IUserManager mgr = null;public void setUserManager(IUserManager userManager) this.mgr = userManager;public ActionForward delete(ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception if (log.isDebugEnabled() log.debug(entering delete method.);mgr.removeUser(request.getParameter(user.id);ActionMessages messages = new ActionMessages();messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(user.deleted);saveMessages(request, messages);return list(mapping, form, request, response);public ActionForward edit(ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception if (log.isDebugEnabled() log.debug(entering edit method.);DynaActionForm userForm = (DynaActionForm) form;String userId = request.getParameter(id);/ null userId indicates an addif (userId != null) User user = mgr.getUser(userId);if (user = null) ActionMessages errors = new ActionMessages();errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(user.missing);saveErrors(request, errors);return mapping.findForward(list);userForm.set(user, user);return mapping.findForward(edit);public ActionForward list(ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception if (log.isDebugEnabled() log.debug(entering list method.);request.setAttribute(users, mgr.getUsers();return mapping.findForward(list);public ActionForward save(ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception if (log.isDebugEnabled() log.debug(entering save method.);/ run validation rules on this formActionMessages errors = f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论