鹰翔宇空

学习和生活

BlogJava 首页 新随笔 联系 聚合 管理
  110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
原文引自:http://www.3doing.net/forums/dispbbs.asp?boardID=57&ID=226&page=2

一个简单对象的CRUD操作的Demo,对用户对象的增删查改操作。

仅仅演示系统架构的组成,从单纯的需求实现角度来看,这个Demo非但没有减少代码,反而非常复杂,然而作为了解系统架构的角度来说,这个Demo却是一个完整的架构例子,是一个简单的入手点。

一、系统架构:

Hibernate/Spring/Webwork2/FreeMarker

使用Hibernate作为持久层框架,Spring封装DAO,作为业务层组件,Webwork2作为Web层的MVC框架,FreeMarker作为View,取代JSP。

二、项目目录:

这是一个Eclipse Project的目录,可以直接import到Eclipse里面。

src:源代码和配置文件目录

lib:一些web application不需要的库和框架源代码

simple: web application

(缺test case)

三、文件:

com.javaeye.User: 实体类,表示用户实体
com.javaeye.UserManager: 用户实体的DAO接口
com.javaeye.impl.UserManagerHibernateImpl: 用户实体的DAO接口的Hibernate实现类
com.javaeye.util.ServletFilter: 设定HTML Form提交的字符集,解决Form提交的乱码问题
com.javaeye.action.*: webwork的相关action

applicationContext.xml: SpringFramework的bean配置文件
jdbc.properties: 数据库连接配置文件
xwork.xml: Webwork的Action bean配置文件
webwork.properties: webwork配置文件
freemarker.properties: freemarker配置文件
log4j.properties: log4j配置文件

四、运行

将simple目录作为web application发布到相应的Application Server上即可,已经内置HSQLDB,无需另外的数据库支持。

================================================================

webwork没用过,如果用struts的话,extends DispatchActionSupport更好,一个action class解决问题。由于我做的是对简单的表的CRUD操作,所以没用到CRUD中的R,直接从list方法得数据,当也没那么多jsp页面,采用单页面CRUD,这样一个action class+一个jsp+及pojo和manager之类的东西写起来很简单、方便。


java代码:



package com.terac.tm.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;

import com.terac.tm.dao.LinkDAO;
import com.terac.tm.model.Link;

/**
* @author andy
*/
public class LinkAction extends AuthorizedDispatchAction {

    public ActionForward delete(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {        
        ...
    }
    public ActionForward list(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {        
        ...
    }
    public ActionForward save(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {        
        ...
    }
==========================================
To andy163:

我想了一下,明白了当你使用Struts的时候,为什么倾向于合并了。因为Struts的Action是所有线程一个单一实例的,Action的方法需要的数据都通过方法参数(request, response, actionForm)传递给方法的内部,因此所有的逻辑都局限在方法的内部,在这种情况下,拆开成为多个Action,每个Action一个方法,和你现在这种单个Action,包含多个方法,实质上是没有差别的,逻辑上不会增加任何复杂度,并且配置文件的长度,Action的数量都可以大幅度减少,所以倾向于合并。

而Webwork的Action是每线程一个实例,Action方法需要的数据和组件都是通过getter/setter方式由容器注入,此时合并Action,就会比较混乱,不如拆开逻辑清楚。

==================================================================

我觉得如果表比较多的情况下,可以考虑对于一个表操作的逻辑都合并到一个Action,表比较少的话还是robbin这样的写法比较清晰。

PS. robbin什么时候写个含一对一,一对多,多对多的例子。呵呵,是不是我要求太高了 ==================================================

这个例子是我讲课的时候,现场做出来的,所以比较简单,很多情况都没有考虑,以后会逐渐补充更加复杂的例子。

====================================================

希望能增加分页显示的部份,一直搞不清楚 是要在userManager里写 findUsers(int from, int to) 吗?=================================

分页的方法很多,最好是在DAO中,减少内存占用量
借用一下别人的例子:
public Iterator getInfos(int position, int length) throws Exception {
Iterator iterator = null;
String queryString = " select info from Info as info order by info.id desc";
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}

posted on 2006-05-30 15:33 TrampEagle 阅读(1200) 评论(1)  编辑  收藏 所属分类: 技术文摘

Feedback

# re: 使用Hibernate/Spring/Webwork架构对单个对象的CRUD操作的Demo 2014-07-04 17:01 二二
2  回复  更多评论
  


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


网站导航: