<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學(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

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

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

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

    Hibernate/Spring/Webwork2/FreeMarker

    使用Hibernate作為持久層框架,Spring封裝DAO,作為業(yè)務(wù)層組件,Webwork2作為Web層的MVC框架,F(xiàn)reeMarker作為View,取代JSP。

    二、項(xiàng)目目錄:

    這是一個(gè)Eclipse Project的目錄,可以直接import到Eclipse里面。

    src:源代碼和配置文件目錄

    lib:一些web application不需要的庫和框架源代碼

    simple: web application

    (缺test case)

    三、文件:

    com.javaeye.User: 實(shí)體類,表示用戶實(shí)體
    com.javaeye.UserManager: 用戶實(shí)體的DAO接口
    com.javaeye.impl.UserManagerHibernateImpl: 用戶實(shí)體的DAO接口的Hibernate實(shí)現(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更好,一個(gè)action class解決問題。由于我做的是對簡單的表的CRUD操作,所以沒用到CRUD中的R,直接從list方法得數(shù)據(jù),當(dāng)也沒那么多jsp頁面,采用單頁面CRUD,這樣一個(gè)action class+一個(gè)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的時(shí)候,為什么傾向于合并了。因?yàn)镾truts的Action是所有線程一個(gè)單一實(shí)例的,Action的方法需要的數(shù)據(jù)都通過方法參數(shù)(request, response, actionForm)傳遞給方法的內(nèi)部,因此所有的邏輯都局限在方法的內(nèi)部,在這種情況下,拆開成為多個(gè)Action,每個(gè)Action一個(gè)方法,和你現(xiàn)在這種單個(gè)Action,包含多個(gè)方法,實(shí)質(zhì)上是沒有差別的,邏輯上不會增加任何復(fù)雜度,并且配置文件的長度,Action的數(shù)量都可以大幅度減少,所以傾向于合并。

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

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

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

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

    這個(gè)例子是我講課的時(shí)候,現(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 閱讀(1204) 評論(1)  編輯  收藏 所屬分類: 技術(shù)文摘

    Feedback

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

    主站蜘蛛池模板: www.亚洲色图.com| 美女网站免费福利视频| 精品久久洲久久久久护士免费 | 一个人免费日韩不卡视频| 亚洲乱码中文字幕久久孕妇黑人| aa午夜免费剧场| 中文字幕亚洲综合久久菠萝蜜| 一级黄色毛片免费看| 国产乱辈通伦影片在线播放亚洲| 一个人看的www视频免费在线观看| 亚洲精品国产高清嫩草影院| 性生大片视频免费观看一级| 亚洲人成人77777网站| 亚欧免费一级毛片| 亚洲av成人综合网| 成人永久免费高清| 国产A∨免费精品视频| 亚洲AV成人无码久久精品老人| 久久精品一本到99热免费| 色天使亚洲综合在线观看| 国产免费观看黄AV片| 国产免费一区二区三区免费视频 | 亚洲成年人啊啊aa在线观看| 亚洲视频在线免费| 亚洲无删减国产精品一区| 国产成人免费爽爽爽视频| 男女猛烈xx00免费视频试看| 亚洲中文字幕在线第六区| 99久久精品免费视频| 亚洲熟伦熟女专区hd高清| 亚洲午夜精品第一区二区8050| 男人进去女人爽免费视频国产| 亚洲不卡视频在线观看| 啊v在线免费观看| 亚欧免费无码aⅴ在线观看| 亚洲一卡二卡三卡| 亚洲国产精品日韩| 99久久国产热无码精品免费| 阿v视频免费在线观看| 亚洲精品美女在线观看播放| 亚洲国产人成精品|