深藍色心情

          過來聊聊~~~~

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            31 Posts :: 0 Stories :: 46 Comments :: 0 Trackbacks
          如何不用寫java代碼來完成開發? 

          對于大部分的產品和項目來說,頁面變化是非常頭痛的事情。每次小功能上線,新客戶到來,都需要進行定制改造,不斷的開發維護。每次開發一方面要改動頁面,一方面要改動服務器代碼,然后部署。而借助動態數據源,可以不用開發后端應用,直接完成功能開發。 

          新功能開發時,只需要定義需要的數據格式和獲取方法,如通過xml上傳1個sql語句,系統根據sql語句自動提取數據并轉成通用的格式。開發過程中,后臺java開發部分只是寫好sql并且上傳,這樣前臺通過某一個servlet可以動態的讀取執行sql,并將結果按照json返給前端,以后所有的開發只需要前端做ajax實現頁面即可。 

          完整業務流程如下: 

          1. 用戶在前端操作,如需要讀取經濟類圖書。 

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

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

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

          5. commonServlet打開數據庫連接,根據sql構造查詢語句,將第一步傳入的參數全部作為命名參數傳給查詢語句,執行查詢。 

          6. commonServlet把查詢的ResultSet根據ORM轉成java類,再轉成json,返回前臺。 

          7. 前臺根據json構造出頁面并展示。結束流程。 

          在整個過程中,有2個關鍵步驟,一是動態加載SQL并進行ORM映射,一是自動進行sql所需要參數的類型轉換和匹配,進行命名查詢。如果系統規模較大,還需要解決查詢時分庫分表的問題。對于這種sql使用方式,由于在系統上線時,并不知道以后會用哪些sql語句,我們稱作動態SQL。 

          實現方式: 

          步驟1. 實現servlet。定義一個普通的servlet,或者jsp,或者webwork/spring action,接收參數,獲取到sql的id,以及所有傳入的參數,然后轉入處理類處理。處理完成后,將返回結果轉成json返回前端。 

          步驟2. 實現動態SQL加載與查詢。處理類根據id加載sql并執行,返回數據庫查詢結果。guzz 1.2.8 beta2提供了動態SQL服務,根據此服務可以直接實現此功能。詳細說明:http://code.google.com/p/guzz/wiki/TutorialDynamicSQLService 

          好處: 

          實現以后,基本上后臺開發就會很穩定很穩定了,大部分的工作只是前端做頁面??梢源蠓鹊慕档烷_發成本,提高開發進度。 

          上面的實現是以上傳文件來定義和管理sql,也可以通過數據庫來管理。這樣管理起來更加簡單。 

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

          嘖嘖~~ 

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

          Feedback

          # re: 改進架構,實現動態數據源,降低java維護 2010-05-27 16:18 咖啡妝
          對一般的系統有可能可以,但是業務復雜的話 不太好辦,我的sql語句也是動態構造的 不是寫死的,返回值也不一樣,我加一張表呢 其他的sql要關聯的話都完蛋了,業務一變sql就變 代碼邏輯也要變,不改不可能吧。

          我覺得封裝一些非業務相關組件還是不錯的。
            回復  更多評論
            

          # re: 改進架構,實現動態數據源,降低java維護 2010-05-27 16:22 深藍色心情
          @咖啡妝

          不是說動態拼接SQL,而是指動態提取SQL。SQL都存儲在外部,如文件中或數據庫中,修改sql的話只需要修改外部資源,不用改動代碼。

            回復  更多評論
            

          # re: 改進架構,實現動態數據源,降低java維護 2010-05-27 19:36 mr right
          對于大部分的產品和項目來說,頁面變化是非常頭痛的事情。每次小功能上線,新客戶到來,都需要進行定制改造,不斷的開發維護。每次開發一方面要改動頁面,一方面要改動服務器代碼,然后部署。而借助動態數據源,可以不用開發后端應用,直接完成功能開發。
            回復  更多評論
            

          # re: 改進架構,實現動態數據源,降低java維護 2010-05-28 13:48 淘寶女裝
          士大夫就看電視  回復  更多評論
            

          # re: 改進架構,實現動態數據源,降低java維護 2010-05-28 15:38 博百優
          不是說動態拼接SQL,而是指動態提取SQL。SQL都存儲在外部,如文件中或數據庫中,修改sql的話只需要修改外部資源,不用改動代碼。

          如果我是調用sql文件呢  回復  更多評論
            

          主站蜘蛛池模板: 双江| 兴宁市| 建平县| 太和县| 义乌市| 华池县| 水富县| 灵武市| 尤溪县| 崇仁县| 潮州市| 麦盖提县| 鸡泽县| 铁岭市| 庆元县| 木兰县| 丹东市| 肥乡县| 改则县| 平果县| 太仓市| 平顺县| 吴旗县| 中牟县| 视频| 黔西县| 漠河县| 绥滨县| 锦屏县| 常州市| 荣昌县| 武川县| 阳信县| 博乐市| 柳河县| 朝阳市| 南昌县| 东乡县| 伊宁市| 金塔县| 陇川县|