專利名稱:一種對(duì)象查詢方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù),特別涉及一種對(duì)象査詢方法和裝置。
背景技術(shù):
在目前的軟件開發(fā)系統(tǒng)中,結(jié)構(gòu)化査詢語(yǔ)言(SQL: Structured Query Language)由于具有結(jié)構(gòu)簡(jiǎn)潔等諸多優(yōu)點(diǎn)而被用戶廣泛應(yīng)用。SQL是一種數(shù)據(jù) 庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,按照美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)的規(guī)定,SQL被作為關(guān)系型 數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言。其中,在邏輯代碼中編譯SQL語(yǔ)句能夠?qū)崿F(xiàn)數(shù) 據(jù)庫(kù)的査詢操作。
具體地,現(xiàn)有的利用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)執(zhí)行查詢操作包括根據(jù)業(yè)務(wù)需 求打開對(duì)應(yīng)的數(shù)據(jù)庫(kù);與數(shù)據(jù)庫(kù)建立連接;之后,用戶在邏輯代碼中根據(jù)當(dāng) 前需求編寫SQL查詢語(yǔ)句,通過這些SQL査詢語(yǔ)句實(shí)現(xiàn)數(shù)據(jù)庫(kù)的查詢操作。
然而,用戶編譯SQL査詢語(yǔ)句是一個(gè)非常復(fù)雜的過程,具體體現(xiàn)在在編 寫SQL査詢語(yǔ)句時(shí),需要遵循與數(shù)據(jù)庫(kù)表信息有關(guān)的SQI編譯規(guī)范,其中,
數(shù)據(jù)庫(kù)表信息具體為數(shù)據(jù)庫(kù)表名、該數(shù)據(jù)庫(kù)表中的字段以及該字段表示的意 義等,如此,就要求用戶在編譯SQL語(yǔ)句時(shí),需要對(duì)數(shù)據(jù)庫(kù)了如指掌,如此 加大了用戶的編程工作量,也大大提高了編程門檻;并且,由于SQL查詢語(yǔ)句 是面向過程的,而該語(yǔ)句還需要遵循與數(shù)據(jù)庫(kù)表信息有關(guān)的SQI編譯規(guī)范,這 會(huì)使編寫出來(lái)的代碼很長(zhǎng),大大增加了維護(hù)成本。
發(fā)明內(nèi)容
本發(fā)明提出了一種對(duì)象查詢方法和裝置,無(wú)需用戶編譯復(fù)雜的查詢語(yǔ)句。 為達(dá)到上述目的,本發(fā)明的技術(shù)方案包括 一種對(duì)象査詢方法,該方法包括步驟A,根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型;生成所述元數(shù)據(jù)模型對(duì)應(yīng)的對(duì)象 代碼;
步驟B,根據(jù)所述對(duì)象代碼和預(yù)定義的持久化引擎查詢接口執(zhí)行查詢操作。 可選的,所述元數(shù)據(jù)模型中包含一個(gè)以上的數(shù)據(jù)傳輸對(duì)象DTO; 所述步驟A中根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型包括
歩驟A1,若當(dāng)前存在與所述業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù),則根據(jù)所述業(yè)務(wù)需求 從數(shù)據(jù)庫(kù)中拖拽出一個(gè)以上的DT0,根據(jù)已設(shè)置的DTO關(guān)聯(lián)關(guān)系信息建立包含 拖拽出的DT0的元數(shù)據(jù)模型;
步驟A2,若當(dāng)前不存在與所述業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù),根據(jù)所述業(yè)務(wù)需求 配置DTO;根據(jù)配置的DTO中的屬性字段建立包含該配置的DTO的元數(shù)據(jù)模型。
較佳的,在步驟A2完成建立元數(shù)據(jù)模型后,進(jìn)一步包括根據(jù)該元數(shù)據(jù)模 型生成對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
其中,所述步驟B包括
步驟B1,將所述對(duì)象代碼編譯成業(yè)務(wù)對(duì)象庫(kù);其中,該業(yè)務(wù)對(duì)象庫(kù)包含-一 個(gè)以上的業(yè)務(wù)對(duì)象;
步驟B2,在業(yè)務(wù)邏輯代碼中根據(jù)當(dāng)前需求使用對(duì)應(yīng)的業(yè)務(wù)對(duì)象編寫對(duì)象查 詢語(yǔ)言0QL語(yǔ)句,將該0QL語(yǔ)句作為預(yù)定義的持久化引擎査詢接口的參數(shù)實(shí)現(xiàn) 査詢操作。
其中,所述歩驟B2中將該OQL語(yǔ)句作為預(yù)定義的持久化引擎査詢接口的參 數(shù)實(shí)現(xiàn)查詢操作包括
步驟B21,預(yù)定義的持久化引擎在所述持久化引擎查詢接口上接收到查詢 觸發(fā)后,判斷當(dāng)前是否緩存了需要查詢的業(yè)務(wù)數(shù)據(jù),如果是,執(zhí)行歩驟B22; 否則,執(zhí)行步驟B23;
步驟B22,通過深度克隆的方式提供該業(yè)務(wù)數(shù)據(jù);
步驟B23,從已緩存的元數(shù)據(jù)中査找要使用的業(yè)務(wù)對(duì)象對(duì)應(yīng)的元數(shù)據(jù),如 果查找到,根據(jù)該查找到的元數(shù)據(jù)去數(shù)據(jù)庫(kù)中獲取并提供相應(yīng)的業(yè)務(wù)數(shù)據(jù)。 一種對(duì)象查詢裝置,該裝置包括數(shù)據(jù)設(shè)計(jì)模塊和持久化引擎模塊;其中,所述數(shù)據(jù)設(shè)計(jì)模塊用于根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型;以及生成所述元數(shù) 據(jù)模型對(duì)應(yīng)的對(duì)象代碼;
所述持久化引擎模塊用于根據(jù)所述對(duì)象代碼和預(yù)定義的持久化引擎査詢接 口執(zhí)行查詢操作。
可選的,所述元數(shù)據(jù)模型中包含一個(gè)以上的數(shù)據(jù)傳輸對(duì)象DT0;
所述數(shù)據(jù)設(shè)計(jì)模塊包括
判斷單元,用于判斷當(dāng)前是否存在與所述業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù);
第一模型生成單元,用于當(dāng)所述判斷單元判斷出當(dāng)前存在與所述業(yè)務(wù)需求 對(duì)應(yīng)的數(shù)據(jù)庫(kù)時(shí),則根據(jù)所述業(yè)務(wù)需求從數(shù)據(jù)庫(kù)中拖拽出一個(gè)以上的DT0,根 據(jù)已設(shè)置的DT0關(guān)聯(lián)關(guān)系信息建立包含拖拽出的DT0的元數(shù)據(jù)模型;
第二模型生成單元,用于當(dāng)所述判斷單元判斷出當(dāng)前不存在與所述業(yè)務(wù)需 求對(duì)應(yīng)的數(shù)據(jù)庫(kù)時(shí),根據(jù)所述業(yè)務(wù)需求配置DTO;根據(jù)配置的DT0中的屬性字 段建立包含該配置的DT0的元數(shù)據(jù)模型。
較佳的,所述第二模型生成單元完成建立元數(shù)據(jù)模型后,進(jìn)一步根據(jù)該元 數(shù)據(jù)模型生成數(shù)據(jù)庫(kù)。
其中,所述持久化引擎模塊包括
編譯單元,用于將所述對(duì)象代碼編譯成業(yè)務(wù)對(duì)象庫(kù);其中,該業(yè)務(wù)對(duì)象庫(kù) 包含一個(gè)以上的業(yè)務(wù)對(duì)象;
査詢單元,用于在業(yè)務(wù)邏輯代碼中根據(jù)當(dāng)前需求使用所述編譯單元編譯出
的業(yè)務(wù)對(duì)象庫(kù)中對(duì)應(yīng)的業(yè)務(wù)對(duì)象編寫對(duì)象査詢語(yǔ)言O(shè)QL語(yǔ)句,將該0QL語(yǔ)句作 為預(yù)定義的持久化引擎查詢接口的參數(shù)實(shí)現(xiàn)查詢操作。 其中,所述査詢單元在接收到查詢觸發(fā)后,
判斷當(dāng)前是否緩存了需要查詢的業(yè)務(wù)數(shù)據(jù),如果是,將緩存中存儲(chǔ)的業(yè)務(wù) 數(shù)據(jù)通過深度克隆的方式提供;否則,從已緩存的元數(shù)據(jù)中査找要使用的業(yè)務(wù) 對(duì)象對(duì)應(yīng)的元數(shù)據(jù),如果査找到,根據(jù)該查找到的元數(shù)據(jù)去數(shù)據(jù)庫(kù)中獲取并提 供相應(yīng)的業(yè)務(wù)數(shù)據(jù)。
由以上技術(shù)方案可以看出,本發(fā)明實(shí)施例提供的對(duì)象查詢方法和裝置中,并不是由用戶與數(shù)據(jù)庫(kù)進(jìn)行交互的,而是由預(yù)定義的持久化引擎與數(shù)據(jù)庫(kù)進(jìn)行 交互,這樣,用戶在需要執(zhí)行査詢操作時(shí),不需要關(guān)心數(shù)據(jù)庫(kù)中的信息,而是
直接根據(jù)業(yè)務(wù)需求編寫對(duì)應(yīng)的對(duì)象查詢語(yǔ)言0QL語(yǔ)句,也就是說(shuō),該0QL語(yǔ)句并 不像現(xiàn)有技術(shù)中的SQL語(yǔ)句那樣還需要涉及到數(shù)據(jù)庫(kù)表名、數(shù)據(jù)庫(kù)表字段等信 息,而是僅與需要查詢的對(duì)象的信息有關(guān),因此,本發(fā)明并不需要現(xiàn)有技術(shù)中編 譯復(fù)雜SQL査詢語(yǔ)句的操作。如此,就不會(huì)出現(xiàn)現(xiàn)有技術(shù)中利用SQL語(yǔ)句所出
現(xiàn)的編譯過程復(fù)雜、編程門檻高等技術(shù)問題,大大減少了用戶的編程工作量, 提高了對(duì)數(shù)據(jù)庫(kù)査詢操作的效率。
進(jìn)一步地,本發(fā)明實(shí)施例通過將業(yè)務(wù)對(duì)象信息(比如業(yè)務(wù)對(duì)象數(shù)據(jù),或者 業(yè)務(wù)對(duì)象的元數(shù)據(jù))緩存在持久化引擎中,該持久化引擎中存儲(chǔ)的信息都是面 向?qū)ο蟮模罄m(xù)査詢時(shí),直接從緩存中而不是數(shù)據(jù)庫(kù)中査詢出業(yè)務(wù)對(duì)象的信息, 這樣,也大大提高了查詢效率,并非現(xiàn)有技術(shù)中用戶每次執(zhí)行查詢操作時(shí)都執(zhí) 行與數(shù)據(jù)庫(kù)交互的操作,減少數(shù)據(jù)庫(kù)的交互壓力。可以看出,相比于現(xiàn)有技術(shù), 本發(fā)明實(shí)施例提供的方法更加簡(jiǎn)單、快捷。
圖1為本發(fā)明實(shí)施例提供的流程圖2為本發(fā)明實(shí)施例提供的元數(shù)據(jù)模型示意圖3為本發(fā)明實(shí)施例提供的應(yīng)用示意圖4為本發(fā)明實(shí)施例提供的裝置結(jié)構(gòu)圖。
具體實(shí)施例方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體 實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。
本發(fā)明實(shí)施例提供的對(duì)象査詢方法中,需要根據(jù)業(yè)務(wù)需求預(yù)定義持久化 引擎,其中,該持久化引擎能直接與數(shù)據(jù)庫(kù)進(jìn)行交互,并提供了用于執(zhí)行查詢 操作的查詢接口。當(dāng)用戶需要執(zhí)行查詢操作時(shí),該方法主要包括根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型;并生成所述元數(shù)據(jù)模型對(duì)應(yīng)的對(duì)象代碼;根據(jù)所述對(duì) 象代碼和預(yù)定義的持久化引擎提供的查詢接口(簡(jiǎn)稱預(yù)定義的持久化引擎查 詢接口)執(zhí)行查詢操作。
為使本發(fā)明實(shí)施例更加清楚,下面舉一具體流程進(jìn)行描述。 參見圖l,圖1為本發(fā)明實(shí)施例提供的流程圖。在該實(shí)施例中,首先預(yù) 定義能直接與數(shù)據(jù)庫(kù)迸行交互的持久化引擎,該持久化引擎中提供了具體的 查詢接口 (記為預(yù)定義的持久化引擎查詢接口),如圖1所示,該流程可包 括以下步驟
步驟IOI,分析具體的業(yè)務(wù)需求,根據(jù)該業(yè)務(wù)需求建立元數(shù)據(jù)模型。 這里,建立的元數(shù)據(jù)模型實(shí)質(zhì)上是軟件開發(fā)人員在開始進(jìn)行軟件開發(fā)時(shí)
通過分析當(dāng)前具體的業(yè)務(wù)需求所建立的一個(gè)"模子",其具體提供了一個(gè)類
型的概念。
具體地,元數(shù)據(jù)模型包含了數(shù)據(jù)傳輸對(duì)象(DTO: Data Transfer object) 以及在包含多個(gè)DTO時(shí)各個(gè)DTO之間的關(guān)聯(lián)關(guān)系。參見圖2,圖2為本實(shí)施 例提供的元數(shù)據(jù)模型的示意圖。如圖2所示,該元數(shù)據(jù)模型包含了職員DT0、 崗位DT0、銀行卡DT0、外號(hào)DT0和部門DTO等數(shù)據(jù)傳輸對(duì)象,其中,職員 DT0、崗位DT0、銀行卡DT0、外號(hào)DT0和部門DTO四者之間的關(guān)聯(lián)關(guān)系通過 圖2中的連接線表示。
通常,在一種情況(記為情況l)下,步驟101執(zhí)行之前,己存在與當(dāng) 前業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù),則步驟101具體包括分析具體的業(yè)務(wù)需求,根 據(jù)該業(yè)務(wù)需求從數(shù)據(jù)庫(kù)中拖拽出一個(gè)以上的DTO,根據(jù)已設(shè)置的DTO關(guān)聯(lián)關(guān) 系信息(這里,可以是預(yù)先在數(shù)據(jù)庫(kù)管理系統(tǒng)中設(shè)置的DTO關(guān)聯(lián)關(guān)系信息) 建立包含該拖拽出的DTO的元數(shù)據(jù)模型;在另一種情況(記為情況2)下, 在歩驟101執(zhí)行時(shí),還不存在業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù),則歩驟101具休包括 根據(jù)當(dāng)前業(yè)務(wù)需求創(chuàng)建并配置對(duì)應(yīng)的DTO,之后,根據(jù)配置的DTO中的屬性 字段建立包含該配置的DTO的元數(shù)據(jù)模型。比如,若根據(jù)當(dāng)前業(yè)務(wù)需求需要 創(chuàng)建并配置圖2所示的各個(gè)DT0,其中,配置的職員DT0中的屬性字段(由于現(xiàn)在該字段并沒有被賦值,因此,將其簡(jiǎn)稱為字段)中包含崗位DTO字段、
銀行卡DT0字段等,則可以知道職員DT0與配置的崗位DT0和銀行卡DT0存 在關(guān)聯(lián)關(guān)系,因此,根據(jù)關(guān)聯(lián)關(guān)系便可構(gòu)成圖2所示的元數(shù)據(jù)模型。
需要說(shuō)明的是,本實(shí)施例在情況2時(shí),為便于后續(xù)的查詢操作,還需要 在完成元數(shù)據(jù)模型建立操作后,根據(jù)元數(shù)據(jù)模型包含的各個(gè)DT0生成數(shù)據(jù) 庫(kù)。這里,生成的數(shù)據(jù)庫(kù)與元數(shù)據(jù)模型中的DT0對(duì)應(yīng)。以圖2所示的職員 DT0為例,則生成的數(shù)據(jù)庫(kù)中就包含了對(duì)應(yīng)職員DT0的數(shù)據(jù)庫(kù)表,而該職員 DTO巾包含的各個(gè)屬性字段(比如更新時(shí)間、分布時(shí)間戳等強(qiáng)類型字段)則 對(duì)應(yīng)該數(shù)據(jù)庫(kù)表中的列。其中,該列便于用戶后續(xù)根據(jù)實(shí)際需求輸入相應(yīng)的 數(shù)據(jù),比如,輸入更新時(shí)間的值等。
還需要說(shuō)明的是,本實(shí)施例中,在DTO中除了設(shè)置強(qiáng)類型字段外,還可 設(shè)置弱類型字段(記為自由項(xiàng)字段),該自由項(xiàng)字段并不像強(qiáng)類型字段那樣 明確表示什么意義(比如職員DT0中的更新時(shí)間字段明確表示用于更新職員 信息的時(shí)間),而是為了后續(xù)進(jìn)一步的需求預(yù)留一些字段,以便實(shí)現(xiàn)后續(xù)的 進(jìn)一步需求。比如圖2中,可在銀行卡DTO中設(shè)置一些自由項(xiàng)字段,如具體 為自由項(xiàng)0字段至自由項(xiàng)9字段,這些自由項(xiàng)字段目前并不表示明確的意義。
步驟102,根據(jù)元數(shù)據(jù)模型生成對(duì)象代碼。
這里,步驟102具體包括為元數(shù)據(jù)模型中的每一個(gè)DT0生成對(duì)象代碼, 其中,針對(duì)每一個(gè)DTO生成的對(duì)象代碼實(shí)質(zhì)上是一個(gè)類(class)。若元數(shù)據(jù) 模型如圖2所本,則本步驟102生成圖2所示的元數(shù)據(jù)模型中所包含的各個(gè) DTO的對(duì)象代碼。
本步驟102可由開發(fā)人員手工執(zhí)行;也可通過預(yù)先設(shè)置的具有生成代碼 功能的工具來(lái)執(zhí)行,本發(fā)明實(shí)施例并不具體限定。
本領(lǐng)域人員知道,在- -種情況下,開發(fā)人員進(jìn)行軟件開發(fā)時(shí)所用的數(shù)據(jù) 庫(kù)與開發(fā)出來(lái)的產(chǎn)品所用的數(shù)據(jù)庫(kù)會(huì)出現(xiàn)不同的情況,比如,軟件開發(fā)時(shí)所 用的數(shù)據(jù)庫(kù)為SQL Server數(shù)據(jù)庫(kù),產(chǎn)品所用的數(shù)據(jù)庫(kù)為My SQL或者ORACLE; 在另一種情況下,開發(fā)出來(lái)的產(chǎn)品中不存在數(shù)據(jù)庫(kù)的情況;針對(duì)這兩種情況,本實(shí)施例在步驟102執(zhí)行時(shí),可進(jìn)步執(zhí)行生成建庫(kù)腳本,以便根據(jù)該建庫(kù) 腳本創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
需要說(shuō)明的是,如果DTO中設(shè)置了自由項(xiàng)字段,本步驟102中生成的該 DTO的對(duì)象代碼中包含了自由項(xiàng)字段代碼)。比如,若圖2中的銀行卡DT0 中包含了自由項(xiàng)字段,則生成銀行卡DTO的對(duì)象代碼中包含了自由項(xiàng)字段代 碼。比如,如果進(jìn)一步需求銀行卡用戶的身高,由于銀行卡DTO中的強(qiáng)類型 字段中不包括身高字段,則本步驟用戶可直接將自由項(xiàng)字段代碼設(shè)置為身高 字段代碼,并相應(yīng)修改數(shù)據(jù)庫(kù)中對(duì)應(yīng)該自由項(xiàng)字段代碼的自由項(xiàng)字段為身高 字段。
步驟103,將對(duì)象代碼編譯成業(yè)務(wù)對(duì)象庫(kù)。
這里,由于對(duì)象代碼是以文本形式存在的,為便于應(yīng)用程序使用該對(duì)象 代碼,需要將該對(duì)象代碼編譯成業(yè)務(wù)對(duì)象庫(kù)。比如,以圖2所示的元數(shù)據(jù)模 型為例,在執(zhí)行本步驟103之前,已生成該模型對(duì)應(yīng)的對(duì)象代碼;這樣,在 執(zhí)行本步驟103吋,就將該對(duì)象代碼編譯成業(yè)務(wù)對(duì)象庫(kù),其中,該業(yè)務(wù)對(duì)象 庫(kù)中包含了職員業(yè)務(wù)對(duì)象(生成職員DTO的對(duì)象代碼后所編譯成的業(yè)務(wù)對(duì) 象)、崗位業(yè)務(wù)對(duì)象(生成崗位DTO的對(duì)象代碼后所編譯成的業(yè)務(wù)對(duì)象)等。
步驟104,當(dāng)需要查詢時(shí),根據(jù)當(dāng)前業(yè)務(wù)需求在查詢代碼中使用對(duì)應(yīng)的 業(yè)務(wù)對(duì)象來(lái)調(diào)用預(yù)定義的持久化引擎查詢接口實(shí)現(xiàn)査詢操作。
這里,在定義持久化引擎時(shí),可設(shè)置一個(gè)以上的持久化引擎査詢接U, 并可設(shè)置不同的業(yè)務(wù)對(duì)象對(duì)應(yīng)不同的持久化引擎杳詢接口。因此,步驟104 中在調(diào)用預(yù)定義的持久化引擎查詢接口時(shí)需要根據(jù)當(dāng)前的業(yè)務(wù)對(duì)象來(lái)執(zhí)行。 由于預(yù)定義的持久化引擎能直接與數(shù)據(jù)庫(kù)交互,因此,用戶就不需要關(guān)心與 數(shù)據(jù)庫(kù)的交互,而是直接操作持久化引擎即可,具體為根據(jù)當(dāng)前需求編譯 對(duì)象OQL語(yǔ)句,將該OQL語(yǔ)句作為持久化引擎提供的査詢接口即可;由于用 戶不與數(shù)據(jù)庫(kù)交互,因此,該編譯的OQL語(yǔ)句就不會(huì)涉及到數(shù)據(jù)庫(kù)信息(比 如數(shù)據(jù)庫(kù)表名、數(shù)據(jù)庫(kù)表字段等),而是僅涉及用戶需要查詢的業(yè)務(wù)對(duì)象信 息。因此,步驟104中,根據(jù)當(dāng)前業(yè)務(wù)需求在查詢代碼中使用對(duì)應(yīng)的業(yè)務(wù)對(duì) 象來(lái)調(diào)用預(yù)定義的持久化引擎查詢接口實(shí)現(xiàn)査詢操作具體為根據(jù)當(dāng)前業(yè)務(wù)
需求在査詢代碼中使用對(duì)應(yīng)的業(yè)務(wù)對(duì)象編寫OQL語(yǔ)句,將該OQL語(yǔ)句作為預(yù) 定義的持久化引擎查詢接口的參數(shù),之后,觸發(fā)該查詢操作;當(dāng)持久化引擎 在持久化引擎查詢接口上接收到該觸發(fā)后,執(zhí)行查詢操作。
需要說(shuō)明的是,本發(fā)明實(shí)施例中,為便于持久化引擎執(zhí)行查詢操作,可 在持久化引擎首次與數(shù)據(jù)庫(kù)交互時(shí),讀取并緩存該數(shù)據(jù)庫(kù)中的元數(shù)據(jù);其中, 元數(shù)據(jù)為對(duì)業(yè)務(wù)對(duì)象、業(yè)務(wù)對(duì)象屬性和該業(yè)務(wù)對(duì)象與其他業(yè)務(wù)對(duì)象的關(guān)聯(lián)關(guān) 系的描述;優(yōu)選地,本發(fā)明實(shí)施例中持久化引擎并非只針對(duì)一個(gè)數(shù)據(jù)庫(kù)進(jìn)行
査詢操作,其可支持多個(gè)數(shù)據(jù)庫(kù)的查詢操作;為便于區(qū)分緩存的不同數(shù)據(jù)庫(kù)
的元數(shù)據(jù),本實(shí)施例在緩存元數(shù)據(jù)時(shí)可按照不同的帳套來(lái)隔離不同數(shù)據(jù)庫(kù)的 元數(shù)據(jù)。通常,數(shù)據(jù)庫(kù)中的元數(shù)據(jù)并非一成不變的,當(dāng)持久化引擎獲知元數(shù) 據(jù)被修改或者緩存同步被觸發(fā)時(shí),還需相應(yīng)地更新緩存的元數(shù)據(jù)(具體為重 新加載數(shù)據(jù)庫(kù)中對(duì)應(yīng)的元數(shù)據(jù))。如此,持久化引擎執(zhí)行査詢操作具體可包
括判斷當(dāng)前是否緩存了需要查詢的業(yè)務(wù)數(shù)據(jù),如果是,通過深度克隆的方 式提供該業(yè)務(wù)數(shù)據(jù);否則,從已緩存的元數(shù)據(jù)中查找要使用的業(yè)務(wù)對(duì)象對(duì)應(yīng)
的元數(shù)據(jù),如果査找到,根據(jù)該査找到的元數(shù)據(jù)去數(shù)據(jù)庫(kù)中獲取并提供相應(yīng) 的業(yè)務(wù)數(shù)據(jù)。
優(yōu)選地,本實(shí)施例中,在判斷出當(dāng)前未緩存需要查詢的業(yè)務(wù)數(shù)據(jù)時(shí),可 在持久化引擎提供出相應(yīng)的業(yè)務(wù)數(shù)據(jù)時(shí),進(jìn)一步按照預(yù)設(shè)的緩存原則緩存該 業(yè)務(wù)數(shù)據(jù)。其中,預(yù)設(shè)的緩存原則具體實(shí)現(xiàn)時(shí)可有多種形式,比如大池緩存 或者臨時(shí)緩存等,這里并不具體限定。
其中,大池緩存(Global Cache),是一個(gè)全局業(yè)務(wù)對(duì)象緩存池,主要 是根據(jù)預(yù)設(shè)的緩存策略緩存數(shù)據(jù),其中,該預(yù)設(shè)的緩存策略可以依照被引用 量、被操作的頻繁度、和該業(yè)務(wù)數(shù)據(jù)量多少的大小中的任意一個(gè)或者兩個(gè)以 上的任意組合等情況制定緩存策略。在緩存操作中,還同歩采用最為安全的 更新觸發(fā)清除業(yè)務(wù)對(duì)象緩存池操作,具體類似EJB里面的實(shí)體Bean緩存方式。
臨時(shí)緩存(Temp Cache)主要是針對(duì)相互遞歸引用所產(chǎn)生的重復(fù)查詢而 設(shè)計(jì)的,在臨時(shí)緩存中,針對(duì)主鍵相同的對(duì)象在一個(gè)事務(wù)上査詢時(shí)不會(huì)再與 數(shù)據(jù)庫(kù)交互,而是直接使用深度克隆(復(fù)制)產(chǎn)生相同對(duì)象。
為便于本實(shí)施例的査詢操作更加簡(jiǎn)單,本實(shí)施例可預(yù)先設(shè)置用于快速查詢的 0QL語(yǔ)句,具體如下
{sysfield} 査詢所有常規(guī)列; {userdine—and—freeitem} 杳詢自定義項(xiàng)和自由項(xiàng)歹!j; {userdefine} 查詢自定義項(xiàng)列;
{all} 查詢所有的項(xiàng),等同于用于表示所有的"*"
符號(hào);
{freeitem} 查詢自由項(xiàng)列;
{屬性1,屬性2……,屬性n }或{(屬性1,屬性2……,屬性n) } 査 詢指定的屬性列;
{ !(屬性1,屬性2……,屬性n ) } 查詢不包含指定屬性列的其它 屬性,其中,"!"表示非的意思; orderdto.氺,orderdto. customer, {id, code, name} 査詢訂單所有歹U以及弓I用 客戶的id、 code、 name列;
orderdto. id, orderdto. {freeitem}, 査詢訂單id以及訂單的
自由項(xiàng);
orderdto. customer. {! (updated,叩datedby, ts)} 查詢訂單弓l用客戶的除 updated、 updatedby、 ts夕卜的其它歹!j;
需要說(shuō)明的是,為便于持久化引擎識(shí)別上述用于快速杳詢的OQL語(yǔ)句,還需 要在該持久化引擎中設(shè)置該用于快速查詢的OQL語(yǔ)句的描述指令。如此,當(dāng)執(zhí) 行查詢操作時(shí),可直接、快速提供相應(yīng)的査詢結(jié)果。
可見,在本步驟中,由于持久化引擎提供了完整的面向?qū)ο笳Z(yǔ)法的查詢 方法,因此就無(wú)需現(xiàn)有技術(shù)中用戶需要編譯復(fù)雜SQL語(yǔ)句來(lái)實(shí)現(xiàn)查詢操作,而是直接利用簡(jiǎn)單的面向?qū)ο蟮腛QL語(yǔ)句執(zhí)行查詢操作。
為便于本實(shí)施例更加清楚,下面舉一個(gè)應(yīng)用實(shí)施例進(jìn)行描述。
參見圖3,圖3為本發(fā)明實(shí)施例的訂單模型示意圖。在圖3中,元數(shù)據(jù)模 型具體為圖3所示的訂單模型,其中,該訂單模型包含了客戶DTO、訂單DTO、 明細(xì)DTO和產(chǎn)品DTO,并顯示了該四者之間的關(guān)聯(lián)關(guān)系(該關(guān)聯(lián)關(guān)系在圖3中 用連接線表示)。如此,根據(jù)該訂單模型生成對(duì)象代碼,具體為生成客戶類、訂 單類、明細(xì)類和產(chǎn)品類。由于生成的對(duì)象代碼以文本形式存在,因此,這里還 需將各個(gè)類編譯成業(yè)務(wù)對(duì)象庫(kù),如此,該業(yè)務(wù)對(duì)象庫(kù)中包含了客戶業(yè)務(wù)對(duì)象、 訂單業(yè)務(wù)對(duì)象、明細(xì)業(yè)務(wù)對(duì)象和產(chǎn)品業(yè)務(wù)對(duì)象;當(dāng)需要查詢時(shí),若需要針對(duì)圖 3中的客戶業(yè)務(wù)對(duì)象和訂單業(yè)務(wù)對(duì)象進(jìn)行查詢操作,則在查詢代碼中使用該客 戶業(yè)務(wù)對(duì)象和訂單業(yè)務(wù)對(duì)象編寫OQL語(yǔ)句,比如,査詢訂單明細(xì)產(chǎn)品價(jià)格大于 30的訂單客戶名稱和金額,則在查詢代碼中編寫的OQL語(yǔ)句為
Orderdto. money as orderMoney, OrderDTO. customer, name customername where OrderDTO. Items. Product, price〉30 。
將該OQL語(yǔ)句作為預(yù)定義的持久化引擎査詢接口的參數(shù),之后,觸發(fā)該査 詢操作;當(dāng)持久化引擎接收到該觸發(fā)后,執(zhí)行査詢操作,具體執(zhí)行的查詢操作 可參見圖1所示的步驟104。
如此,實(shí)現(xiàn)了本發(fā)明實(shí)施例提供的對(duì)象査詢方法。
需要說(shuō)明的是,本實(shí)施例中利用歩驟101建立的元數(shù)據(jù)模型,還可執(zhí)行 持久化操作中的新建、更新和刪除操作。以對(duì)一業(yè)務(wù)對(duì)象比如職員person DT0執(zhí)行新建操作為例,則首先利用該person DT0新建(New) —個(gè)實(shí)例對(duì) 象,然后賦值給該新建的實(shí)例化對(duì)象;將該實(shí)例化對(duì)象作為持久化引擎提供 的新建接口的參數(shù);由持久化引擎自動(dòng)完成與數(shù)據(jù)庫(kù)的交互。其他操作如更 新和刪除操作類似,這里不再贅述。
上述對(duì)本發(fā)明提供的方法進(jìn)行了描述,下面對(duì)本發(fā)明實(shí)施例提供的裝置進(jìn)行 描述。
參見圖4,圖4為本發(fā)明實(shí)施例提供的對(duì)象査詢裝置結(jié)構(gòu)圖,如圖4所示,該裝置包括數(shù)據(jù)設(shè)計(jì)模塊401和持久化引擎模塊402;其中,
數(shù)據(jù)設(shè)計(jì)模塊401用于根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型;以及生成所述元數(shù)
據(jù)模型對(duì)應(yīng)的對(duì)象代碼;
持久化引擎模塊402用于根據(jù)所述對(duì)象代碼和預(yù)定義的持久化引擎査詢接
口執(zhí)行査詢操作。
優(yōu)選地,所述元數(shù)據(jù)模型中包含一個(gè)以上的數(shù)據(jù)傳輸對(duì)象DTO;
數(shù)據(jù)設(shè)計(jì)模塊401包括
判斷單元4011,用于判斷當(dāng)前是否存在與所述業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù);
第一模型生成單元4012,用于當(dāng)判斷單元4011判斷出當(dāng)前存在與所述業(yè) 務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)時(shí),根據(jù)所述業(yè)務(wù)需求從數(shù)據(jù)庫(kù)中拖拽出一個(gè)以上的DTO, 根據(jù)已設(shè)置的DTO關(guān)聯(lián)關(guān)系信息建立包含拖拽出的DTO的元數(shù)據(jù)模型;
第二模型生成單元4013,用于當(dāng)判斷單元4011判斷出當(dāng)前不存在與所述 業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)時(shí),根據(jù)所述業(yè)務(wù)需求配置DTO;根據(jù)配置的DTO中的 屬性字段建立包含該配置的DTO的元數(shù)據(jù)模型。
優(yōu)選地,第—模型生成單元4012完成建立元數(shù)據(jù)模型后,進(jìn)一步根據(jù)該元 數(shù)據(jù)模型生成數(shù)據(jù)庫(kù)。
優(yōu)選地,持久化引擎模塊402包括
編譯單元4021,用于將所述對(duì)象代碼編譯成業(yè)務(wù)對(duì)象庫(kù);其中,該業(yè)務(wù)對(duì) 象庫(kù)包含一個(gè)以上的業(yè)務(wù)對(duì)象;
查詢單元4022,用于在業(yè)務(wù)邏輯代碼中根據(jù)當(dāng)前需求使用編譯單元4021 編譯出的業(yè)務(wù)對(duì)象庫(kù)中對(duì)應(yīng)的業(yè)務(wù)對(duì)象編寫OQL語(yǔ)句,將該OQL語(yǔ)句作為預(yù)定 義的持久化引擎查詢接口的參數(shù)實(shí)現(xiàn)査詢操作。
具體地,查詢單元4022在接收到査詢觸發(fā)后,判斷當(dāng)前是否緩存了需要査 詢的業(yè)務(wù)數(shù)據(jù),如果是,將緩存中存儲(chǔ)的業(yè)務(wù)數(shù)據(jù)通過深度克隆的方式提供; 否則,從已緩存的元數(shù)據(jù)中査找要使用的業(yè)務(wù)對(duì)象對(duì)應(yīng)的元數(shù)據(jù),如果查找到, 根據(jù)該査找到的元數(shù)據(jù)去數(shù)據(jù)庫(kù)中獲取并提供相應(yīng)的業(yè)務(wù)數(shù)據(jù)。
由以上技術(shù)方案可以看出,本發(fā)明實(shí)施例提供的對(duì)象査詢方法和裝置中,并不是由用戶與數(shù)據(jù)庫(kù)交互的,而是由預(yù)定義的持久化引擎與數(shù)據(jù)庫(kù)進(jìn)行交互, 這樣,用戶就不需要現(xiàn)有技術(shù)中編譯復(fù)雜SQL語(yǔ)句編寫查詢語(yǔ)句,而是直接通
過面向?qū)ο蟮念A(yù)定義的持久化引擎中接口執(zhí)行査詢操作;
進(jìn)一步地,本發(fā)明實(shí)施例通過將業(yè)務(wù)對(duì)象信息(比如業(yè)務(wù)對(duì)象數(shù)據(jù),或者業(yè) 務(wù)對(duì)象的元數(shù)據(jù))緩存在持久化引擎中,該持久化引擎中存儲(chǔ)的信息都是面向 對(duì)象的,這樣,也大大提高了對(duì)數(shù)據(jù)庫(kù)査詢操作的效率,并非現(xiàn)有技術(shù)中用戶 每次執(zhí)行查詢操作吋都執(zhí)行與數(shù)據(jù)庫(kù)交互的操作,減少數(shù)據(jù)庫(kù)的交互壓力。可 以看出,相比于現(xiàn)有技術(shù),本發(fā)明實(shí)施例提供的方法更加簡(jiǎn)單、快捷。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā) 明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā) 明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1、一種對(duì)象查詢方法,其特征在于,該方法包括步驟A,根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型;生成所述元數(shù)據(jù)模型對(duì)應(yīng)的對(duì)象代碼;步驟B,根據(jù)所述對(duì)象代碼和預(yù)定義的持久化引擎查詢接口執(zhí)行查詢操作。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述元數(shù)據(jù)模型中包含一個(gè) 以上的數(shù)據(jù)傳輸對(duì)象DT0;所述步驟A中根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型包括步驟A1,若當(dāng)前存在與所述業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù),則根據(jù)所述業(yè)務(wù)需求 從數(shù)據(jù)庫(kù)中拖拽出一個(gè)以上的DT0,根據(jù)已設(shè)置的DTO關(guān)聯(lián)關(guān)系信息建立包含 拖拽出的DT0的元數(shù)據(jù)模型;步驟A2,若當(dāng)前不存在與所述業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù),根據(jù)所述業(yè)務(wù)需求 配置DTO;根據(jù)配置的DTO中的屬性字段建立包含該配置的DTO的元數(shù)據(jù)模型。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,在步驟A2完成建立元數(shù)據(jù) 模型后,進(jìn)一步包括根據(jù)該元數(shù)據(jù)模型生成對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
4、 根據(jù)權(quán)利要求1至3任一所述的方法,其特征在于,所述步驟B包括 步驟B1,將所述對(duì)象代碼編譯成業(yè)務(wù)對(duì)象庫(kù);其中,該業(yè)務(wù)對(duì)象庫(kù)包含一個(gè)以上的業(yè)務(wù)對(duì)象;步驟B2,在業(yè)務(wù)邏輯代碼中根據(jù)當(dāng)前需求使用對(duì)應(yīng)的業(yè)務(wù)對(duì)象編寫對(duì)象查 詢語(yǔ)言0QL語(yǔ)句,將該0QL語(yǔ)句作為預(yù)定義的持久化引擎査詢接口的參數(shù)實(shí)現(xiàn) 查詢操作。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述步驟B2中將該0QL語(yǔ) 句作為預(yù)定義的持久化引擎查詢接口的參數(shù)實(shí)現(xiàn)查詢操作包括步驟B21,預(yù)定義的持久化引擎在所述持久化引擎查詢接口上接收到查詢 觸發(fā)后,判斷當(dāng)前是否緩存了需要査詢的業(yè)務(wù)數(shù)據(jù),如果是,執(zhí)行步驟B22; 否則,執(zhí)行歩驟B23;步驟B22,通過深度克隆的方式提供該業(yè)務(wù)數(shù)據(jù);步驟B23,從已緩存的元數(shù)據(jù)中查找要使用的業(yè)務(wù)對(duì)象對(duì)應(yīng)的元數(shù)據(jù),如 果査找到,根據(jù)該查找到的元數(shù)據(jù)去數(shù)據(jù)庫(kù)中獲取并提供相應(yīng)的業(yè)務(wù)數(shù)據(jù)。
6、 一種對(duì)象查詢裝置,其特征在于,該裝置包括數(shù)據(jù)設(shè)計(jì)模塊和持久化 引擎模塊;其中,所述數(shù)據(jù)設(shè)計(jì)模塊用于根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型;以及生成所述元數(shù) 據(jù)模型對(duì)應(yīng)的對(duì)象代碼;所述持久化引擎模塊用于根據(jù)所述對(duì)象代碼和預(yù)定義的持久化引擎查詢接 口執(zhí)行查詢操作。
7、 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述元數(shù)據(jù)模型中包含一個(gè) 以上的數(shù)據(jù)傳輸對(duì)象DTO;所述數(shù)據(jù)設(shè)計(jì)模塊包括判斷單元,用于判斷當(dāng)前是否存在與所述業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù);第一模型生成單元,用于當(dāng)所述判斷單元判斷出當(dāng)前存在與所述業(yè)務(wù)需求對(duì)應(yīng)的數(shù)據(jù)庫(kù)時(shí),則根據(jù)所述業(yè)務(wù)需求從數(shù)據(jù)庫(kù)中拖拽出一個(gè)以上的DT0,根 據(jù)已設(shè)置的DTO關(guān)聯(lián)關(guān)系信息建立包含拖拽出的DT0的元數(shù)據(jù)模型;第二模型生成單元,用于當(dāng)所述判斷單元判斷出當(dāng)前不存在與所述業(yè)務(wù)需 求對(duì)應(yīng)的數(shù)據(jù)庫(kù)時(shí),根據(jù)所述業(yè)務(wù)需求配置DTO;根據(jù)配置的DT0中的屬性字 段建立包含該配置的DT0的元數(shù)據(jù)模型。
8、 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述第二模型生成單元完成 建立元數(shù)據(jù)模型后,進(jìn)一歩根據(jù)該元數(shù)據(jù)模型生成數(shù)據(jù)庫(kù)。
9、 根據(jù)權(quán)利要求6至8任一所述的裝置,其特征在下,所述持久化引擎模 塊包括編譯單元,用于將所述對(duì)象代碼編譯成業(yè)務(wù)對(duì)象庫(kù);其中,該業(yè)務(wù)對(duì)象庫(kù)包含一個(gè)以上的業(yè)務(wù)對(duì)象;查詢單元,用于在業(yè)務(wù)邏輯代碼中根據(jù)當(dāng)前需求使用所述編譯單元編譯出 的業(yè)務(wù)對(duì)象庫(kù)中對(duì)應(yīng)的業(yè)務(wù)對(duì)象編寫對(duì)象查詢語(yǔ)言0QL語(yǔ)句,將該0QL語(yǔ)句作 為預(yù)定義的持久化引擎查詢接口的參數(shù)實(shí)現(xiàn)查詢操作。
10、根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述查詢單元在接收到査 詢觸發(fā)后,若當(dāng)前緩存方式為業(yè)務(wù)數(shù)據(jù)緩存,則判斷當(dāng)前是否緩存了需要査詢的業(yè)務(wù)數(shù)據(jù),如果是,將緩存中存儲(chǔ)的業(yè)務(wù)數(shù)據(jù)通過深度克隆的方式提供;否則,從 已緩存的元數(shù)據(jù)屮查找要使用的業(yè)務(wù)對(duì)象對(duì)應(yīng)的元數(shù)據(jù),如果查找到,根據(jù)該 査找到的元數(shù)據(jù)去數(shù)據(jù)庫(kù)中獲取并提供相應(yīng)的業(yè)務(wù)數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種對(duì)象查詢方法和裝置,其中,該方法包括步驟A,根據(jù)業(yè)務(wù)需求建立元數(shù)據(jù)模型;生成所述元數(shù)據(jù)模型對(duì)應(yīng)的對(duì)象代碼;步驟B,根據(jù)所述對(duì)象代碼和預(yù)定義的持久化引擎查詢接口執(zhí)行查詢操作。采用本發(fā)明,可以直接利用操作對(duì)象的方式執(zhí)行查詢操作,無(wú)需現(xiàn)有技術(shù)中需要編譯復(fù)雜SQL語(yǔ)句來(lái)實(shí)現(xiàn)查詢操作。
文檔編號(hào)G06F17/30GK101582079SQ20091008732
公開日2009年11月18日 申請(qǐng)日期2009年6月23日 優(yōu)先權(quán)日2009年6月23日
發(fā)明者黃海峰 申請(qǐng)人:用友軟件股份有限公司