在java的web開發領域較麻煩的是數據庫操縱如果有工具能像delphi開發數據庫運用系統那樣高效它一定會受到開發者的歡迎
經過五個方面的比較newxy+struts WEB開發與deiphi桌面開發相比速度更快能力更強
newxy是hibernate的替代者struts+newxy是struts+hibernate的替代方案
struts的不足下面一篇文章有代表性《Struts的巨大煩惱 真的不適合大系統?》
主要觀點是
一轉到展示層時需要配置forward每一次轉到展示層相信大多數都是直接轉到jsp 而涉及到轉向需要配置forward如果有十個展示層的jsp需要配置十次struts 而且還不包括有時候目錄文件變更需要重新修改forward注意每次修改配置之後 要求重新部署整個項目而tomcate這樣的服務器還必須重新啟動服務器如果業務變更復雜頻繁的系統 這樣的操作簡單不可想象現在就是這樣幾十上百個人同時在線使用我們的 系統 大家可以想象一下我的煩惱有多大
二當頁面表單需要自動變化或者頻繁變化時
對於一個成熟的MIS系統來說頁面表單肯定是不固定的甚至象有些系統頁面表單是存在數據庫中 需要填寫的表單在頁面自動生成比如填寫一個人員基本信息本來只需要填寫 姓名性別出生年月 三個指標 而我後來需要增加籍貫這樣的指標我只需要在數據庫中添加籍貫這個記錄並在頁面就能自動增加籍貫這樣的表單 而 struts在這方面其優勢反而變成了不足我參考了非常多的人力資源管理系統這些系統幾乎都能夠做系統裡面就可以控制人員信息的指示 進行使展示層能隨之靈活變化如果使用了struts這些靈活性就根本用不上 同時如果頁面表單頻繁變化時就需要頻繁修改formbean對應的方法和屬性而每次修改之後就要求重新部署或者重新啟動服務器……
hibernate的不足下面是一位網友的看法具有代表性
一對象與數據庫的映射關鍵在於對象關系的映射但是沒做到很理想配置過多控制復雜 另外還會出錯其實本質在於對象不夠自由
二事務處理這點上更容易出問題相對於各種各樣的事務管理器要兼容是一個大問題 總歸在各種應用服務器上有很多問題其本質在於創建了一個自我數據存取小環境必然面臨各種兼容問題
三HQL語言建立對象查詢語言類SQL但是不同於任何一種SQL調試環境復雜本質在於創建了一種語言增加學習成本
這位網友還提出了減化和退化方案
struts+newxy之所以在開發效率上比struts+hibernate能提高十倍甚至幾十倍是因為克服了struts與hiberate的不足
利用newxy DAO類標簽 struts+newxy可以在以下幾個方面不用寫java代碼不用配置struts
數據庫的增刪改
對查詢所得數據緩存指定緩存時長
數據庫字符編碼與本地字符編碼轉換
文件上傳上傳大小控制
文件下載下載記數
圖片顯示
數據分頁顯示
客戶端標記記錄集哪條記錄被選擇
因為可以不寫java代碼不用建立ActionForm類Action類因而不用配置struts不用重新編譯類文件不用重新打包不用重啟服務器 可以克服struts的不足
在克服hibernate的不足方面newxy采用退化和進化並用的方案
newxy在進行數據的查詢增刪改時都會調用一注冊方法根據業務涉及到的數據庫相關數據源名和表名進行注冊 注冊的目的是要獲得表字段對應的java類名主關鍵字段名主關鍵字段長度等數據保存在一個單子實例中以供DAO類調用 如果已注冊不再注冊
可以對多表查詢語句注冊如select afieldbfield from table as atable as b where ;
可以對跨數據源的查詢注冊如select afieldbfield from table as aDBdtotable as b where ;
如果是數據增刪改則是對單一表注冊
由於struts+newxy用即時注冊的方法可以不象hibernate那樣用靜態文件影射數據庫到值對象類開發者不用配置任何文件可以使用任意查詢語句克服對象不夠自由問題
hibernate通過配置文件設置表之間的關系有一定意義newxy在這方面算是退化的但struts+newxy在處理數據庫表之間關系方面是很容易的
在事務處理方面newxy提供了一事務類netnewxydbmTransaction它可以將多個數據庫的操作放在一個事務中由於DAO類對數據操作前的注冊方法得到的表及其字段各種特性都是與數據庫直接相關的而不是事先用靜態文件影射 因而極少發生錯誤開發者可以通過Transaction的方法為不同的數據庫設置不同的隔離等級可以設置操時回滾時間在設置的時間內事務沒有完成會有一線程進行干預將事務回滾
hibernate的HQL語言是和數據庫與對象影射規則相適應的它沒有特別功能主要是利用值對象類來查詢數據 newxy也提供了一種查詢語言NQL開發者不需用特殊的語法來構建查詢語句非常容易理解不會增加學習成本
struts一旦與newxy結合到一起運用是如此簡單下列是struts+newxy代替struts+hibernate的例子
struts配置中formBean的type是netnewxystruts_facesDynaFormBean開發者不需另外設計ActionForm類如
<formbean name=myFormBean type=netnewxystruts_facesDynaFormBean />
用戶從頁面表單submit數據後在Action類的方法中開發者可以用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)formgetDto();
dtoset_table(table);//如果用戶頁面沒有傳來數據庫表名
try{
IFacade ifacade=IFacadeFactorygetFacade((_dao)
()); //絕大多數情況是IFacade ifacade=IFacadeFactorygetFacade();
//更新或插入如果result==null為update否則為insert
result = ifacadeupdate(dto);//或FormBeanUtilsupdate(ifacade form);
//刪除記錄
ifacaderemove(dto);//或:FormBeanUtilsremove(ifacade form);
//數據查詢如果上傳了符合newxy多項查詢規則的數據查詢記錄集放在newForm 的_coll屬性中
DynaFormBean newForm=new DynaFormBean();
FormBeanUtilscreateForm(newForm httpServletRequest);
//開發者如果想知道生成的sql語句可以這樣
//string sql=formget_sql();
//由於開發者在對數據進行操作時完全不需知道sql語句所以沒有提供方法讓開發者直接得到sql語句來控制數據操作
//未來版本可能提供這樣的方法
}catch(Exception e){
}
}
如果使用newxy的標簽可以不建立Action類不設置struts的formBean及action可以不寫代碼
newxy技術網站
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28506.html