隨筆 - 20  文章 - 12  trackbacks - 0
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(1)

          隨筆檔案(20)

          java論壇

          我的朋友

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 15247
          • 排名 - 1997

          最新評論

          閱讀排行榜

          評論排行榜

          newxy技術(shù)網(wǎng)站:http://www.newxy.net
          ??? 在java的web開發(fā)領(lǐng)域較麻煩的是數(shù)據(jù)庫操縱,如果有工具能像delphi開發(fā)數(shù)據(jù)庫運(yùn)用系統(tǒng)那樣高效,它一定會(huì)受到開發(fā)者的歡迎。

          ??? 經(jīng)過五個(gè)方面的比較,newxy+struts WEB開發(fā)與deiphi桌面開發(fā)相比,速度更快,能力更強(qiáng)。

          ??? newxy是hibernate的替代者,struts+newxy是struts+hibernate的替代方案。

          ??? struts的不足,下面一篇文章有代表性:《Struts的巨大煩惱 真的不適合大系統(tǒng)?》http://dev.csdn.net/develop/article/85/85114.shtm
          主要觀點(diǎn)是:
           ??? 一、轉(zhuǎn)到展示層時(shí),需要配置forward,每一次轉(zhuǎn)到展示層,相信大多數(shù)都是直接轉(zhuǎn)到j(luò)sp, 而涉及到轉(zhuǎn)向,需要配置forward,如果有十個(gè)展示層的jsp,需要配置十次struts, 而且還不包括有時(shí)候目錄、文件變更,需要重新修改forward,注意,每次修改配置之后, 要求重新部署整個(gè)項(xiàng)目,而tomcate這樣的服務(wù)器,還必須重新啟動(dòng)服務(wù)器,如果業(yè)務(wù)變更復(fù)雜頻繁的系統(tǒng), 這樣的操作簡單不可想象。現(xiàn)在就是這樣,幾十上百個(gè)人同時(shí)在線使用我們的 系統(tǒng), 大家可以想象一下,我的煩惱有多大。
          ??? 二、當(dāng)頁面表單需要自動(dòng)變化或者頻繁變化時(shí)。
          ??? 對于一個(gè)成熟的MIS系統(tǒng)來說,頁面表單肯定是不固定的,甚至象有些系統(tǒng),頁面表單是存在數(shù)據(jù)庫中, 需要填寫的表單在頁面自動(dòng)生成,比如填寫一個(gè)人員基本信息,本來只需要填寫 姓名、性別、出生年月 三個(gè)指標(biāo), 而我后來需要增加籍貫這樣的指標(biāo),我只需要在數(shù)據(jù)庫中添加籍貫這個(gè)記錄,并在頁面就能自動(dòng)增加籍貫這樣的表單。 而 struts在這方面,其優(yōu)勢反而變成了不足,我參考了非常多的人力資源管理系統(tǒng),這些系統(tǒng)幾乎都能夠做系統(tǒng)里面就可以控制人員信息的指示, 進(jìn)行使展示層能隨之靈活變化,如果使用了struts,這些靈活性就根本用不上。 同時(shí),如果頁面表單頻繁變化時(shí),就需要頻繁修改formbean對應(yīng)的方法和屬性,而每次修改之后,就要求重新部署,或者重新啟動(dòng)服務(wù)器……。
          ??? hibernate的不足,下面是一位網(wǎng)友的看法,具有代表性:
          ??? 一、對象與數(shù)據(jù)庫的映射,關(guān)鍵在于對象關(guān)系的映射,但是沒做到很理想,配置過多,控制復(fù)雜, 另外還會(huì)出錯(cuò)。其實(shí)本質(zhì)在于對象不夠自由。
          ??? 二、事務(wù)處理。這點(diǎn)上更容易出問題,相對于各種各樣的事務(wù)管理器,要兼容是一個(gè)大問題, 總歸在各種應(yīng)用服務(wù)器上有很多問題。其本質(zhì)在于創(chuàng)建了一個(gè)自我數(shù)據(jù)存取小環(huán)境,必然面臨各種兼容問題。
          ??? 三、HQL語言。建立對象查詢語言,類SQL,但是不同于任何一種SQL,調(diào)試環(huán)境復(fù)雜。本質(zhì)在于創(chuàng)建了一種語言,增加學(xué)習(xí)成本。
          ??? 這位網(wǎng)友還提出了減化和退化方案。

          ??? struts+newxy至所以在開發(fā)效率上比struts+hibernate能提高十倍、甚至幾十倍,是因?yàn)榭朔藄truts與hiberate的不足。
          ??? 利用newxy DAO類,標(biāo)簽, struts+newxy可以在以下幾個(gè)方面不用寫java代碼,不用配置struts。

          ??? 1.數(shù)據(jù)庫的增、刪、改;
          ??? 2.對查詢所得數(shù)據(jù)緩存,指定緩存時(shí)長;
          ??? 3.數(shù)據(jù)庫字符編碼與本地字符編碼轉(zhuǎn)換;
          ??? 4.文件上傳,上傳大小控制;
          ??? 5.文件下載,下載記數(shù);
          ??? 6.圖片顯示;
          ??? 7.數(shù)據(jù)分頁顯示;
          ??? 8.客戶端標(biāo)記記錄集哪條記錄被選擇;

          ??? 因?yàn)榭梢圆粚慾ava代碼,不用建立ActionForm類、Action類,因而不用配置struts,不用重新編譯類文件、不用重新打包、不用重啟服務(wù)器。 可以克服struts的不足。
          ??? 在克服hibernate的不足方面,newxy采用“退化”和“進(jìn)化”并用的方案。
          ??? newxy在進(jìn)行數(shù)據(jù)的查詢、增、刪、改時(shí)都會(huì)調(diào)用一注冊方法,根據(jù)業(yè)務(wù)涉及到的數(shù)據(jù)庫相關(guān)數(shù)據(jù)源名和表名進(jìn)行注冊, 注冊的目的是要獲得表字段對應(yīng)的java類名,主關(guān)鍵字段名,主關(guān)鍵字段長度等數(shù)據(jù),保存在一個(gè)單子實(shí)例中,以供DAO類調(diào)用。 如果已注冊不再注冊。
          ??? 可以對多表查詢語句注冊,如:“select a.field1,b.field2 from table1 as a,table2 as b where ...";
          ??? 可以對跨數(shù)據(jù)源的查詢注冊。如:"select a.field1,b.field2 from table1 as a,DB3.dto.table2 as b where ...";
          ??? 如果是數(shù)據(jù)增、刪、改,則是對單一表注冊;
          ??? 由于struts+newxy用即時(shí)注冊的方法,可以不象hibernate那樣用靜態(tài)文件影射數(shù)據(jù)庫到值對象類。開發(fā)者不用配置任何文件。可以使用任意查詢語句,克服“對象不夠自由”問題。
          ??? hibernate通過配置文件設(shè)置表之間的關(guān)系,有一定意義,newxy在這方面算是“退化”的,但struts+newxy在處理數(shù)據(jù)庫表之間關(guān)系方面是很容易的。
          ??? 在事務(wù)處理方面,newxy提供了一事務(wù)類net.newxy.dbm.Transaction。它可以將多個(gè)數(shù)據(jù)庫的操作放在一個(gè)事務(wù)中。由于DAO類對數(shù)據(jù)操作前的注冊方法得到的表及其字段各種特性都是與數(shù)據(jù)庫直接相關(guān)的,而不是事先用靜態(tài)文件影射, 因而極少發(fā)生錯(cuò)誤;開發(fā)者可以通過Transaction的方法為不同的數(shù)據(jù)庫設(shè)置不同的隔離等級(jí);可以設(shè)置操時(shí)回滾時(shí)間,在設(shè)置的時(shí)間內(nèi)事務(wù)沒有完成,會(huì)有一線程進(jìn)行干預(yù),將事務(wù)回滾。
          ??? hibernate的HQL語言是和數(shù)據(jù)庫與對象影射規(guī)則相適應(yīng)的,它沒有特別功能,主要是利用值對象類來查詢數(shù)據(jù)。 newxy也提供了一種查詢語言NQL。開發(fā)者不需用特殊的語法來構(gòu)建查詢語句。非常容易理解,不會(huì)增加學(xué)習(xí)成本。

          struts一旦與newxy結(jié)合到一起運(yùn)用是如此簡單,下列是struts+newxy代替struts+hibernate的例子。

          ??????? struts配置中,formBean的type是“net.newxy.struts_faces.DynaFormBean”,開發(fā)者不需另外設(shè)計(jì)ActionForm類。如:
          ??????????? <form-bean name="myFormBean" type="net.newxy.struts_faces.DynaFormBean" />

          ??????? 用戶從頁面表單submit數(shù)據(jù)后,在Action類的方法中,開發(fā)者可以用DynaFormBean代替struts ActionForm,用DynaDto代替hibernate 對象類。
          ??????? public ActionForward methodName(ActionMapping actionMapping, ActionForm actionForm,
          ????????????????????????????? HttpServletRequest httpServletRequest,
          ??????????? HttpServletResponse httpServletResponse) throws Exception{
          ??????????? ......
          ??????????? DynaFormBean form=(DynaFormBean)actionForm;
          ??????????? DynaDto dto=(DynaDto)form.getDto();
          ??????????? dto.set_table("table1");//如果用戶頁面沒有傳來數(shù)據(jù)庫表名。
          ??????????? try{
          ??????????????? IFacade ifacade=IFacadeFactory.getFacade(httpServletRequest.getParameter("_dao"),
          ????????????????????? httpServletRequest.getLocale());? //絕大多數(shù)情況是:IFacade ifacade=IFacadeFactory.getFacade();

          ??????????????? //更新或插入,如果result==null,為update,否則為insert。
          ??????????????? result = ifacade.update(dto);//或:FormBeanUtils.update(ifacade, form);

          ??????????????? //刪除記錄
          ??????????????? ifacade.remove(dto);//或:FormBeanUtils.remove(ifacade, form);

          ??????????????? //數(shù)據(jù)查詢,如果上傳了符合newxy多項(xiàng)查詢規(guī)則的數(shù)據(jù)。查詢記錄集放在newForm 的_coll屬性中。
          ??????????????? DynaFormBean newForm=new DynaFormBean();
          ??????????????? FormBeanUtils.createForm(newForm, httpServletRequest);
          ??????????????? ......
          ??????????????? //開發(fā)者如果想知道生成的sql語句,可以這樣:
          ??????????????? //string sql=form.get_sql();
          ??????????????? //由于開發(fā)者在對數(shù)據(jù)進(jìn)行操作時(shí)完全不需知道sql語句,所以沒有提供方法讓開發(fā)者直接得到sql語句來控制數(shù)據(jù)操作。
          ??????????????? //未來版本可能提供這樣的方法。
          ??????????? }catch(Exception e){
          ??????????????? ......
          ??????????? }
          ??????? }
          ??????? 如果使用newxy的標(biāo)簽可以不建立Action類,不設(shè)置struts的formBean及action,可以不寫代碼。
          ???

          newxy也提供了一些實(shí)用類。本文檔就是用newxy自身工具類輕松建立的。

          posted on 2006-09-11 20:14 閱讀(339) 評論(1)  編輯  收藏

          FeedBack:
          # re: struts+hibernate的替代方案:struts+newxy? 2006-09-21 14:06 
          hibernate連接數(shù)據(jù)庫的速度"暴慢"  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 乐山市| 辉县市| 搜索| 西华县| 铁岭市| 衡东县| 陇西县| 乐至县| 清徐县| 开阳县| 江源县| 巍山| 成武县| 乃东县| 吉木萨尔县| 湖南省| 蒲城县| 游戏| 新巴尔虎右旗| 张掖市| 泰来县| 仙游县| 开江县| 曲周县| 康平县| 安泽县| 淮北市| 姜堰市| 宁晋县| 夏邑县| 文成县| 文水县| 怀化市| 吴堡县| 潜江市| 通辽市| 文成县| 九龙县| 义乌市| 武威市| 基隆市|