Dashboard > SpringSide Wiki > ... > Quickstart > CRUD Tutorials
  SpringSide Wiki Log In | Sign Up   View a printable version of the current page.  
  CRUD Tutorials
Added by SpringSideTeam, last edited by Anonymous on 2007-07-12  (view change)
Labels: 

为什么不写得明确一些,很多地方都找不到!

创建你的第一个SpringSide应用(下) --CRUD代码编写

  1. 阅读创建你的第一个SpringSide应用(上)--生成项目,生成新项目。
  2. 阅读Helloworld--第一个示例,了解SpringSide的基本架构。
  3. 阅读IDE开发环境设置,设置IDE。 
  4. 如果生产环境的应用服务器与数据库与springside默认环境不同,请阅读应用服务器与数据库移植

1. Domain 设计

   1.1 从数据库开始设计

     先设计数据库,然后用Hibernate Tools插件生成使用Hibernate Annotation,直接在POJO上注释映射关系的POJO,详见Hibernate Tools

     因为默认假设类名与数据库表名,属性名与数据库列名相同,因此一般只需只以@Entity注释类,以@Id 和 @GeneratedValue在getter上注释id列,表明主键及其生成策略。eg.

@Entity
public class User {
  Integer id;
  String name;

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

  一对多关系配置等请参考Hibernate Annotation指南

 1.2 为hibernate sessionFactory绑定映射Pojo

     在src/resources/spirng/dataAccessContext-hibernate.xml 的<sessionFactory>节点的<annotatedClasses>节点增加pojo:

<property name="annotatedClasses">
   <list>
    <value>org.springside.helloworld.model.User</value>
   </list>
</property>

2.  业务层设计  

      建议项目开始时使用SpringSide的DAO与Manager可以合一,且不需要Interface,详见DAO层总述

  2.1 编写Manager类   

   一般继承于HibernateEntityDAO。基类里已存在默认的CRUD函数,子类只要用泛型语法声明自己管理的Entity类型即可。代码如下:

public class UserManager extends HibernateEntityDao<User> {
    //....CRUD以外的其它商业方法
  }

    如果你的Manager是简单的CRUD类,没有其他的商业方法,那就恭喜了,上面的代码就是全部。

    如果UserManager要操作User外的其他Entity,可以注入另一个Manager,事务方面没有问题,也可以使用继承于HibernateGenericDao的带EntityClass参数的函数直接操作。

    HibernateEntityDao的文档详见SpringSide的Hibernate封装

 2.2 在Spring Context 中定义Manager类

     spring context文件放在/src/resources/spring中,建议每个module一个context文件(项目较小时也可以不分开),命名为 serviceContext-module_name.xml,。

     因为Spring 2.0作了统一事务配置,加上default-autowire后,Manager只需直接定义:

<beans default-autowire="byName" default-lazy-init="true">
     <bean id="userManager" class="org.springside.helloworld.service.UserManager"/>
</beans>

 2.3 编写业务类测试用例

    复制hellworld example的UserManagerTest.java的CRUD测试方法, 作为中途岛测试前半段的工作正确,包括项目、映射关系及业务类的配置。

3. Controller 层设计

    请先阅读 Pragmatic Struts ,避免旧式Struts 用法的繁琐。

3.1 Controller 编写 

   Controller如果继承于SpringSide的StrutsEntityAction,也能默认拥有CRUD,非常节约代码。

   如果不是CRUD的Action,则继承于StrutsAction(在Struts DispatchAction的基础上添加了一些便捷方法,详见其JavaDoc),推荐每个Action响应一组相关的请求,以url参数决定要调用的同名方法。

public class UserAction extends StrutsEntityAction<User,UserManager> {
        private UserManager userManager; 
        public void setUserManager(UserManager userManager) {
        	this.userManager = userManager;
        }
}

   UserAction 首先用泛型声明管理类型为User,Manger类型为UserManager,再声明userManager变量和它的setter函数,就拥有了默认的CRUD管理函数。

   StrutsEntityAction 只是演示了一种封装的方式,大家可以参考来重新继承或封装自己项目习惯的版本。

3.2 配置配置再配置

    建议每个模块定义一个struts文件,在WEB-INF/modules中放置struts-config-modulename.xml,在WEB-INF/web.xml的struts定义节点将其载入。

    对应spring controller配置文件同样放在WEB-INF/modules中,命名为spring-config-modulename.xml,在WEB-INF/action-servlet.xml 中将其载入。

    如果项目较小,两者可直接写在struts-config.xml 和 action-servlet.xml。

1. FormBean定义

    采用LazyValidatorForm,内里是Apache Beanuitls的DynaBean,所以只需一句,不需要写FormBean类,也不用定义具体属性,详见Pragmatic Struts里的描述。

<form-bean name="userForm" type="org.apache.struts.validator.LazyValidatorForm"/>

2. Action 定义

  在struts-config-modulename.xml中定义如下:

<action path="/user" name="userForm" scope="request" parameter="method" validate="false">
            <forward name="list" path="/WEB-INF/pages/userList.jsp"/>
            <forward name="edit" path="/WEB-INF/pages/userForm.jsp"/>
            <forward name="success" path="/user.do?method=list" redirect="true"/>
 </action>

   在spring-config-modulename.xml中定义如下:

<bean name="/user" class="org.springside.helloworld.web.UserAction"/>

其中 bean的 name  与struts action定义中的path 一致。

3.Form Validator 定义

   Commons-Validator 有点烦,但是目前唯一比较通用的,Client/Server两端同时验证的方案,参看Helloworld里的validation.xml 文件,并修改i18n messages文件。

4. JSP 页面

   view强烈推荐使用JSP 2.0。只要充分使用JSP2.0的EL,直接在html中写${book.name}而不是<c:out value="${book.name}"/>

  JSP页面在/webapp/WEB-INF/pages目录下按module存放,参考新项目中的sampleList.jsp 与 sampleForm.jsp

  xxxList.jsp 表格控件可以使用ExtremeTable 或者 DisplayTag。

  xxxForm.jsp 暂时仍然用Struts带的taglib,如果要自行输出formbean的值,可以写${userForm.name}, ${userForm.map.name}。

5. 检验成果

   双击项目的quickstart.bat 进行编译部署。

   最后,还可以为界面编写一个Selenium的功能测试用例

Hibernate Tools (SpringSide Wiki)

Site powered by a free Open Source Project / Non-profit License (more) of Confluence - the Enterprise wiki.
Learn more or evaluate Confluence for your organisation.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.2.9 Build:#527 2006-09-07) - Bug/feature request - Contact Administrators