深藍(lán)色心情

          過來聊聊~~~~

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            31 Posts :: 0 Stories :: 46 Comments :: 0 Trackbacks
          如何不用寫java代碼來完成開發(fā)? 

          對(duì)于大部分的產(chǎn)品和項(xiàng)目來說,頁(yè)面變化是非常頭痛的事情。每次小功能上線,新客戶到來,都需要進(jìn)行定制改造,不斷的開發(fā)維護(hù)。每次開發(fā)一方面要改動(dòng)頁(yè)面,一方面要改動(dòng)服務(wù)器代碼,然后部署。而借助動(dòng)態(tài)數(shù)據(jù)源,可以不用開發(fā)后端應(yīng)用,直接完成功能開發(fā)。 

          新功能開發(fā)時(shí),只需要定義需要的數(shù)據(jù)格式和獲取方法,如通過xml上傳1個(gè)sql語句,系統(tǒng)根據(jù)sql語句自動(dòng)提取數(shù)據(jù)并轉(zhuǎn)成通用的格式。開發(fā)過程中,后臺(tái)java開發(fā)部分只是寫好sql并且上傳,這樣前臺(tái)通過某一個(gè)servlet可以動(dòng)態(tài)的讀取執(zhí)行sql,并將結(jié)果按照json返給前端,以后所有的開發(fā)只需要前端做ajax實(shí)現(xiàn)頁(yè)面即可。 

          完整業(yè)務(wù)流程如下: 

          1. 用戶在前端操作,如需要讀取經(jīng)濟(jì)類圖書。 

          2. 前端js判斷是什么操作,然后發(fā)送ajax請(qǐng)求到:http://services.guzz.org/commonServlet?id=f2354239sfASASFASfasf6&catId=47&keyword=jingji..... 

          3. 服務(wù)器端有一個(gè)類似dispatcher-servlet的東西(我們這兒的commonServlet),攔截請(qǐng)求,根據(jù)id知道加載數(shù)據(jù)需要執(zhí)行名稱為f2354239sfASASFASfasf6的sql文件,執(zhí)行時(shí)需要參數(shù):catId=47和keyword=jingji 

          4. commonServlet從文件系統(tǒng)中讀取f2354239sfASASFASfasf6.xml文件(這個(gè)文件在一個(gè)隱藏的目錄下,從瀏覽器是不能直接獲取到的;集群環(huán)境會(huì)存放在集中存儲(chǔ)上),解析sql以及對(duì)象映射ORM。 

          5. commonServlet打開數(shù)據(jù)庫(kù)連接,根據(jù)sql構(gòu)造查詢語句,將第一步傳入的參數(shù)全部作為命名參數(shù)傳給查詢語句,執(zhí)行查詢。 

          6. commonServlet把查詢的ResultSet根據(jù)ORM轉(zhuǎn)成java類,再轉(zhuǎn)成json,返回前臺(tái)。 

          7. 前臺(tái)根據(jù)json構(gòu)造出頁(yè)面并展示。結(jié)束流程。 

          在整個(gè)過程中,有2個(gè)關(guān)鍵步驟,一是動(dòng)態(tài)加載SQL并進(jìn)行ORM映射,一是自動(dòng)進(jìn)行sql所需要參數(shù)的類型轉(zhuǎn)換和匹配,進(jìn)行命名查詢。如果系統(tǒng)規(guī)模較大,還需要解決查詢時(shí)分庫(kù)分表的問題。對(duì)于這種sql使用方式,由于在系統(tǒng)上線時(shí),并不知道以后會(huì)用哪些sql語句,我們稱作動(dòng)態(tài)SQL。 

          實(shí)現(xiàn)方式: 

          步驟1. 實(shí)現(xiàn)servlet。定義一個(gè)普通的servlet,或者jsp,或者webwork/spring action,接收參數(shù),獲取到sql的id,以及所有傳入的參數(shù),然后轉(zhuǎn)入處理類處理。處理完成后,將返回結(jié)果轉(zhuǎn)成json返回前端。 

          步驟2. 實(shí)現(xiàn)動(dòng)態(tài)SQL加載與查詢。處理類根據(jù)id加載sql并執(zhí)行,返回?cái)?shù)據(jù)庫(kù)查詢結(jié)果。guzz 1.2.8 beta2提供了動(dòng)態(tài)SQL服務(wù),根據(jù)此服務(wù)可以直接實(shí)現(xiàn)此功能。詳細(xì)說明:http://code.google.com/p/guzz/wiki/TutorialDynamicSQLService 

          好處: 

          實(shí)現(xiàn)以后,基本上后臺(tái)開發(fā)就會(huì)很穩(wěn)定很穩(wěn)定了,大部分的工作只是前端做頁(yè)面。可以大幅度的降低開發(fā)成本,提高開發(fā)進(jìn)度。 

          上面的實(shí)現(xiàn)是以上傳文件來定義和管理sql,也可以通過數(shù)據(jù)庫(kù)來管理。這樣管理起來更加簡(jiǎn)單。 

          如果使用guzz作為動(dòng)態(tài)SQL提供者,可以自動(dòng)獲得命名查詢,類型自動(dòng)匹配(轉(zhuǎn)成枚舉類型都可以),分庫(kù),自動(dòng)分切表,自定義屬性表等附加支持。

          嘖嘖~~ 

          posted on 2010-05-27 14:52 深藍(lán)色心情 閱讀(2973) 評(píng)論(5)  編輯  收藏 所屬分類: Java

          Feedback

          # re: 改進(jìn)架構(gòu),實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源,降低java維護(hù) 2010-05-27 16:18 咖啡妝
          對(duì)一般的系統(tǒng)有可能可以,但是業(yè)務(wù)復(fù)雜的話 不太好辦,我的sql語句也是動(dòng)態(tài)構(gòu)造的 不是寫死的,返回值也不一樣,我加一張表呢 其他的sql要關(guān)聯(lián)的話都完蛋了,業(yè)務(wù)一變sql就變 代碼邏輯也要變,不改不可能吧。

          我覺得封裝一些非業(yè)務(wù)相關(guān)組件還是不錯(cuò)的。
            回復(fù)  更多評(píng)論
            

          # re: 改進(jìn)架構(gòu),實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源,降低java維護(hù) 2010-05-27 16:22 深藍(lán)色心情
          @咖啡妝

          不是說動(dòng)態(tài)拼接SQL,而是指動(dòng)態(tài)提取SQL。SQL都存儲(chǔ)在外部,如文件中或數(shù)據(jù)庫(kù)中,修改sql的話只需要修改外部資源,不用改動(dòng)代碼。

            回復(fù)  更多評(píng)論
            

          # re: 改進(jìn)架構(gòu),實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源,降低java維護(hù) 2010-05-27 19:36 mr right
          對(duì)于大部分的產(chǎn)品和項(xiàng)目來說,頁(yè)面變化是非常頭痛的事情。每次小功能上線,新客戶到來,都需要進(jìn)行定制改造,不斷的開發(fā)維護(hù)。每次開發(fā)一方面要改動(dòng)頁(yè)面,一方面要改動(dòng)服務(wù)器代碼,然后部署。而借助動(dòng)態(tài)數(shù)據(jù)源,可以不用開發(fā)后端應(yīng)用,直接完成功能開發(fā)。
            回復(fù)  更多評(píng)論
            

          # re: 改進(jìn)架構(gòu),實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源,降低java維護(hù) 2010-05-28 13:48 淘寶女裝
          士大夫就看電視  回復(fù)  更多評(píng)論
            

          # re: 改進(jìn)架構(gòu),實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源,降低java維護(hù) 2010-05-28 15:38 博百優(yōu)
          不是說動(dòng)態(tài)拼接SQL,而是指動(dòng)態(tài)提取SQL。SQL都存儲(chǔ)在外部,如文件中或數(shù)據(jù)庫(kù)中,修改sql的話只需要修改外部資源,不用改動(dòng)代碼。

          如果我是調(diào)用sql文件呢  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 波密县| 且末县| 思南县| 耒阳市| 玉溪市| 荥阳市| 大名县| 石泉县| 浮山县| 鹤峰县| 河间市| 秦安县| 喀什市| 武隆县| 宁化县| 永胜县| 杨浦区| 荔波县| 佛学| 周宁县| 衡水市| 龙岩市| 石棉县| 招远市| 聊城市| 海口市| 台山市| 曲阜市| 仲巴县| 清丰县| 射阳县| 盘山县| 沙河市| 法库县| 大厂| 乌审旗| 晴隆县| 上杭县| 合山市| 彭州市| 宽甸|