本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,尤其涉及一種通用基礎(chǔ)存儲框架及存儲方法。
背景技術(shù):
在數(shù)據(jù)庫日常的開發(fā)中,普通的增刪改查是程序員經(jīng)常要做的工作。對于不同技術(shù)熟練程度的開發(fā)人員來說,寫一個增刪改查的速度各有不同,工作多年較有經(jīng)驗的可以一天寫幾個,剛工作不久的可能平均一天寫完一個增刪改查。如果經(jīng)驗不夠的話,質(zhì)量不能保證,容易出錯,例如事務(wù)忘了提交,連接忘了關(guān)閉等。
web數(shù)據(jù)庫開發(fā)中,主流技術(shù)方案是采用三層設(shè)計,控制跳轉(zhuǎn)—業(yè)務(wù)層—數(shù)據(jù)層,簡單的一個增刪改查需求,需要編寫(控制層)controller,(業(yè)務(wù)層)service,(數(shù)據(jù)層)dao這三層的代碼,在控制層提取請求的數(shù)據(jù),提供給業(yè)務(wù)層處理,然后調(diào)用數(shù)據(jù)層的接口實現(xiàn)數(shù)據(jù)持久化?,F(xiàn)有三層方案雖說采用分治法將各層不同功能的代碼進行歸類,但同時增加了不少復(fù)雜性,三層代碼重復(fù)編寫過多,耗時耗力,且無謂的重復(fù)太多。代碼耦合程度仍然過高,功能變動時容易出現(xiàn)級聯(lián)修改,其中一層進行改動,其他兩層為了適配,都需要進行相應(yīng)修改,如此導(dǎo)致出錯率高。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提出一種通用基礎(chǔ)存儲框架,使數(shù)據(jù)從發(fā)起請求到寫入數(shù)據(jù)庫全由框架本身處理,不需要開發(fā)人員額外編寫代碼,只需要開發(fā)人員提供相應(yīng)功能的sql腳本即可,從而減少了出錯率。
本發(fā)明的另一目的在于提出一種通用基礎(chǔ)存儲框架的存儲方法,使數(shù)據(jù)從發(fā)起請求到寫入數(shù)據(jù)庫全由框架本身處理,不需要開發(fā)人員額外編寫代碼,只需要開發(fā)人員提供相應(yīng)功能的sql腳本即可,從而減少了出錯率。
為達此目的,本發(fā)明采用以下技術(shù)方案:
一種通用基礎(chǔ)存儲框架,包括處理請求模塊dataservice、系統(tǒng)核心模塊core和數(shù)據(jù)庫持久化模塊jdbcconnection;
所述處理請求模塊dataservice用于從http請求解析出相關(guān)數(shù)據(jù)交由所述系統(tǒng)核心模塊core處理;
所述系統(tǒng)核心模塊core用于根據(jù)規(guī)則匹配sql相關(guān)參數(shù),實現(xiàn)從所述http請求到數(shù)據(jù)庫一步操作;
所述數(shù)據(jù)庫持久化模塊jdbcconnection用于管理不同數(shù)據(jù)連接的封裝,并直接對數(shù)據(jù)庫操作;
所述系統(tǒng)核心模塊core包括數(shù)據(jù)格式解析模塊dataconverter、關(guān)系數(shù)據(jù)庫sqlid解析模塊executor、業(yè)務(wù)處理模塊moudle、數(shù)據(jù)庫連接池模塊pools和會話檢查模塊session;
所述數(shù)據(jù)格式解析模塊dataconverter用于解析所述http請求,所述http請求包括json、xml、jsonp或java序列化的數(shù)據(jù)格式;
所述關(guān)系數(shù)據(jù)庫sqlid解析模塊executor用于解析mysql、oracle或sqlserver的sql語句與參數(shù)類型;
所述業(yè)務(wù)處理模塊moudle為數(shù)據(jù)庫操作的業(yè)務(wù)處理器;
所述數(shù)據(jù)庫連接池模塊pools用于適配數(shù)據(jù)庫連接池;
所述會話檢查模塊session用于檢查當(dāng)前請求的處理程序是否實現(xiàn)了接口。
還設(shè)置有插件擴展模塊pluginmanager和工具模塊utils;
所述插件擴展模塊pluginmanager用于處理程序本身不支持的復(fù)雜業(yè)務(wù);
所述工具模塊utils用于封裝常用組件并加以監(jiān)控。
所述業(yè)務(wù)處理模塊moudle的數(shù)據(jù)庫操作包括保存save、查詢query、更新update、刪除delete以及所述插件擴展模塊pluginmanage定義的業(yè)務(wù)處理。
所述數(shù)據(jù)庫連接池包括c3p0,druid或dbcp。
如上所述的通用基礎(chǔ)存儲框架的存儲方法,包括通用基礎(chǔ)數(shù)據(jù)存儲sql錄入步驟和通用基礎(chǔ)數(shù)據(jù)存儲sql執(zhí)行步驟:
所述通用基礎(chǔ)數(shù)據(jù)存儲sql錄入步驟包括:
步驟1.1、編寫相應(yīng)基礎(chǔ)存儲功能的sql語句,并在所述通用基礎(chǔ)存儲框架提供的管理界面錄入該sql語句;
步驟1.2、該sql語句錄入后,所述通用基礎(chǔ)存儲框架使用正則表達式,根據(jù)sql規(guī)范進行解析,解析過程中,所述通用基礎(chǔ)存儲框架根據(jù)不同的數(shù)據(jù)庫特征,從數(shù)據(jù)庫提供的相應(yīng)系統(tǒng)表獲取sql的參數(shù)類型;
步驟1.3、所述通用基礎(chǔ)存儲框架將解析出來的sql參數(shù)類型與參數(shù)名記錄到所述通用基礎(chǔ)存儲框架本身的數(shù)據(jù)表中,為其生成相應(yīng)sqlid;
步驟1.4、將數(shù)據(jù)持久化到數(shù)據(jù)庫,并刷新sqlid緩存;
所述通用基礎(chǔ)數(shù)據(jù)存儲sql執(zhí)行步驟包括:
步驟2.1、發(fā)起基礎(chǔ)數(shù)據(jù)存儲時,將配置好的sqlid和參數(shù)通過http傳入所述通用基礎(chǔ)存儲框架;
步驟2.2、對http數(shù)據(jù)進行解釋,獲取傳過來的參數(shù)和sqlid;
步驟2.3、根據(jù)sqlid獲取相對應(yīng)的sql腳本信息以及步驟1.3錄入的參數(shù)類型和名稱信息;
步驟2.4、按照jdbc使用規(guī)范,開啟事務(wù),對sql語句的占位符進行參數(shù)填充,執(zhí)行語句,并關(guān)閉事務(wù)和釋放資源;
步驟2.5、根據(jù)執(zhí)行完的sql語句返回的結(jié)果,用json進行數(shù)據(jù)序列化,通過http響應(yīng)給前端。
本發(fā)明的通用基礎(chǔ)存儲框架將數(shù)據(jù)存儲的代碼編寫進行自動解析與調(diào)用,開發(fā)人員只需要實現(xiàn)相應(yīng)的sql語句與腳本,通過本程序進行配置則可輕松實現(xiàn)數(shù)據(jù)的存儲功能,極大提高開發(fā)效率。由于將基礎(chǔ)數(shù)據(jù)存儲功能一體化,所以開發(fā)人員對業(yè)務(wù)基礎(chǔ)數(shù)據(jù)的存儲功能僅僅需要關(guān)心sql腳本的實現(xiàn),極大減少了開發(fā)人員的出錯率。
附圖說明
圖1是本發(fā)明的通用基礎(chǔ)存儲框架的一個實施例的系統(tǒng)圖;
圖2是本發(fā)明的存儲方法的一個實施例的流程圖。
具體實施方式
下面結(jié)合附圖并通過具體實施方式來進一步說明本發(fā)明的技術(shù)方案。
一種通用基礎(chǔ)存儲框架,包括處理請求模塊、系統(tǒng)核心模塊和數(shù)據(jù)庫持久化模塊;
所述處理請求模塊用于從http請求解析出相關(guān)數(shù)據(jù)交由所述系統(tǒng)核心模塊core處理;
所述系統(tǒng)核心模塊用于根據(jù)規(guī)則匹配sql相關(guān)參數(shù),實現(xiàn)從所述http請求到數(shù)據(jù)庫一步操作;
所述數(shù)據(jù)庫持久化模塊用于管理不同數(shù)據(jù)連接的封裝,并直接對數(shù)據(jù)庫操作;
所述系統(tǒng)核心模塊包括數(shù)據(jù)格式解析模塊、關(guān)系數(shù)據(jù)庫sqlid解析模塊、業(yè)務(wù)處理模塊、數(shù)據(jù)庫連接池模塊和會話檢查模塊;
所述數(shù)據(jù)格式解析模塊用于解析所述http請求,所述http請求包括json、xml、jsonp或java序列化的數(shù)據(jù)格式;
所述關(guān)系數(shù)據(jù)庫sqlid解析模塊用于解析mysql、oracle或sqlserver的sql語句與參數(shù)類型;
所述業(yè)務(wù)處理模塊為數(shù)據(jù)庫操作的業(yè)務(wù)處理器;
所述數(shù)據(jù)庫連接池模塊用于適配數(shù)據(jù)庫連接池;
所述會話檢查模塊用于檢查當(dāng)前請求的處理程序是否實現(xiàn)了接口。
還設(shè)置有插件擴展模塊和工具模塊;
所述插件擴展模塊用于處理程序本身不支持的復(fù)雜業(yè)務(wù);
所述工具模塊用于封裝常用組件并加以監(jiān)控。
所述業(yè)務(wù)處理模塊的數(shù)據(jù)庫操作包括保存save、查詢query、更新update、刪除delete以及所述插件擴展模塊定義的業(yè)務(wù)處理。
所述數(shù)據(jù)庫連接池包括c3p0,druid或dbcp。
如上所述的通用基礎(chǔ)存儲框架的存儲方法,包括通用基礎(chǔ)數(shù)據(jù)存儲sql錄入步驟和通用基礎(chǔ)數(shù)據(jù)存儲sql執(zhí)行步驟:
所述通用基礎(chǔ)數(shù)據(jù)存儲sql錄入步驟包括:
步驟1.1、編寫相應(yīng)基礎(chǔ)存儲功能的sql語句,并在所述通用基礎(chǔ)存儲框架提供的管理界面錄入該sql語句;
步驟1.2、該sql語句錄入后,所述通用基礎(chǔ)存儲框架使用正則表達式,根據(jù)sql規(guī)范進行解析,解析過程中,所述通用基礎(chǔ)存儲框架根據(jù)不同的數(shù)據(jù)庫特征,從數(shù)據(jù)庫提供的相應(yīng)系統(tǒng)表獲取sql的參數(shù)類型;
步驟1.3、所述通用基礎(chǔ)存儲框架將解析出來的sql參數(shù)類型與參數(shù)名記錄到所述通用基礎(chǔ)存儲框架本身的數(shù)據(jù)表中,為其生成相應(yīng)sqlid;
步驟1.4、將數(shù)據(jù)持久化到數(shù)據(jù)庫,并刷新sqlid緩存;
所述通用基礎(chǔ)數(shù)據(jù)存儲sql執(zhí)行步驟包括:
步驟2.1、發(fā)起基礎(chǔ)數(shù)據(jù)存儲時,將配置好的sqlid和參數(shù)通過http傳入所述通用基礎(chǔ)存儲框架;
步驟2.2、對http數(shù)據(jù)進行解釋,獲取傳過來的參數(shù)和sqlid;
步驟2.3、根據(jù)sqlid獲取相對應(yīng)的sql腳本信息以及步驟1.3錄入的參數(shù)類型和名稱信息;
步驟2.4、按照jdbc使用規(guī)范,開啟事務(wù),對sql語句的占位符進行參數(shù)填充,執(zhí)行語句,并關(guān)閉事務(wù)和釋放資源;
步驟2.5、根據(jù)執(zhí)行完的sql語句返回的結(jié)果,用json進行數(shù)據(jù)序列化,通過http響應(yīng)給前端。
開發(fā)人員只需要編寫程序用到的sql語句或存儲過程,并按以下步驟進行配置即可,不用要對基礎(chǔ)的數(shù)據(jù)存儲功能進行重復(fù)的三層編碼(即控制層,業(yè)務(wù)層,數(shù)據(jù)層)。
結(jié)合通用基礎(chǔ)數(shù)據(jù)存儲sql錄入與執(zhí)行,一個基礎(chǔ)的存儲功能就可以輕松實現(xiàn),不需要開發(fā)人員用三層編碼方式進行編碼實現(xiàn),成功將開發(fā)人員從繁瑣的,重復(fù)的三層編碼中釋放出來,同時,由于不需要進行java編碼,開發(fā)人員出錯與為新增功能重啟的問題也得到解決。
以上結(jié)合具體實施例描述了本發(fā)明的技術(shù)原理。這些描述只是為了解釋本發(fā)明的原理,而不能以任何方式解釋為對本發(fā)明保護范圍的限制?;诖颂幍慕忉?,本領(lǐng)域的技術(shù)人員不需要付出創(chuàng)造性的勞動即可聯(lián)想到本發(fā)明的其它具體實施方式,這些方式都將落入本發(fā)明的保護范圍之內(nèi)。