Topquan's Blog

分享价值----成就你我----我的博客----你的家

Struts+Spring+Hibernate组合使用

本文是开发基于 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
  
   数据库 建表
  
   create table app_user(id number not null primary,firstname vchar(32),lastname vchar(32));
  
  新建项目
  
  新建一个 web project ,新建后的目录结构同时包含了新建文件夹 page 用于放 jsp 文件,和源文件夹 test 用于放 junit 测试文件 同时将用到的包,包括 struts hibernate spring 都导入到 lib 目录下
  
  创建持久层 O/R mapping/ 小新技术网 www.xker.com
  
   1 src/com.jandar.model 下用 hibernate 插件从 数据库 导出 app_user .hbm.xml 文件改名为 User.hbm.xml
  
  < ?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
  
   2 通过 hibernate synchronizer- synchronizer file 生成 User.java 文件 ,User 对象对应于 数据库 中的 app_user

注:在 eclipse 下自动生成的对象文件不完全相同,相同的是每个对象文件必须实现 Serializable 接口,必需又 toString hashCode 方法;
  
   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);
   }
   }
  
   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.java
  
   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);
   }
   }
   }
  在这个类中实现了 IUserDAO 接口的方法,并且继承了 HibernateDAOSupport 类。这个类的作用是通过 hibernate 访问、操作对象,进而实现对数据库的操作。

posted on 2006-05-08 22:46 topquan 阅读(506) 评论(0)  编辑  收藏 所属分类: Spring


只有注册用户登录后才能发表评论。


网站导航: