對(duì)象關(guān)系映射方法、裝置及處理器的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種對(duì)象關(guān)系映射方法、裝置及處理器。
【背景技術(shù)】
[0002] 在軟件工程中,經(jīng)常需要將數(shù)據(jù)存儲(chǔ)到關(guān)系數(shù)據(jù)庫(kù)中,以便進(jìn)行應(yīng)用訪問(wèn)。而隨著 信息系統(tǒng)的發(fā)展,面向?qū)ο蟮拈_(kāi)發(fā)思想得到廣泛運(yùn)用,從而帶來(lái)了關(guān)系型數(shù)據(jù)與對(duì)象數(shù)據(jù) 的轉(zhuǎn)換需求問(wèn)題。
[0003] 關(guān)系型數(shù)據(jù)與對(duì)象數(shù)據(jù)的轉(zhuǎn)換,通常稱(chēng)為對(duì)象關(guān)系映射(ObjectRelational Mapping,0RM)。為了實(shí)現(xiàn)對(duì)象關(guān)系的映射,現(xiàn)有技術(shù)中,采用了兩種方式。其中一種,是在 面向?qū)ο蟮某绦虼a中,直接嵌入數(shù)據(jù)庫(kù)語(yǔ)句,從而以硬編碼的方式,實(shí)現(xiàn)數(shù)據(jù)庫(kù)返回的結(jié) 果與對(duì)象數(shù)據(jù)的映射;第二種方式,借助第三方框架,預(yù)先建立對(duì)象與關(guān)系數(shù)據(jù)間完整的映 射關(guān)系,根據(jù)所述映射關(guān)系實(shí)現(xiàn)映射。
[0004] 但是,發(fā)明人在本申請(qǐng)的研究過(guò)程中發(fā)現(xiàn),采用現(xiàn)有技術(shù)進(jìn)行0RM映射時(shí),還存在 一定的問(wèn)題,例如,采用第一種方式進(jìn)行0RM映射時(shí),只能應(yīng)用于簡(jiǎn)單的數(shù)據(jù)模型中,在數(shù) 據(jù)模型規(guī)模較大時(shí),會(huì)導(dǎo)致編碼混亂,難以維護(hù);采用第二種方式進(jìn)行0RM映射時(shí),針對(duì)每 次的復(fù)雜查詢需求,都需要相應(yīng)的設(shè)置對(duì)象和關(guān)系數(shù)據(jù)的映射關(guān)系,靈活性較低,復(fù)用程度 差。
【發(fā)明內(nèi)容】
[0005] 有鑒于此,本發(fā)明的目的在于提供一種對(duì)象關(guān)系映射方法、裝置及處理器,用于解 決現(xiàn)有技術(shù)在進(jìn)行對(duì)象關(guān)系映射時(shí),第一種方法中存在的編碼混亂,難以維護(hù),第二種方法 中存在的靈活性較低,復(fù)用程度差的問(wèn)題,具體實(shí)施方案如下:
[0006] -種對(duì)象關(guān)系映射方法,包括:
[0007] 根據(jù)關(guān)系數(shù)據(jù)模型中的數(shù)據(jù)庫(kù)表的連接關(guān)系,以及待查詢的業(yè)務(wù)主題對(duì)應(yīng)的業(yè)務(wù) 模型中包含的數(shù)據(jù)庫(kù)表,構(gòu)建所述待查詢的業(yè)務(wù)主題對(duì)應(yīng)的數(shù)據(jù)關(guān)聯(lián)模型,其中,所述數(shù)據(jù) 關(guān)聯(lián)模型的節(jié)點(diǎn)為所述業(yè)務(wù)模型中定義的數(shù)據(jù)庫(kù)表的別名;
[0008] 當(dāng)需要查詢數(shù)據(jù)庫(kù)表中的數(shù)據(jù)時(shí),接收數(shù)據(jù)庫(kù)操作語(yǔ)句和查詢參數(shù),所述數(shù)據(jù)庫(kù) 操作語(yǔ)句中包含當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別名和字段,并通過(guò)所述數(shù)據(jù)關(guān)聯(lián)模型, 為所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別名和字段建立相應(yīng)的表連接關(guān)系;
[0009] 接收對(duì)象操作數(shù)據(jù),所述對(duì)象操作數(shù)據(jù)中包含當(dāng)前查詢需求對(duì)應(yīng)的類(lèi)名和類(lèi)的屬 性,并根據(jù)預(yù)設(shè)的映射文件和所述表連接關(guān)系,返回所述對(duì)象操作數(shù)據(jù)對(duì)應(yīng)的對(duì)象數(shù)據(jù),其 中,所述預(yù)設(shè)的映射文件包括:類(lèi)名和數(shù)據(jù)庫(kù)表的名稱(chēng)的映射關(guān)系、類(lèi)的屬性和數(shù)據(jù)庫(kù)表的 物理字段的映射關(guān)系。
[0010] 優(yōu)選的,所述構(gòu)建所述待查詢的業(yè)務(wù)主題對(duì)應(yīng)的數(shù)據(jù)關(guān)聯(lián)模型,包括:
[0011] 獲取所述業(yè)務(wù)模型中的數(shù)據(jù)庫(kù)表后,根據(jù)所述關(guān)系數(shù)據(jù)模型,判斷各個(gè)所述數(shù)據(jù) 庫(kù)表之間的關(guān)聯(lián)方式;
[0012] 接收連通圖的配置文件,為具有關(guān)聯(lián)的所述數(shù)據(jù)庫(kù)表構(gòu)建相應(yīng)的連通圖,并獲取 與其他數(shù)據(jù)庫(kù)表沒(méi)有關(guān)聯(lián)的數(shù)據(jù)庫(kù)表,構(gòu)建相應(yīng)的數(shù)據(jù)關(guān)聯(lián)模型;
[0013] 所述數(shù)據(jù)關(guān)聯(lián)模型中包括:具有關(guān)聯(lián)的數(shù)據(jù)庫(kù)表構(gòu)成的連通圖,和與其他數(shù)據(jù)庫(kù) 表沒(méi)有關(guān)聯(lián)的數(shù)據(jù)庫(kù)表。
[0014] 優(yōu)選的,所述通過(guò)所述數(shù)據(jù)關(guān)聯(lián)模型,為所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別 名建立相應(yīng)的表連接關(guān)系,包括:
[0015] 根據(jù)所述數(shù)據(jù)關(guān)聯(lián)模型,從所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別名中選取根節(jié) 點(diǎn),其中所述根節(jié)點(diǎn)為關(guān)聯(lián)其他數(shù)據(jù)庫(kù)表的別名最多的數(shù)據(jù)庫(kù)表;
[0016] 通過(guò)所述數(shù)據(jù)關(guān)聯(lián)模型提供的關(guān)聯(lián)關(guān)系,獲取所述根節(jié)點(diǎn)到所述當(dāng)前查詢對(duì)應(yīng)的 各個(gè)數(shù)據(jù)庫(kù)表的別名的路徑;
[0017] 將所述路徑兩兩合并,獲取最小連通子圖,并通過(guò)所述最小連通子圖指示的連接 關(guān)系,建立所述當(dāng)前查詢需求對(duì)應(yīng)的表連接關(guān)系。
[0018] 優(yōu)選的,所述根據(jù)預(yù)設(shè)的映射文件和所述表連接關(guān)系,返回所述對(duì)象操作數(shù)據(jù)對(duì) 應(yīng)的對(duì)象數(shù)據(jù),包括:
[0019] 根據(jù)所述數(shù)據(jù)庫(kù)操作語(yǔ)句和查詢參數(shù),獲取當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別名 和物理字段,并根據(jù)所述表連接關(guān)系和所述預(yù)設(shè)的映射文件中數(shù)據(jù)表的別名與數(shù)據(jù)庫(kù)表名 稱(chēng)的對(duì)應(yīng)關(guān)系,獲取所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的數(shù)據(jù);
[0020] 通過(guò)所述對(duì)象操作數(shù)據(jù),以及預(yù)設(shè)的映射文件中類(lèi)名與數(shù)據(jù)庫(kù)表的別名的對(duì)應(yīng)關(guān) 系、類(lèi)的屬性與數(shù)據(jù)庫(kù)表的物理字段的對(duì)應(yīng)關(guān)系,將所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的 數(shù)據(jù)轉(zhuǎn)化為相應(yīng)的對(duì)象數(shù)據(jù)并返回。
[0021] 優(yōu)選的,當(dāng)所述數(shù)據(jù)庫(kù)操作語(yǔ)句中包含的相應(yīng)的字段為當(dāng)前查詢需求對(duì)應(yīng)的邏輯 字段時(shí),所述獲取所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的物理字段,包括:
[0022] 獲取所述數(shù)據(jù)庫(kù)操作語(yǔ)句中的邏輯字段;
[0023] 根據(jù)預(yù)設(shè)的邏輯字段與物理字段的映射關(guān)系,獲取當(dāng)前查詢需求對(duì)應(yīng)的物理字 段。
[0024] 相應(yīng)的,本發(fā)明還公開(kāi)了一種對(duì)象關(guān)系映射裝置,包括:
[0025] 數(shù)據(jù)關(guān)聯(lián)模型構(gòu)建模塊,用于根據(jù)關(guān)系數(shù)據(jù)模型中的數(shù)據(jù)庫(kù)表的連接關(guān)系,以及 待查詢的業(yè)務(wù)主題對(duì)應(yīng)的業(yè)務(wù)模型中包含的數(shù)據(jù)庫(kù)表,構(gòu)建所述待查詢的業(yè)務(wù)主題對(duì)應(yīng) 的數(shù)據(jù)關(guān)聯(lián)模型,其中,所述數(shù)據(jù)關(guān)聯(lián)模型的節(jié)點(diǎn)為所述業(yè)務(wù)模型中定義的數(shù)據(jù)庫(kù)表的別 名;
[0026] 表連接關(guān)系構(gòu)建模塊,用于當(dāng)需要查詢數(shù)據(jù)庫(kù)表中的數(shù)據(jù)時(shí),接收數(shù)據(jù)庫(kù)操作語(yǔ) 句和查詢參數(shù),所述數(shù)據(jù)庫(kù)操作語(yǔ)句中包含當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別名和字段, 并通過(guò)所述數(shù)據(jù)關(guān)聯(lián)模型,為所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別名和字段建立相應(yīng)的 表連接關(guān)系;
[0027] 對(duì)象數(shù)據(jù)返回模塊,用于接收對(duì)象操作數(shù)據(jù),所述對(duì)象操作數(shù)據(jù)中包含當(dāng)前查詢 需求對(duì)應(yīng)的類(lèi)名和類(lèi)的屬性,并根據(jù)預(yù)設(shè)的映射文件和所述表連接關(guān)系,返回所述對(duì)象操 作數(shù)據(jù)對(duì)應(yīng)的對(duì)象數(shù)據(jù),其中,所述預(yù)設(shè)的映射文件包括:類(lèi)名和數(shù)據(jù)庫(kù)表的名稱(chēng)的映射關(guān) 系、類(lèi)的屬性和數(shù)據(jù)庫(kù)表的物理字段的映射關(guān)系。
[0028] 優(yōu)選的,所述數(shù)據(jù)關(guān)聯(lián)模型構(gòu)建模塊包括:
[0029] 判斷單元,用于獲取所述業(yè)務(wù)模型中的數(shù)據(jù)庫(kù)表后,根據(jù)所述關(guān)系數(shù)據(jù)模型,判斷 各個(gè)所述數(shù)據(jù)庫(kù)表之間的關(guān)聯(lián)方式;
[0030] 構(gòu)建單元,用于接收連通圖的配置文件,為具有關(guān)聯(lián)的所述數(shù)據(jù)庫(kù)表構(gòu)建相應(yīng)的 連通圖,并獲取與其他數(shù)據(jù)庫(kù)表沒(méi)有關(guān)聯(lián)的數(shù)據(jù)庫(kù)表,構(gòu)建相應(yīng)的數(shù)據(jù)關(guān)聯(lián)模型;
[0031] 所述數(shù)據(jù)關(guān)聯(lián)模型中包括:具有關(guān)聯(lián)的數(shù)據(jù)庫(kù)表構(gòu)成的連通圖,和與其他數(shù)據(jù)庫(kù) 表沒(méi)有關(guān)聯(lián)的數(shù)據(jù)庫(kù)表。
[0032] 優(yōu)選的,所述表連接關(guān)系構(gòu)建模塊包括:
[0033] 根節(jié)點(diǎn)獲取單元,用于根據(jù)所述數(shù)據(jù)關(guān)聯(lián)模型,從所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù) 庫(kù)表的別名中選取根節(jié)點(diǎn),其中所述根節(jié)點(diǎn)為關(guān)聯(lián)其他數(shù)據(jù)庫(kù)表的別名最多的數(shù)據(jù)庫(kù)表;[0034] 通過(guò)所述數(shù)據(jù)關(guān)聯(lián)模型提供的關(guān)聯(lián)關(guān)系,獲取所述根節(jié)點(diǎn)到所述當(dāng)前查詢對(duì)應(yīng)的 各個(gè)數(shù)據(jù)庫(kù)表的別名的路徑;
[0035] 表連接構(gòu)建單元,用于將所述路徑兩兩合并,獲取最小連通子圖,并通過(guò)所述最小 連通子圖指示的連接關(guān)系,建立所述當(dāng)前查詢需求對(duì)應(yīng)的表連接關(guān)系。
[0036] 優(yōu)選的,所述對(duì)象數(shù)據(jù)返回模塊包括:
[0037] 數(shù)據(jù)庫(kù)表數(shù)據(jù)獲取單元,用于根據(jù)所述數(shù)據(jù)庫(kù)操作語(yǔ)句和查詢參數(shù),獲取當(dāng)前查 詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別名和物理字段,并根據(jù)所述表連接關(guān)系和所述預(yù)設(shè)的映射文件 中數(shù)據(jù)表的別名與數(shù)據(jù)庫(kù)表名稱(chēng)的對(duì)應(yīng)關(guān)系,獲取所述當(dāng)前查詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的數(shù) 據(jù);
[0038] 對(duì)象數(shù)據(jù)返回單元,用于通過(guò)所述對(duì)象操作數(shù)據(jù),以及預(yù)設(shè)的映射文件中類(lèi)名與 數(shù)據(jù)庫(kù)表的別名的對(duì)應(yīng)關(guān)系、類(lèi)的屬性與數(shù)據(jù)庫(kù)表的物理字段的對(duì)應(yīng)關(guān)系,將所述當(dāng)前查 詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的數(shù)據(jù)轉(zhuǎn)化為相應(yīng)的對(duì)象數(shù)據(jù)并返回。
[0039] 優(yōu)選的,當(dāng)所述數(shù)據(jù)庫(kù)操作語(yǔ)句中包含的相應(yīng)的字段為邏輯字段時(shí),所述數(shù)據(jù)庫(kù) 表數(shù)據(jù)獲取單元包括:
[0040] 邏輯字段獲取子單元,用于獲取所述數(shù)據(jù)庫(kù)操作語(yǔ)句中的邏輯字段;
[0041] 物理字段確定子單元,用于根據(jù)預(yù)設(shè)的邏輯字段與物理字段的映射關(guān)系,獲取當(dāng) 前查詢需求對(duì)應(yīng)的物理字段。
[0042] 相應(yīng)的,本發(fā)明還公開(kāi)了一種處理器,所述處理器中集成有如上所述的對(duì)象關(guān)系 映射裝置。
[0043] 本申請(qǐng)公開(kāi)了一種對(duì)象關(guān)系映射方法、裝置和處理器,該方法中,首先根據(jù)關(guān)系數(shù) 據(jù)模型中提供的數(shù)據(jù)庫(kù)表的連接關(guān)系,以及待查詢的業(yè)務(wù)主題對(duì)應(yīng)的業(yè)務(wù)模型中包含的數(shù) 據(jù)庫(kù)表,構(gòu)建待查詢的業(yè)務(wù)主題對(duì)應(yīng)的數(shù)據(jù)關(guān)聯(lián)模型;然后,當(dāng)需要查詢數(shù)據(jù)庫(kù)表中的數(shù)據(jù) 時(shí),接收數(shù)據(jù)庫(kù)操作語(yǔ)句,根據(jù)所述數(shù)據(jù)庫(kù)操作語(yǔ)句和構(gòu)建的數(shù)據(jù)關(guān)聯(lián)模型,為所述當(dāng)前查 詢需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的別名和字段建立相應(yīng)的表連接關(guān)系;最后在獲取對(duì)象