本文是开发基于spring的web应用的入门文章,前端采用Struts MVC框架,中间层采用spring,后台采用Hibernate。

   本文包含以下内容:

    ·配置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和Spring

   4. 建立Hibernate DAO接口的实现类

   5. 运行测试类,测试DAO的CRUD操作

   6. 创建一个处理类,声明事务

   7. 创建web层的Action和model

   8. 运行Action的测试类测试CRUD操作

   9. 创建jsp文件通过浏览器进行CRUD操作

   10. 通过浏览器校验jsp

  安装eclipse插件

   1. Hibernate插件http://www.binamics.com/hibernatesync

   2. Spring插件http://springframework.sourceforge.net/spring-ide/eclipse/updatesite/

   3. MyEclipse插件(破解版)

   4. Tomcat插件. tanghan

   5. 其他插件包括xml,jsp,

   数据库建表

[code:1] create table app_user(id number not null primary,firstname vchar(32),lastname vchar(32)); [/code:1]   新建项目    新建一个web project,新建后的目录结构同时包含了新建文件夹page用于放jsp文件,和源文件夹test用于放junit测试文件。同时将用到的包,包括struts,hibernate,spring都导入到lib目录下。    创建持久层O/R mapping    1. 在src/com.jandar.model下用hibernate插件从数据库导出app_user的.hbm.xml文件改名为User.hbm.xml [code:1] <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC    "-//Hibernate/Hibernate Mapping DTD//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping package="com.jandar.model"> <class name="User" table="APP_USER">   <id    column="ID"    name="id"    type="integer"   >    <generator class="assigned" />   </id>   <property     column="LASTNAME"     length="10"     name="lastname"     not-null="false"     type="string"   />   <property     column="FIRSTNAME"     length="10"     name="firstname"     not-null="true"     type="string"   /> </class> </hibernate-mapping> [/code:1]    2. 通过hibernate synchronizer->synchronizer file生成User.java文件,User对象对应于数据库中的app_user表    注:在eclipse下自动生成的对象文件不完全相同,相同的是每个对象文件必须实现Serializable接口,必需又toString和hashCode方法; [code:1] import java.io.Serializable; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.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);   } } [/code:1] [code:1] 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;   } } [/code:1] 创建DAO访问对象    1. 在src/com.jandar.service.dao新建IDAO.java接口,所有的DAO都继承该接口 [code:1] package com.jandar.services.dao; public interface IDAO { } [/code:1]    2. 在src/com.jandar.service.dao下新建IUserDAO.java接口 [code:1] public interface IUserDAO extends DAO {   List getUsers();   User getUser(Integer userid);   void saveUser(User user);   void removeUser(Integer id); } [/code:1]    该接口提供了访问对象的方法,    3. 在src/com.jandar.service.dao.hibernate下新建UserDAOHiberante.java [code:1] import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.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);    }   } } [/code:1][/code]
评论
发表评论

您还没有登录,请登录后发表评论

lingcm
搜索本博客
最近加入圈子
存档
最新评论
评论排行榜