一種基于iBatis的對(duì)象關(guān)系映射方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供的一種基于iBatis的對(duì)象關(guān)系映射方法及系統(tǒng),由于引入數(shù)據(jù)庫(kù)表名與對(duì)象名,字段與屬性的映射關(guān)系的Xml配置文件來(lái)表達(dá)它們之間的關(guān)系,屏蔽了對(duì)底層數(shù)據(jù)庫(kù)的信息,達(dá)到只針對(duì)對(duì)象本身的操作,從而可以動(dòng)態(tài)適應(yīng)數(shù)據(jù)庫(kù)的變更,如表名、字段的變更,因?yàn)榇藭r(shí)只需要修改相應(yīng)的對(duì)象/表、屬性/字段的映射文件即可,使得對(duì)數(shù)據(jù)庫(kù)的操作面向?qū)ο?,?duì)數(shù)據(jù)庫(kù)的操作簡(jiǎn)單,流程簡(jiǎn)化,提高程序員的工作效率,降低了工作負(fù)擔(dān)。
【專利說(shuō)明】一種基于i Bat is的對(duì)象關(guān)系映射方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種基于iBatis的對(duì)象關(guān)系映射方法及系統(tǒng)。
【背景技術(shù)】
[0002]iBatis:iBatis 一詞來(lái)源于 internet 和 abatis 的組合,是一個(gè)由 Clinton Begin在2001年發(fā)起的開放源代碼項(xiàng)目。最初側(cè)重于密碼軟件的開發(fā),如今是基于Java的持久層框架。iBatis其核心思想是將對(duì)象的所有相關(guān)操作存儲(chǔ)于XML配置文件中,并分別用標(biāo)識(shí)符標(biāo)識(shí)每一個(gè)操作、以及該操作所需要的參數(shù)名、參數(shù)類型、返回值等。使用iBatis提供的ORM機(jī)制,對(duì)開發(fā)人員而言,面對(duì)的是對(duì)象,而不是關(guān)系數(shù)據(jù),而對(duì)于具體的數(shù)據(jù)操作,iBatis要求開發(fā)者編寫具體的SQL語(yǔ)句。
[0003]目前大多數(shù)軟件開發(fā)都采用面向?qū)ο蠹夹g(shù),而數(shù)據(jù)仍然保存在關(guān)系數(shù)據(jù)庫(kù)中。由于對(duì)象模型和關(guān)系模型存在阻抗不匹配,因此實(shí)現(xiàn)對(duì)象與關(guān)系的映射已成為軟件開發(fā)領(lǐng)域的關(guān)鍵問(wèn)題。iBatis采用ORM技術(shù)、XML技術(shù)和軟件分層的設(shè)計(jì)思想,實(shí)現(xiàn)了一個(gè)有效的數(shù)據(jù)庫(kù)訪問(wèn)中間件。選擇iBatis進(jìn)行數(shù)據(jù)持久化,具有可開源、松耦合等特點(diǎn),從而使系統(tǒng)的數(shù)據(jù)訪問(wèn)與應(yīng)用邏輯分離開來(lái)。該技術(shù)的采用滿足企業(yè)的開發(fā)需求,使系統(tǒng)具備可擴(kuò)展性、可移植性、安全性、易維護(hù)性等。iBatis擴(kuò)展了持久層的靈活性,其SQL Maps組件允許開發(fā)人員在不使用JDBC API以及不耦合Java代碼與SQL句的情況下實(shí)現(xiàn)對(duì)象與關(guān)系型數(shù)據(jù)庫(kù)的讀寫操作。
[0004]但是目前使用的基于iBatis的ORM機(jī)制,雖然擴(kuò)展了持久層的靈活性,但在XML配置文件中,由于沒有綜合考慮由于關(guān)系數(shù)據(jù)庫(kù)字段的改變以及數(shù)據(jù)庫(kù)的遷移給程序員帶來(lái)的修改xml文件的巨大工作量,里面的SQL語(yǔ)句中程序員仍然面對(duì)的是關(guān)系數(shù)據(jù)庫(kù)的字段,只是將原本放入存儲(chǔ)過(guò)程中的SQL語(yǔ)句抽取至XML文件,仍然處在以數(shù)據(jù)為中心的位置,面向?qū)ο蟮乃枷脒€不夠徹底。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明實(shí)施例提供了一種基于iBatis的對(duì)象關(guān)系映射方法及系統(tǒng)。
[0006]本發(fā)明的一個(gè)目的是提供一種基于iBatis的對(duì)象關(guān)系映射方法,所述方法包括:
[0007]配置數(shù)據(jù)庫(kù)的配置文件的表名與對(duì)象名的第一映射關(guān)系、所述數(shù)據(jù)庫(kù)的配置文件的字段與所述對(duì)象屬性的第二映射關(guān)系、及配置操作標(biāo)識(shí)符與所述數(shù)據(jù)庫(kù)的SQL的第三映身寸關(guān)系;
[0008]根據(jù)所述第一映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的表名替換成所述對(duì)象名;
[0009]根據(jù)所述第二映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的字段替換成所述對(duì)象屬性;
[0010]被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù);
[0011]被調(diào)用程序根據(jù)操作對(duì)象參數(shù)確定操作對(duì)象名稱;
[0012]被調(diào)用程序根據(jù)操作對(duì)象名稱和第一映射關(guān)系獲取對(duì)應(yīng)的所述數(shù)據(jù)庫(kù)的配置文件;
[0013]被調(diào)用程序根據(jù)所述操作標(biāo)識(shí)符和第三映射關(guān)系獲取對(duì)應(yīng)的SQL ;
[0014]被調(diào)用程序?qū)⑺鯯QL的參數(shù)值替換成接收到操作對(duì)象參數(shù);
[0015]被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理。
[0016]作為一個(gè)優(yōu)選的方案,在所述被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理之后,所述方法還包括:
[0017]將替換后SQL執(zhí)行結(jié)果反饋到所述調(diào)用程序。
[0018]作為一個(gè)優(yōu)選的方案,在所述被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù)之前,所述方法還包括:
[0019]系統(tǒng)執(zhí)行數(shù)據(jù)庫(kù)操作,其中,所述調(diào)用程序由所述系統(tǒng)發(fā)出,所述被調(diào)用程序位于所述數(shù)據(jù)庫(kù)。
[0020]作為一個(gè)優(yōu)選的方案,所述操作包括選擇操作、刪除操作或者更新操作。
[0021]作為一個(gè)優(yōu)選的方案,所述配置文件為XML配置文件。
[0022]本發(fā)明的另一個(gè)目的是提供一種基于iBatis的對(duì)象關(guān)系映射系統(tǒng),所述系統(tǒng)包括:
[0023]第一配置單元,用于配置數(shù)據(jù)庫(kù)的配置文件的表名與對(duì)象名的第一映射關(guān)系、所述數(shù)據(jù)庫(kù)的配置文件的字段與所述對(duì)象屬性的第二映射關(guān)系、及配置操作標(biāo)識(shí)符與所述數(shù)據(jù)庫(kù)的SQL的第二映射關(guān)系;
[0024]第一替換單元,用于根據(jù)所述第一映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的表名替換成所述對(duì)象名;
[0025]第二替換單元,用于根據(jù)所述第二映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的字段替換成所述對(duì)象屬性;
[0026]第一發(fā)送單元,用于被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù);
[0027]第一確定單元,用于被調(diào)用程序根據(jù)操作對(duì)象參數(shù)確定操作對(duì)象名稱;
[0028]第一獲取單元,用于被調(diào)用程序根據(jù)操作對(duì)象名稱和第一映射關(guān)系獲取對(duì)應(yīng)的所述數(shù)據(jù)庫(kù)的配置文件;
[0029]第二獲取單元,用于被調(diào)用程序根據(jù)所述操作標(biāo)識(shí)符和第三映射關(guān)系獲取對(duì)應(yīng)的SQL ;
[0030]第三替換單元,用于被調(diào)用程序?qū)⑺鯯QL的參數(shù)值替換成接收到操作對(duì)象參數(shù);
[0031]第四替換單元,用于被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理。
[0032]作為一個(gè)優(yōu)選的方案,所述系統(tǒng)還包括:
[0033]第一反饋單元,用于將替換后SQL執(zhí)行結(jié)果反饋到所述調(diào)用程序。
[0034]作為一個(gè)優(yōu)選的方案,所述系統(tǒng)還包括:
[0035]第一啟動(dòng)單元,用于系統(tǒng)執(zhí)行數(shù)據(jù)庫(kù)操作,所述調(diào)用程序由所述系統(tǒng)發(fā)出,所述被調(diào)用程序位于所述數(shù)據(jù)庫(kù)。
[0036]作為一個(gè)優(yōu)選的方案,所述操作包括選擇操作、刪除操作或者更新操作。
[0037]作為一個(gè)優(yōu)選的方案,所述配置文件為XML配置文件。
[0038]從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
[0039]本發(fā)明提供的一種基于iBatis的對(duì)象關(guān)系映射方法及系統(tǒng),由于引入數(shù)據(jù)庫(kù)表名與對(duì)象名,字段與屬性的映射關(guān)系的Xml配置文件來(lái)表達(dá)它們之間的關(guān)系,屏蔽了對(duì)底層數(shù)據(jù)庫(kù)的信息,達(dá)到只針對(duì)對(duì)象本身的操作,從而可以動(dòng)態(tài)適應(yīng)數(shù)據(jù)庫(kù)的變更,如表名、字段的變更,因?yàn)榇藭r(shí)只需要修改相應(yīng)的對(duì)象/表、屬性/字段的映射文件即可,使得對(duì)數(shù)據(jù)庫(kù)的操作面向?qū)ο?,?duì)數(shù)據(jù)庫(kù)的操作簡(jiǎn)單,流程簡(jiǎn)化,提高程序員的工作效率,降低了工作負(fù)擔(dān)。
【專利附圖】
【附圖說(shuō)明】
[0040]圖1是本發(fā)明基于iBatis的對(duì)象關(guān)系映射方法一種實(shí)施例的流程圖;
[0041]圖2是本發(fā)明基于iBatis的對(duì)象關(guān)系映射方法另一種實(shí)施例的流程圖;
[0042]圖3是本發(fā)明基于iBatis的對(duì)象關(guān)系映射系統(tǒng)一種實(shí)施例的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0043]本發(fā)明實(shí)施例提供了一種基于iBatis的對(duì)象關(guān)系映射方法及系統(tǒng),用于由于引入數(shù)據(jù)庫(kù)表名與對(duì)象名,字段與屬性的映射關(guān)系的Xml配置文件來(lái)表達(dá)它們之間的關(guān)系,屏蔽了對(duì)底層數(shù)據(jù)庫(kù)的信息,達(dá)到只針對(duì)對(duì)象本身的操作,從而可以動(dòng)態(tài)適應(yīng)數(shù)據(jù)庫(kù)的變更,如表名、字段的變更,因?yàn)榇藭r(shí)只需要修改相應(yīng)的對(duì)象/表、屬性/字段的映射文件即可。
[0044]為了使本【技術(shù)領(lǐng)域】的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
[0045]本發(fā)明的說(shuō)明書和權(quán)利要求書及上述附圖中的術(shù)語(yǔ)“第一”、“第二”、“第三…第四”等(如果存在)是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的實(shí)施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
[0046]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0047]結(jié)合圖1所示,本發(fā)明提供的基于iBatis的對(duì)象關(guān)系映射方法的一種實(shí)施例,所述方法包括:
[0048]S101、配置數(shù)據(jù)庫(kù)的配置文件的表名與對(duì)象名的第一映射關(guān)系、所述數(shù)據(jù)庫(kù)的配置文件的字段與所述對(duì)象屬性的第二映射關(guān)系、及配置操作標(biāo)識(shí)符與所述數(shù)據(jù)庫(kù)的SQL的第三映射關(guān)系。
[0049]本發(fā)明中配置第一映射關(guān)系、第二映射關(guān)系及第三映射關(guān)系可以預(yù)先配置,在系統(tǒng)執(zhí)行數(shù)據(jù)庫(kù)操作時(shí)直接使用,也可以在系統(tǒng)執(zhí)行數(shù)據(jù)庫(kù)操作時(shí)進(jìn)行配置,滿足在使用前配置好三種映射關(guān)系即可,具體不做限定。
[0050]需要說(shuō)明的是,對(duì)于第一映射關(guān)系、第二映射關(guān)系及第三映射關(guān)系的配置過(guò)程,采用通常的做法,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)了解,在此不進(jìn)行贅述。
[0051]S102、根據(jù)所述第一映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的表名替換成所述對(duì)象名。
[0052]這里提到的配置文件為在執(zhí)行數(shù)據(jù)庫(kù)操作時(shí),對(duì)象所對(duì)應(yīng)的數(shù)據(jù)庫(kù)文件,配置文件作為對(duì)象操作的具體目標(biāo),最終結(jié)果以對(duì)配置文件的處理作為調(diào)用程序的完成,配置文件的表名可以為配置文件在數(shù)據(jù)庫(kù)中保存時(shí)定義的名稱,例如,配置文件為賬目明細(xì)時(shí),配置文件的表名可以為“賬目”,配置文件的名稱是程序員在構(gòu)建數(shù)據(jù)庫(kù)時(shí)自行定義,不進(jìn)行限定,在進(jìn)行調(diào)用時(shí),指明配置文件的表名即可。
[0053]S103、根據(jù)所述第二映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的字段替換成所述對(duì)象屬性。
[0054]對(duì)象屬性可以為對(duì)數(shù)據(jù)庫(kù)操作的具體內(nèi)容,例如,將“賬目”中“結(jié)算時(shí)間”進(jìn)行替換,結(jié)算時(shí)間可以作為對(duì)象屬性,對(duì)象屬性的具體內(nèi)容可以根據(jù)實(shí)際需要進(jìn)行確定,具體不做限定。
[0055]S104、被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù)。
[0056]在執(zhí)行數(shù)據(jù)庫(kù)操作時(shí),調(diào)用程序發(fā)送操作標(biāo)示符和操作對(duì)象參數(shù),操作標(biāo)識(shí)符可以為便于被調(diào)用程序選擇對(duì)應(yīng)的SQL語(yǔ)句,操作標(biāo)識(shí)符與SQL語(yǔ)句之間具有對(duì)應(yīng)關(guān)系,可以根據(jù)操作標(biāo)識(shí)符的不同選擇不同的SQL語(yǔ)句去執(zhí)行不同的操作,這些操作可以包括對(duì)配置文件中字段的刪除、選擇或者更新等操作,操作對(duì)象參數(shù)可以為對(duì)配置文件中的數(shù)據(jù)進(jìn)行修改,例如,在操作對(duì)象參數(shù)中設(shè)置替換后的參數(shù),進(jìn)行參數(shù)更新操作,則SQL語(yǔ)句將替換的參數(shù)送入數(shù)據(jù)庫(kù)的配置文件中更新。
[0057]S105、被調(diào)用程序根據(jù)操作對(duì)象參數(shù)確定操作對(duì)象名稱。
[0058]操作對(duì)象參數(shù)中可以指明了操作對(duì)象,也可以設(shè)置識(shí)別碼,可以通過(guò)操作對(duì)象參數(shù)確定操作對(duì)象的名稱,也可以有其他確定操作對(duì)象名稱,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)了解,不進(jìn)行列舉。
[0059]S106、被調(diào)用程序根據(jù)操作對(duì)象名稱和第一映射關(guān)系獲取對(duì)應(yīng)的所述數(shù)據(jù)庫(kù)的配置文件。
[0060]S107、被調(diào)用程序根據(jù)所述操作標(biāo)識(shí)符和第三映射關(guān)系獲取對(duì)應(yīng)的SQL。
[0061]S108、被調(diào)用程序?qū)⑺鯯QL的參數(shù)值替換成接收到操作對(duì)象參數(shù)。
[0062]S109、被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理。
[0063]引入數(shù)據(jù)庫(kù)表名與對(duì)象名,字段與屬性的映射關(guān)系的Xml配置文件來(lái)表達(dá)它們之間的關(guān)系,屏蔽了對(duì)底層數(shù)據(jù)庫(kù)的信息,達(dá)到只針對(duì)對(duì)象本身的操作,從而可以動(dòng)態(tài)適應(yīng)數(shù)據(jù)庫(kù)的變更,如表名、字段的變更,因?yàn)榇藭r(shí)只需要修改相應(yīng)的對(duì)象/表、屬性/字段的映射文件即可。
[0064]本發(fā)明提供的一種基于iBatis的對(duì)象關(guān)系映射方法,由于引入數(shù)據(jù)庫(kù)表名與對(duì)象名,字段與屬性的映射關(guān)系的Xml配置文件來(lái)表達(dá)它們之間的關(guān)系,屏蔽了對(duì)底層數(shù)據(jù)庫(kù)的信息,達(dá)到只針對(duì)對(duì)象本身的操作,從而可以動(dòng)態(tài)適應(yīng)數(shù)據(jù)庫(kù)的變更,如表名、字段的變更,因?yàn)榇藭r(shí)只需要修改相應(yīng)的對(duì)象/表、屬性/字段的映射文件即可,使得對(duì)數(shù)據(jù)庫(kù)的操作面向?qū)ο螅瑢?duì)數(shù)據(jù)庫(kù)的操作簡(jiǎn)單,流程簡(jiǎn)化,提高程序員的工作效率,降低了工作負(fù)擔(dān)。
[0065]需要說(shuō)明的是,對(duì)象關(guān)系映射(英語(yǔ):0bject Relat1nal Mapping,簡(jiǎn)稱0RM,或0/RM,或0/R mapping),是一種程序技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。
[0066]面向?qū)ο笫菑能浖こ袒驹瓌t(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來(lái)的,而關(guān)系數(shù)據(jù)庫(kù)則是從數(shù)學(xué)理論發(fā)展而來(lái)的,兩套理論存在顯著的區(qū)別。為了解決這個(gè)不匹配的現(xiàn)象,對(duì)象關(guān)系映射技術(shù)應(yīng)運(yùn)而生。
[0067]對(duì)象關(guān)系映射(Object-Relat1nal Mapping)提供了概念性的、易于理解的模型化數(shù)據(jù)的方法。ORM方法論基于三個(gè)核心原則:簡(jiǎn)單:以最基本的形式建模數(shù)據(jù)。傳達(dá)性:數(shù)據(jù)庫(kù)結(jié)構(gòu)被任何人都能理解的語(yǔ)言文檔化。精確性:基于數(shù)據(jù)模型創(chuàng)建正確標(biāo)準(zhǔn)化了的結(jié)構(gòu)。典型地,建模者通過(guò)收集來(lái)自那些熟悉應(yīng)用程序但不熟練的數(shù)據(jù)建模者的人的信息開發(fā)信息模型。建模者必須能夠用非技術(shù)企業(yè)專家可以理解的術(shù)語(yǔ)在概念層次上與數(shù)據(jù)結(jié)構(gòu)進(jìn)行通訊。建模者也必須能以簡(jiǎn)單的單元分析信息,對(duì)樣本數(shù)據(jù)進(jìn)行處理。簡(jiǎn)單的說(shuō):0RM相當(dāng)于中繼數(shù)據(jù)。具體到產(chǎn)品上,例如AD0.NET Entity Framework。DLINQ中實(shí)體類的屬性[Table]就算是一種中繼數(shù)據(jù)。
[0068]本文中提到的ibatis,實(shí)際上可以理解為“半自動(dòng)化”的ibatis,這里的“半自動(dòng)化”,是相對(duì)Hibernate等提供了全面的數(shù)據(jù)庫(kù)封裝機(jī)制的“全自動(dòng)化”,ORM實(shí)現(xiàn)而言,“全自動(dòng)”0RM實(shí)現(xiàn)了 P0J0和數(shù)據(jù)庫(kù)表之間的映射,以及SQL的自動(dòng)生成和執(zhí)行。而ibatis的著力點(diǎn),則在于P0J0與SQL之間的映射關(guān)系。也就是說(shuō),ibatis并不會(huì)為程序員在運(yùn)行期自動(dòng)生成SQL執(zhí)行。具體的SQL需要程序員編寫,然后通過(guò)映射配置文件,將SQL所需的參數(shù),以及返回的結(jié)果字段映射到指定P0J0。
[0069]P0J0(Plain Ordinary Java Object)簡(jiǎn)單的 Java對(duì)象。P0J0實(shí)質(zhì)上可以理解為簡(jiǎn)單的實(shí)體類,顧名思義P0J0類的作用是方便程序員使用數(shù)據(jù)庫(kù)中的數(shù)據(jù)表,對(duì)于廣大的程序員,可以很方便的將P0J0類當(dāng)做對(duì)象來(lái)進(jìn)行使用,當(dāng)然也是可以方便的調(diào)用其get,set方法。P0J0類也給我們?cè)趕truts框架中的配置帶來(lái)了很大的方便。
[0070]JDBC (Java Data Base Connectivity, java 數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行 SQL 語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它由一組用Java語(yǔ)言編寫的類和接口組成。JDBC為工具/數(shù)據(jù)庫(kù)開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開發(fā)人員能夠用純Java API編寫數(shù)據(jù)庫(kù)應(yīng)用程序。
[0071]結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language)簡(jiǎn)稱SQL,結(jié)構(gòu)化查詢語(yǔ)言是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng);同時(shí)也是數(shù)據(jù)庫(kù)腳本文件的擴(kuò)展名。結(jié)構(gòu)化查詢語(yǔ)言是高級(jí)的非過(guò)程化編程語(yǔ)言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫(kù)系統(tǒng),可以使用相同的結(jié)構(gòu)化查詢語(yǔ)言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢語(yǔ)言語(yǔ)句可以嵌套,這使它具有極大的靈活性和強(qiáng)大的功能。
[0072]本發(fā)明對(duì)基于iBatis的ORM進(jìn)行了改進(jìn),充分利用現(xiàn)有ORM的設(shè)計(jì)思想,并融入ORM思想于其中。首先將原有Xml配置文件中的數(shù)據(jù)庫(kù)字段替換成對(duì)象中的屬性,表名替換成對(duì)象名;其次引入數(shù)據(jù)庫(kù)表名與對(duì)象名、字段與屬性的映射關(guān)系的Xml配置文件來(lái)表達(dá)它們之間的關(guān)系,以屏蔽對(duì)底層數(shù)據(jù)庫(kù)的信息,達(dá)到只針對(duì)對(duì)象本身的操作。即在執(zhí)行的數(shù)據(jù)庫(kù)操作之前,須插入一步對(duì)象/關(guān)系、字段/屬性映射的過(guò)程。在執(zhí)行的數(shù)據(jù)庫(kù)操作之前,插入一步對(duì)象/關(guān)系、字段/屬性映射的過(guò)程。
[0073]為適應(yīng)該龐大而且繁雜的系統(tǒng),需要一個(gè)很好的數(shù)據(jù)訪問(wèn)機(jī)制來(lái)適應(yīng)這種變化。首先,它能適應(yīng)數(shù)據(jù)庫(kù)的移植,當(dāng)從一個(gè)關(guān)系數(shù)據(jù)庫(kù)遷移到另一個(gè)關(guān)系數(shù)據(jù)庫(kù)時(shí),不需要修改原有的程序代碼。其次,能適應(yīng)數(shù)據(jù)庫(kù)表的變更,當(dāng)其中某些表結(jié)構(gòu)或字段名變更后,作出相應(yīng)簡(jiǎn)單的處理即能解決問(wèn)題。第三,能支持多種查詢方式,包括嵌套查詢、分組查詢、連接查詢(內(nèi)連接、外連接)等。
[0074]SQL語(yǔ)言基本上獨(dú)立于數(shù)據(jù)庫(kù)本身、使用的機(jī)器、網(wǎng)絡(luò)、操作系統(tǒng),基于SQL的DBMS產(chǎn)品可以運(yùn)行在從個(gè)人機(jī)、工作站到基于局域網(wǎng)、小型機(jī)和大型機(jī)的各種計(jì)算機(jī)系統(tǒng)上,具有良好的可移植性??梢钥闯鰳?biāo)準(zhǔn)化的工作是很有意義的。早在1987年就有些有識(shí)之士預(yù)測(cè)SQL的標(biāo)準(zhǔn)化是“一場(chǎng)革命”,是“關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的轉(zhuǎn)折點(diǎn)”。數(shù)據(jù)庫(kù)和各種產(chǎn)品都使用SQL作為共同的數(shù)據(jù)存取語(yǔ)言和標(biāo)準(zhǔn)的接口,使不同數(shù)據(jù)庫(kù)系統(tǒng)之間的互操作有了共同的基礎(chǔ),進(jìn)而實(shí)現(xiàn)異構(gòu)機(jī)、各種操作環(huán)境的共享與移植。
[0075]結(jié)合圖2所示,上面針對(duì)一種基于iBatis的對(duì)象關(guān)系映射方法進(jìn)行了介紹,本文針對(duì)一種基于iBatis的對(duì)象關(guān)系映射方法提供另一種實(shí)施例,下面進(jìn)行具體介紹:
[0076]S201、系統(tǒng)執(zhí)行數(shù)據(jù)庫(kù)操作,其中,所述調(diào)用程序由所述系統(tǒng)發(fā)出,所述被調(diào)用程序位于所述數(shù)據(jù)庫(kù)。
[0077]用于啟動(dòng)調(diào)用程序的操作,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)操作的開始。
[0078]S202、配置數(shù)據(jù)庫(kù)的配置文件的表名與對(duì)象名的第一映射關(guān)系、所述數(shù)據(jù)庫(kù)的配置文件的字段與所述對(duì)象屬性的第二映射關(guān)系、及配置操作標(biāo)識(shí)符與所述數(shù)據(jù)庫(kù)的SQL的第三映射關(guān)系;
[0079]S203、根據(jù)所述第一映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的表名替換成所述對(duì)象名;
[0080]S204、根據(jù)所述第二映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的字段替換成所述對(duì)象屬性;
[0081]S205、被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù);
[0082]S206、被調(diào)用程序根據(jù)操作對(duì)象參數(shù)確定操作對(duì)象名稱;
[0083]S207、被調(diào)用程序根據(jù)操作對(duì)象名稱和第一映射關(guān)系獲取對(duì)應(yīng)的所述數(shù)據(jù)庫(kù)的配置文件;
[0084]S208、被調(diào)用程序根據(jù)所述操作標(biāo)識(shí)符和第三映射關(guān)系獲取對(duì)應(yīng)的SQL ;
[0085]S209、被調(diào)用程序?qū)⑺鯯QL的參數(shù)值替換成接收到操作對(duì)象參數(shù);
[0086]S210、被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理。
[0087]S211、將替換后SQL執(zhí)行結(jié)果反饋到所述調(diào)用程序。
[0088]作為一種優(yōu)選的方案,所述操作包括選擇操作、刪除操作或者更新操作。
[0089]當(dāng)然,對(duì)數(shù)據(jù)庫(kù)的操作還可以有其他操作,例如增加操作,對(duì)此不進(jìn)行限定。
[0090]作為一種優(yōu)選的方案,所述配置文件為XML配置文件,XML格式是W3C的標(biāo)準(zhǔn),各種平臺(tái)通用,可移植性好,XML提供了一種樹形層次結(jié)構(gòu),可以很方便的定位某一功能塊,從寫的角度看,幾乎所有的應(yīng)用程序都能處理XML文件,并且通過(guò)DOM提供的方法可以很快捷的對(duì)XML文件進(jìn)行操作,從讀的角度看,XML文件提供了一種簡(jiǎn)潔的自解釋的標(biāo)記方法,就能理解XML格式的配置文件的意義,另外,XML高度可擴(kuò)展。當(dāng)然也可以采用其他文件格式,例如Reg格式或者INI格式等,對(duì)此不進(jìn)行限定。
[0091]本發(fā)明提供的一種基于iBatis的對(duì)象關(guān)系映射方法,由于引入數(shù)據(jù)庫(kù)表名與對(duì)象名,字段與屬性的映射關(guān)系的Xml配置文件來(lái)表達(dá)它們之間的關(guān)系,屏蔽了對(duì)底層數(shù)據(jù)庫(kù)的信息,達(dá)到只針對(duì)對(duì)象本身的操作,從而可以動(dòng)態(tài)適應(yīng)數(shù)據(jù)庫(kù)的變更,如表名、字段的變更,因?yàn)榇藭r(shí)只需要修改相應(yīng)的對(duì)象/表、屬性/字段的映射文件即可,使得對(duì)數(shù)據(jù)庫(kù)的操作面向?qū)ο?,?duì)數(shù)據(jù)庫(kù)的操作簡(jiǎn)單,流程簡(jiǎn)化,提高程序員的工作效率,降低了工作負(fù)擔(dān)。
[0092]上文中針對(duì)基于iBatis的對(duì)象關(guān)系映射方法進(jìn)行了具體介紹,本文中還針對(duì)基于iBatis的對(duì)象關(guān)系映射方法對(duì)應(yīng)提供了一種基于iBatis的對(duì)象關(guān)系映射系統(tǒng),下面針對(duì)基于iBatis的對(duì)象關(guān)系映射系統(tǒng)進(jìn)行介紹。
[0093]結(jié)合圖3所示,本發(fā)明提供基于iBatis的對(duì)象關(guān)系映射系統(tǒng)的一種實(shí)施例,所述系統(tǒng)包括:
[0094]第一配置單元301,用于配置數(shù)據(jù)庫(kù)的配置文件的表名與對(duì)象名的第一映射關(guān)系、所述數(shù)據(jù)庫(kù)的配置文件的字段與所述對(duì)象屬性的第二映射關(guān)系、及配置操作標(biāo)識(shí)符與所述數(shù)據(jù)庫(kù)的SQL的第三映射關(guān)系;
[0095]第一替換單元302,用于根據(jù)所述第一映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的表名替換成所述對(duì)象名;
[0096]第二替換單元303,用于根據(jù)所述第二映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的字段替換成所述對(duì)象屬性;
[0097]第一發(fā)送單元304,用于被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù);
[0098]第一確定單元305,用于被調(diào)用程序根據(jù)操作對(duì)象參數(shù)確定操作對(duì)象名稱;
[0099]第一獲取單元306,用于被調(diào)用程序根據(jù)操作對(duì)象名稱和第一映射關(guān)系獲取對(duì)應(yīng)的所述數(shù)據(jù)庫(kù)的配置文件;
[0100]第二獲取單元307,用于被調(diào)用程序根據(jù)所述操作標(biāo)識(shí)符和第三映射關(guān)系獲取對(duì)應(yīng)的SQL ;
[0101]第三替換單元308,用于被調(diào)用程序?qū)⑺鯯QL的參數(shù)值替換成接收到操作對(duì)象參數(shù);
[0102]第四替換單元309,用于被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理。
[0103]所述系統(tǒng)還包括:
[0104]第一反饋單元310,用于將替換后SQL執(zhí)行結(jié)果反饋到所述調(diào)用程序。
[0105]所述系統(tǒng)還包括:
[0106]第一啟動(dòng)單元311,用于系統(tǒng)執(zhí)行數(shù)據(jù)庫(kù)操作,所述調(diào)用程序由所述系統(tǒng)發(fā)出,所述被調(diào)用程序位于所述數(shù)據(jù)庫(kù)。
[0107]所述操作包括選擇操作、刪除操作或者更新操作。
[0108]所述配置文件為XML配置文件。
[0109]XML格式是W3C (中文:萬(wàn)維網(wǎng)聯(lián)盟英文:World Wide Web Consortium)的標(biāo)準(zhǔn),各種平臺(tái)通用,可移植性好,XML提供了一種樹形層次結(jié)構(gòu),可以很方便的定位某一功能塊,從寫的角度看,幾乎所有的應(yīng)用程序都能處理XML文件,并且通過(guò)DOM提供的方法可以很快捷的對(duì)XML文件進(jìn)行操作,從讀的角度看,XML文件提供了一種簡(jiǎn)潔的自解釋的標(biāo)記方法,就能理解XML格式的配置文件的意義,另外,XML高度可擴(kuò)展。當(dāng)然也可以采用其他文件格式,例如Reg格式或者INI格式等,對(duì)此不進(jìn)行限定。
[0110]本發(fā)明提供的一種基于iBatis的對(duì)象關(guān)系映射系統(tǒng),由于引入數(shù)據(jù)庫(kù)表名與對(duì)象名,字段與屬性的映射關(guān)系的Xml配置文件來(lái)表達(dá)它們之間的關(guān)系,屏蔽了對(duì)底層數(shù)據(jù)庫(kù)的信息,達(dá)到只針對(duì)對(duì)象本身的操作,從而可以動(dòng)態(tài)適應(yīng)數(shù)據(jù)庫(kù)的變更,如表名、字段的變更,因?yàn)榇藭r(shí)只需要修改相應(yīng)的對(duì)象/表、屬性/字段的映射文件即可,使得對(duì)數(shù)據(jù)庫(kù)的操作面向?qū)ο螅瑢?duì)數(shù)據(jù)庫(kù)的操作簡(jiǎn)單,流程簡(jiǎn)化,提高程序員的工作效率,降低了工作負(fù)擔(dān)。
[0111]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
[0112]在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0113]所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
[0114]另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0115]本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:只讀存儲(chǔ)器(ROM,Read Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,RandomAccess Memory)、磁盤或光盤等。
[0116]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。
[0117]以上對(duì)本發(fā)明所提供的一種一種基于iBatis的對(duì)象關(guān)系映射方法及系統(tǒng)進(jìn)行了詳細(xì)介紹,對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明實(shí)施例的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
【權(quán)利要求】
1.一種基于iBatis的對(duì)象關(guān)系映射方法,其特征在于,所述方法包括: 配置數(shù)據(jù)庫(kù)的配置文件的表名與對(duì)象名的第一映射關(guān)系、所述數(shù)據(jù)庫(kù)的配置文件的字段與所述對(duì)象屬性的第二映射關(guān)系、及配置操作標(biāo)識(shí)符與所述數(shù)據(jù)庫(kù)的SQL的第三映射關(guān)系; 根據(jù)所述第一映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的表名替換成所述對(duì)象名; 根據(jù)所述第二映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的字段替換成所述對(duì)象屬性; 被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù); 被調(diào)用程序根據(jù)操作對(duì)象參數(shù)確定操作對(duì)象名稱; 被調(diào)用程序根據(jù)操作對(duì)象名稱和第一映射關(guān)系獲取對(duì)應(yīng)的所述數(shù)據(jù)庫(kù)的配置文件; 被調(diào)用程序根據(jù)所述操作標(biāo)識(shí)符和第三映射關(guān)系獲取對(duì)應(yīng)的SQL ; 被調(diào)用程序?qū)⑺鯯QL的參數(shù)值替換成接收到操作對(duì)象參數(shù); 被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理之后,所述方法還包括: 將替換后SQL執(zhí)行結(jié)果反饋到所述調(diào)用程序。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù)之前,所述方法還包括: 系統(tǒng)執(zhí)行數(shù)據(jù)庫(kù)操作,其中,所述調(diào)用程序由所述系統(tǒng)發(fā)出,所述被調(diào)用程序位于所述數(shù)據(jù)庫(kù)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述操作包括選擇操作、刪除操作或者更新操作。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述配置文件為XML配置文件。
6.一種基于iBatis的對(duì)象關(guān)系映射系統(tǒng),其特征在于,所述系統(tǒng)包括: 第一配置單元,用于配置數(shù)據(jù)庫(kù)的配置文件的表名與對(duì)象名的第一映射關(guān)系、所述數(shù)據(jù)庫(kù)的配置文件的字段與所述對(duì)象屬性的第二映射關(guān)系、及配置操作標(biāo)識(shí)符與所述數(shù)據(jù)庫(kù)的SQL的第三映射關(guān)系; 第一替換單元,用于根據(jù)所述第一映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的表名替換成所述對(duì)象名; 第二替換單元,用于根據(jù)所述第二映射關(guān)系將所述數(shù)據(jù)庫(kù)的配置文件的字段替換成所述對(duì)象屬性; 第一發(fā)送單元,用于被調(diào)用程序接收調(diào)用程序發(fā)送所述操作標(biāo)識(shí)符和操作對(duì)象參數(shù); 第一確定單元,用于被調(diào)用程序根據(jù)操作對(duì)象參數(shù)確定操作對(duì)象名稱; 第一獲取單元,用于被調(diào)用程序根據(jù)操作對(duì)象名稱和第一映射關(guān)系獲取對(duì)應(yīng)的所述數(shù)據(jù)庫(kù)的配置文件; 第二獲取單元,用于被調(diào)用程序根據(jù)所述操作標(biāo)識(shí)符和第三映射關(guān)系獲取對(duì)應(yīng)的SQL ; 第三替換單元,用于被調(diào)用程序?qū)⑺鯯QL的參數(shù)值替換成接收到操作對(duì)象參數(shù); 第四替換單元,用于被調(diào)用程序在所述數(shù)據(jù)庫(kù)執(zhí)行替換后的SQL,以使得替換后的SQL對(duì)所述配置文件中的對(duì)象屬性進(jìn)行處理。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 第一反饋單元,用于將替換后SQL執(zhí)行結(jié)果反饋到所述調(diào)用程序。
8.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 第一啟動(dòng)單元,用于系統(tǒng)執(zhí)行數(shù)據(jù)庫(kù)操作,所述調(diào)用程序由所述系統(tǒng)發(fā)出,所述被調(diào)用程序位于所述數(shù)據(jù)庫(kù)。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述操作包括選擇操作、刪除操作或者更新操作。
10.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述配置文件為XML配置文件。
【文檔編號(hào)】G06F17/30GK104317964SQ201410648322
【公開日】2015年1月28日 申請(qǐng)日期:2014年11月14日 優(yōu)先權(quán)日:2014年11月14日
【發(fā)明者】包辰明, 鄧龍騰, 王偉, 陳林, 胡立強(qiáng), 廖繼逢, 趙金鑫, 陶然, 劉穎蓮, 劉威 申請(qǐng)人:中國(guó)建設(shè)銀行股份有限公司