鷹翔宇空

          學(xué)習(xí)和生活

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          原文引自:http://www.3doing.net/forums/dispbbs.asp?boardID=57&ID=226&page=2

          一個簡單對象的CRUD操作的Demo,對用戶對象的增刪查改操作。

          僅僅演示系統(tǒng)架構(gòu)的組成,從單純的需求實現(xiàn)角度來看,這個Demo非但沒有減少代碼,反而非常復(fù)雜,然而作為了解系統(tǒng)架構(gòu)的角度來說,這個Demo卻是一個完整的架構(gòu)例子,是一個簡單的入手點(diǎn)。

          一、系統(tǒng)架構(gòu):

          Hibernate/Spring/Webwork2/FreeMarker

          使用Hibernate作為持久層框架,Spring封裝DAO,作為業(yè)務(wù)層組件,Webwork2作為Web層的MVC框架,F(xiàn)reeMarker作為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實現(xiàn)類
          com.javaeye.util.ServletFilter: 設(shè)定HTML Form提交的字符集,解決Form提交的亂碼問題
          com.javaeye.action.*: webwork的相關(guān)action

          applicationContext.xml: SpringFramework的bean配置文件
          jdbc.properties: 數(shù)據(jù)庫連接配置文件
          xwork.xml: Webwork的Action bean配置文件
          webwork.properties: webwork配置文件
          freemarker.properties: freemarker配置文件
          log4j.properties: log4j配置文件

          四、運(yùn)行

          將simple目錄作為web application發(fā)布到相應(yīng)的Application Server上即可,已經(jīng)內(nèi)置HSQLDB,無需另外的數(shù)據(jù)庫支持。

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

          webwork沒用過,如果用struts的話,extends DispatchActionSupport更好,一個action class解決問題。由于我做的是對簡單的表的CRUD操作,所以沒用到CRUD中的R,直接從list方法得數(shù)據(jù),當(dāng)也沒那么多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:

          我想了一下,明白了當(dāng)你使用Struts的時候,為什么傾向于合并了。因為Struts的Action是所有線程一個單一實例的,Action的方法需要的數(shù)據(jù)都通過方法參數(shù)(request, response, actionForm)傳遞給方法的內(nèi)部,因此所有的邏輯都局限在方法的內(nèi)部,在這種情況下,拆開成為多個Action,每個Action一個方法,和你現(xiàn)在這種單個Action,包含多個方法,實質(zhì)上是沒有差別的,邏輯上不會增加任何復(fù)雜度,并且配置文件的長度,Action的數(shù)量都可以大幅度減少,所以傾向于合并。

          而Webwork的Action是每線程一個實例,Action方法需要的數(shù)據(jù)和組件都是通過getter/setter方式由容器注入,此時合并Action,就會比較混亂,不如拆開邏輯清楚。

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

          我覺得如果表比較多的情況下,可以考慮對于一個表操作的邏輯都合并到一個Action,表比較少的話還是robbin這樣的寫法比較清晰。

          PS. robbin什么時候?qū)憘€含一對一,一對多,多對多的例子。呵呵,是不是我要求太高了 ==================================================

          這個例子是我講課的時候,現(xiàn)場做出來的,所以比較簡單,很多情況都沒有考慮,以后會逐漸補(bǔ)充更加復(fù)雜的例子。

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

          希望能增加分頁顯示的部份,一直搞不清楚 是要在userManager里寫 findUsers(int from, int to) 嗎?=================================

          分頁的方法很多,最好是在DAO中,減少內(nèi)存占用量
          借用一下別人的例子:
          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);
          //設(shè)置游標(biāo)的起始點(diǎn)
          query.setFirstResult(position);
          //設(shè)置游標(biāo)的長度
          query.setMaxResults(length);
          //記錄生成
          List list = query.list();
          //把查詢到的結(jié)果放入迭代器
          iterator = list.iterator();
          return iterator;
          }

          posted on 2006-05-30 15:33 TrampEagle 閱讀(1209) 評論(1)  編輯  收藏 所屬分類: 技術(shù)文摘

          Feedback

          # re: 使用Hibernate/Spring/Webwork架構(gòu)對單個對象的CRUD操作的Demo 2014-07-04 17:01 二二
          2  回復(fù)  更多評論
            

          主站蜘蛛池模板: 常宁市| 新巴尔虎左旗| 浑源县| 五峰| 襄垣县| 盐山县| 益阳市| 抚顺市| 安仁县| 南部县| 慈溪市| 苍南县| 龙江县| 许昌市| 什邡市| 隆回县| 旌德县| 宁化县| 鹿泉市| 海晏县| 迭部县| 双流县| 枞阳县| 屏东县| 同仁县| 汤阴县| 应用必备| 桃园县| 福贡县| 海南省| 武安市| 大足县| 昌图县| 县级市| 西乌珠穆沁旗| 延边| 贡山| 西青区| 土默特左旗| 西林县| 罗甸县|