如何不用寫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)分切表,自定義屬性表等附加支持。
嘖嘖~~
對(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)分切表,自定義屬性表等附加支持。
嘖嘖~~