一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種數(shù)據(jù)庫訪問方法,尤其是涉及一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法。
【背景技術(shù)】
[0002]數(shù)據(jù)庫是如今很多管理程序都會(huì)用到的數(shù)據(jù)管理程序,不論是BS還是CS架構(gòu)應(yīng)用程序,都可以分為數(shù)據(jù)處理和數(shù)據(jù)訪問兩部分,數(shù)據(jù)庫操作是數(shù)據(jù)訪問的主要部分。而如何高效簡便地在應(yīng)用程序中進(jìn)行數(shù)據(jù)庫的訪問是很多開發(fā)人員都在探索的內(nèi)容,比較常用的兩種方式是對(duì)象映射的方式和通過反射API獲取業(yè)務(wù)實(shí)體類相關(guān)信息,然后拼接SQL語句的方式。但兩種方式都不夠簡潔,對(duì)象映射方式需要通過xml配置文件來映射代碼實(shí)體類和數(shù)據(jù)庫表之間的關(guān)系,在進(jìn)行持久化操作時(shí)候需要查找對(duì)應(yīng)關(guān)系來確定要在數(shù)據(jù)庫中操作的對(duì)象。而通過反射API獲取業(yè)務(wù)實(shí)體類信息,然后拼接SQL語句的方式需要通過預(yù)先配置好的文件來映射對(duì)象類和該對(duì)象的實(shí)際數(shù)據(jù)訪問類,然后才能執(zhí)行具體的數(shù)據(jù)庫操作。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供的一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法,旨在通過業(yè)務(wù)類的屬性標(biāo)簽實(shí)現(xiàn)與數(shù)據(jù)庫的綁定,從而實(shí)現(xiàn)數(shù)據(jù)持久化的自動(dòng)處理。
[0004]本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
[0005]—種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法,其特征在于,該方法包括以下步驟:
[0006](I)創(chuàng)建自定義屬性標(biāo)簽,包括自定義類的標(biāo)簽和自定義字段的標(biāo)簽,所述的自定義類的標(biāo)簽包括數(shù)據(jù)庫表或視圖名稱,所述的自定義字段的標(biāo)簽包括數(shù)據(jù)庫中字段名稱和字段類型;
[0007](2)構(gòu)建所有業(yè)務(wù)類,并對(duì)每個(gè)業(yè)務(wù)類分別添加與數(shù)據(jù)庫內(nèi)容一一對(duì)應(yīng)的自定義類的標(biāo)簽和自定義字段的標(biāo)簽;
[0008](3)構(gòu)建每個(gè)業(yè)務(wù)類的ADO類,并進(jìn)行持久化操作;
[0009](4)通過反射機(jī)制獲取業(yè)務(wù)類對(duì)應(yīng)的表或視圖名稱和字段名稱;
[0010](5)根據(jù)獲取到的表或視圖名稱和字段名稱構(gòu)建CRUD操作的SQL語句;
[0011](6)根據(jù)具體業(yè)務(wù)類的數(shù)據(jù)信息構(gòu)建SQL參數(shù)對(duì)象,調(diào)用ADO執(zhí)行函數(shù),若有異常則將異常信息返回給系統(tǒng)處理并關(guān)閉數(shù)據(jù)庫連接,否則返回結(jié)果并關(guān)閉數(shù)據(jù)庫連接。
[0012]所述的標(biāo)簽的字段類型和數(shù)據(jù)庫中具體字段類型一致。
[0013]所述的步驟(3)具體包括以下子步驟:
[0014](301)構(gòu)建 ADO 類的操作模板 SmrAdoTmplate〈T> ;
[0015](302)通過繼承SmrAdoTmplate〈T>方式來構(gòu)建每個(gè)業(yè)務(wù)類的ADO類;
[0016](302)在系統(tǒng)中調(diào)用業(yè)務(wù)類對(duì)應(yīng)的ADO類執(zhí)行持久化操作。
[0017]所述的步驟(5)中構(gòu)建CRUD操作的SQL語句具體方式為:調(diào)用SQL語句拼接SqlServerConvertor 類構(gòu)建 CRUD 操作的 SQL 語句。
[0018]所述的調(diào)用SQL語句拼接Sql ServerConvertor類構(gòu)建CRUD操作的SQL語句,若為插入操作,其具體拼接方式為:采用insert into {0} ({1}) values ({2})字符串進(jìn)行操作,所述的標(biāo)簽的表或視圖名稱格式化到{0}位置,所述的標(biāo)簽的字段名稱以逗號(hào)分隔拼接成字符串后格式化到{1}位置,根據(jù)具體的數(shù)據(jù)庫類型在字段名稱前添加不同前綴,拼接SQL語句參數(shù)內(nèi)容格式化到{2}位置。
[0019]與現(xiàn)有技術(shù)相比,本發(fā)明只需對(duì)業(yè)務(wù)類添加對(duì)應(yīng)的標(biāo)簽內(nèi)容,即可實(shí)現(xiàn)業(yè)務(wù)對(duì)數(shù)據(jù)的持久化存儲(chǔ),使得開發(fā)工作主要集中在業(yè)務(wù)邏輯的處理,從而提高開發(fā)效率;通過類本身的屬性標(biāo)簽來映射業(yè)務(wù)實(shí)體類和數(shù)據(jù)庫實(shí)體的內(nèi)容,不需要額外的映射文件或映射關(guān)系表來維護(hù)映射關(guān)系,從而節(jié)省1和內(nèi)存資源,提高執(zhí)行效率。
【附圖說明】
[0020]圖1為本發(fā)明數(shù)據(jù)庫訪問方法總體結(jié)構(gòu)示意圖;
[0021]圖2為本發(fā)明自定義屬性標(biāo)簽與數(shù)據(jù)庫的對(duì)應(yīng)關(guān)系結(jié)構(gòu)示意圖;
[0022]圖3為本發(fā)明數(shù)據(jù)庫訪問方法流程圖。
[0023]I為業(yè)務(wù)實(shí)體,2為數(shù)據(jù)庫,3為數(shù)據(jù)持續(xù)化層,4為自定義屬性標(biāo)簽。
【具體實(shí)施方式】
[0024]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。
[0025]實(shí)施例
[0026]如圖1,本方法主要通過自定義屬性標(biāo)簽來實(shí)現(xiàn)業(yè)務(wù)實(shí)體I和數(shù)據(jù)庫2實(shí)體之間的映射,通過數(shù)據(jù)持久化層3來執(zhí)行數(shù)據(jù)庫2訪問操作。
[0027]圖2中自定義屬性標(biāo)簽4的類名映射到數(shù)據(jù)庫2表或視圖名稱,類屬性映射到字段名稱,因此自定義屬性標(biāo)簽4包括自定義類的標(biāo)簽和自定義字段的標(biāo)簽,其中自定義類的標(biāo)簽僅包含對(duì)應(yīng)的表或視圖名稱,自定義字段的標(biāo)簽包括數(shù)據(jù)庫中字段名稱和字段類型,字段類型應(yīng)和數(shù)據(jù)庫中具體字段類型保持一致。
[0028]圖3為本發(fā)明數(shù)據(jù)庫訪問方法流程圖,以下對(duì)圖中的各步驟進(jìn)行詳細(xì)描述:
[0029]步驟301中,創(chuàng)建自定義屬性標(biāo)簽,包括自定義類的標(biāo)簽TableAttribute和自定義字段的標(biāo)簽FieldAttribute。TableAttribute僅定義對(duì)應(yīng)的表或視圖名稱,F(xiàn)ieldAttribute定義字段名稱外還要定義是否為主鍵,執(zhí)行步驟302 ;
[0030]步驟302中,構(gòu)建所有業(yè)務(wù)類,并對(duì)每個(gè)業(yè)務(wù)類分別添加與數(shù)據(jù)庫內(nèi)容--對(duì)應(yīng)的自定義類的標(biāo)簽和自定義字段的標(biāo)簽,執(zhí)行步驟303 ;
[0031]步驟303中,構(gòu)建ADO類的操作模板SmrAdoTmplate〈T>,執(zhí)行步驟304 ;
[0032]步驟304中,通過繼承ADO類的操作模板SmrAdoTmplate〈T>方式來構(gòu)建所有業(yè)務(wù)類的ADO類,執(zhí)行步驟305 ;
[0033]步驟305中,在系統(tǒng)中調(diào)用業(yè)務(wù)類對(duì)應(yīng)的ADO類執(zhí)行持久化操作,執(zhí)行步驟306 ;
[0034]步驟306中,對(duì)于業(yè)務(wù)類T通過反射機(jī)制獲取其對(duì)應(yīng)的表名和字段名,執(zhí)行步驟307 ;
[0035]步驟307中,調(diào)用SQL語句拼接SqlServerConvertor類,根據(jù)獲取到的表名和字段名信息構(gòu)建CRUD操作的SQL語句,并執(zhí)行步驟308,其中SQL具體拼接內(nèi)容以插入操作為例:采用insert into {0} ({1}) values ({2})字符串進(jìn)行插入操作,表名格式化到{0}位置,字段名以逗號(hào)分隔拼接成字符串后格式化到{1}位置,根據(jù)具體的數(shù)據(jù)庫類型在字段前添加不同前綴,拼接SQL語句參數(shù)內(nèi)容格式化到{2}位置;
[0036]步驟308中,根據(jù)具體T的數(shù)據(jù)信息構(gòu)建SQL參數(shù)對(duì)象,然后調(diào)用ADO執(zhí)行函數(shù),執(zhí)行步驟309 ;
[0037]步驟309中,判斷ADO執(zhí)行函數(shù)是否執(zhí)行成功,若成功執(zhí)行步驟311,若不成功則執(zhí)行步驟310 ;
[0038]步驟310中,將異常信息返回給系統(tǒng)處理,執(zhí)行步驟311 ;
[0039]步驟311,返回結(jié)果并關(guān)閉數(shù)據(jù)庫連接
[0040]該數(shù)據(jù)庫訪問方法已經(jīng)被應(yīng)用于卡斯柯信號(hào)有限公司iTC產(chǎn)品ZC/LC工具軟件中,該軟件的主要功能是對(duì)于輸入的車輛區(qū)域控制和線路控制信息進(jìn)行處理和轉(zhuǎn)換。
[0041]ZC/LC工具軟件使用C#開發(fā),采用SQL數(shù)據(jù)庫完成數(shù)據(jù)的存儲(chǔ)工作。
[0042]從系統(tǒng)開發(fā)進(jìn)度看,使用該發(fā)明后,編程的復(fù)雜度降低了很多,開發(fā)效率有比較大的提升;從用戶使用情況來看,其交互方式和響應(yīng)速度也得到了廣泛認(rèn)可。
【主權(quán)項(xiàng)】
1.一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法,其特征在于,該方法包括以下步驟: (1)創(chuàng)建自定義屬性標(biāo)簽,包括自定義類的標(biāo)簽和自定義字段的標(biāo)簽,所述的自定義類的標(biāo)簽包括數(shù)據(jù)庫表或視圖名稱,所述的自定義字段的標(biāo)簽包括數(shù)據(jù)庫中字段名稱和字段類型; (2)構(gòu)建所有業(yè)務(wù)類,并對(duì)每個(gè)業(yè)務(wù)類分別添加與數(shù)據(jù)庫內(nèi)容一一對(duì)應(yīng)的自定義類的標(biāo)簽和自定義字段的標(biāo)簽; (3)構(gòu)建每個(gè)業(yè)務(wù)類的ADO類,并進(jìn)行持久化操作; (4)通過反射機(jī)制獲取業(yè)務(wù)類對(duì)應(yīng)的表或視圖名稱和字段名稱; (5)根據(jù)獲取到的表或視圖名稱和字段名稱構(gòu)建CRUD操作的SQL語句; (6)根據(jù)具體業(yè)務(wù)類的數(shù)據(jù)信息構(gòu)建SQL參數(shù)對(duì)象,調(diào)用ADO執(zhí)行函數(shù),若有異常則將異常信息返回給系統(tǒng)處理并關(guān)閉數(shù)據(jù)庫連接,否則返回結(jié)果并關(guān)閉數(shù)據(jù)庫連接。2.根據(jù)權(quán)利要求1所述的一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法,其特征在于,所述的標(biāo)簽的字段類型和數(shù)據(jù)庫中具體字段類型一致。3.根據(jù)權(quán)利要求2所述的一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法,其特征在于,所述的步驟(3)具體包括以下子步驟: (301)構(gòu)建ADO類的操作模板SmrAdoTmplateCD; (302)通過繼承SmrAdoTmplate〈T>方式來構(gòu)建每個(gè)業(yè)務(wù)類的ADO類; (302)在系統(tǒng)中調(diào)用業(yè)務(wù)類對(duì)應(yīng)的ADO類執(zhí)行持久化操作。4.根據(jù)權(quán)利要求3所述的一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法,其特征在于,所述的步驟(5)中構(gòu)建CRUD操作的SQL語句具體方式為:調(diào)用SQL語句拼接SqlServerConvertor類構(gòu)建CRUD操作的SQL語句。5.根據(jù)權(quán)利要求4所述的一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法,其特征在于,所述的調(diào)用SQL語句拼接SqlServerConvertor類構(gòu)建CRUD操作的SQL語句,若為插入操作,其具體拼接方式為:采用insert into {0} ({1}) values ({2})字符串進(jìn)行操作,所述的標(biāo)簽的表或視圖名稱格式化到{0}位置,所述的標(biāo)簽的字段名稱以逗號(hào)分隔拼接成字符串后格式化到{1}位置,根據(jù)具體的數(shù)據(jù)庫類型在字段名稱前添加不同前綴,拼接SQL語句參數(shù)內(nèi)容格式化到⑵位置。
【專利摘要】本發(fā)明涉及一種基于屬性標(biāo)簽的數(shù)據(jù)庫訪問方法,包括以下步驟:(1)創(chuàng)建自定義屬性標(biāo)簽;(2)構(gòu)建所有業(yè)務(wù)類,并分別添加與數(shù)據(jù)庫內(nèi)容一一對(duì)應(yīng)的自定義屬性標(biāo)簽;(3)構(gòu)建每個(gè)業(yè)務(wù)類的ADO類并進(jìn)行持久化操作;(4)通過反射機(jī)制獲取業(yè)務(wù)類對(duì)應(yīng)的數(shù)據(jù)庫表或視圖名稱和字段名稱;(5)根據(jù)獲取到的信息構(gòu)建CRUD操作的SQL語句;(6)根據(jù)具體業(yè)務(wù)類的數(shù)據(jù)信息構(gòu)建SQL參數(shù)對(duì)象,調(diào)用ADO執(zhí)行函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問。與現(xiàn)有技術(shù)相比,本發(fā)明對(duì)業(yè)務(wù)類添加對(duì)應(yīng)的自定義屬性標(biāo)簽,實(shí)現(xiàn)業(yè)務(wù)對(duì)數(shù)據(jù)的持久化存儲(chǔ),提高開發(fā)效率;同時(shí)不需要額外的映射文件或映射關(guān)系表來維護(hù)映射關(guān)系,節(jié)省IO和內(nèi)存資源,提高執(zhí)行效率。
【IPC分類】G06F17/30
【公開號(hào)】CN105159920
【申請(qǐng)?zhí)枴緾N201510451226
【發(fā)明人】王許超, 田緒俊, 張怡, 袁松, 朱愛鵬, 劉俊
【申請(qǐng)人】卡斯柯信號(hào)有限公司
【公開日】2015年12月16日
【申請(qǐng)日】2015年7月28日