JavaScud | Forum | JIRA | Blog |
  Dashboard > SpringSide > Home > CRUDTutorials
  SpringSide Log In View a printable version of the current page.  
  CRUDTutorials
Added by calvin, last edited by calvin on Oct 13, 2006  (view change)
Labels: 
(None)

Spring+Struts+Hibernate CRUD开发

1. Domain 设计

 1. 设计并建立数据库。

 2. 生成entity class 和hibernate hbm映射文件。 

     可以使用springside带的hibernate tools ,从数据库生成hbm 和 pojo文件。

     也可以手工编写,或者使用自己喜欢的工具如MyEclipse自动生成。

 3. 为hibernate绑定hbm文件。

    在Spring的dataAccessContext.xml 文件的<sessionFactory>节点,加入location属性指向hbm的目录。

<property name="mappingDirectoryLocations">
     <list>
        <value>classpath*:/org/springside/helloworld/model/hbm/</value>
    </list>
</property>

2.  业务层设计  

      建议项目开始时DAO与Manager可以合一,且不需要Interface。   

  2.1 编写Manager类   

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

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

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

 2.2 在Spring Context 中定义Manager类

   1.Manager定义:

     建议context文件命名为 serviceContext-module_name.xml,在Spring 2.0的事务配置下,Manager只需直接定义:

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

   2. 事务配置:

   见dataAccessContext.xml 中的配置,SpringSide 已经默认统一配置了org.springside..*Manager 的CRUD操作事务,如果有特殊业务函数名,(to document).

3. Controller 层设计

    Controller层请先阅读 Pragmatic Struts ,避免就是Struts 用法的烦琐。

3.1 Controller 编写 

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

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

 public class UserAction extends StrutsEntityAction<User> {
    private UserManager userManager;    public void setUserManager(UserManager userManager) {
        this.userManager = userManager;
    }    @Override
    protected UserManager getManager() {
        return userManager;
    }
}

   UserAction 需要声明管理类型为User,实现IEntityDao(T) getManager() 函数,并实现setter函数让Spring注入userManager。

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

3.2 定义定义再定义

1. FormBean定义

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

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

2. Action 定义

  在struts-config.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>

   在action-servlet.xml中定义如下:

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

3.Form Validator 定义

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

4. JSP 页面

   JSP强烈推荐使用2.0。只要充分使用JSP2.0的EL,直接在html中写$

Unknown macro: {book}

而不是<c:out value="$

">将获得简洁无比,可以比美velocity,freemarker的界面。

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

Site running on a free Atlassian Confluence Open Source Project License granted to WebWork China. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.3 Build:#808 May 29, 2007) - Bug/feature request - Contact Administrators