如何不用寫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提供者,可以自動獲得命名查詢,類型自動匹配(轉成枚舉類型都可以),分庫,自動分切表,自定義屬性表等附加支持。
嘖嘖~~
|