欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種用于Ibatis方案的序列值生成方法及裝置的制作方法

文檔序號(hào):6398810閱讀:129來源:國知局
專利名稱:一種用于Ibatis方案的序列值生成方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種用于Ibatis方案的序列值生成方法及裝置。
背景技術(shù)
Ibatis 一詞來源于“ internet”和“abatis”的組合,是一個(gè)開放源代碼項(xiàng)目,最初側(cè)重于密碼軟件的開發(fā),現(xiàn)在是一個(gè)基于Java的持久層框架。Ibatis的著力點(diǎn)在于POJO(Plain Old Java Objects,普通 Java 對(duì)象)與 SQL (Structured Query Language,結(jié)構(gòu)化查詢語言)之間的映射關(guān)系。也就是說,Ibatis并不會(huì)為程序員在運(yùn)行期自動(dòng)生成SQL執(zhí)行,具體的SQL需要程序員編寫,然后通過映射配置文件,將SQL所需的參數(shù),以及返回的結(jié)果字段映射到指定P0J0。當(dāng)持久層使用Ibatis保存數(shù)據(jù)進(jìn)數(shù)據(jù)庫的時(shí)候,通常會(huì)將一些序列值用作數(shù)據(jù)表主鍵或數(shù)據(jù)唯一標(biāo)識(shí)。在Ibatis框架中,主要通過selectKey子節(jié)點(diǎn)完成序列值生成和返回,但selectKey被定義為僅局限于數(shù)據(jù)庫SQL操作語句使用,而不能通過java類生成序列值。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例所要解決的技術(shù)問題在于,提供一種用于Ibatis方案的序列值生成方法及裝置,可擴(kuò)展利用非數(shù)據(jù)庫方法來生成序列值。為了解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種用于Ibatis方案的序列值生成方法,包括:通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的結(jié)構(gòu)化查詢語句執(zhí)行對(duì)象;當(dāng)所述結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為非空時(shí),動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,其中所述classKey屬性對(duì)象為預(yù)先定義的利用java類方法的classKey節(jié)點(diǎn)對(duì)應(yīng)的屬性對(duì)象;根據(jù)與所述序列生成器對(duì)應(yīng)的預(yù)先定義的序列生成方法生成序列值。其中,所述方法還包括以下步驟:所述通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象的步驟之前,檢測(cè)并加載總配置文件;從所述總配置文件中讀取并解析預(yù)先定義的數(shù)據(jù)表操作文件,所述數(shù)據(jù)表操作文件包括classKey節(jié)點(diǎn)配置;解析所述數(shù)據(jù)表操作文件中的根節(jié)點(diǎn),當(dāng)所述根節(jié)點(diǎn)為classKey節(jié)點(diǎn)時(shí),獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象;利用〈鍵名標(biāo)識(shí),結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。
其中,所述方法還包括:當(dāng)所述根節(jié)點(diǎn)不是classKey節(jié)點(diǎn)時(shí),獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象,并判斷所述根節(jié)點(diǎn)中是否有子節(jié)點(diǎn)為classKey節(jié)點(diǎn);若所述根節(jié)點(diǎn)中有子節(jié)點(diǎn)為classKey節(jié)點(diǎn),分別解析所述classKey節(jié)點(diǎn)并將所述c I as sKey節(jié)點(diǎn)對(duì)應(yīng)的c I as sKey執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中;利用〈鍵名標(biāo)識(shí),結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。其中,所述解析所述classKey節(jié)點(diǎn)并將所述classKey節(jié)點(diǎn)對(duì)應(yīng)的classKey執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的步驟具體包括:解析所述classKey節(jié)點(diǎn),獲取解析結(jié)果對(duì)象;將所述解析結(jié)果對(duì)象構(gòu)建轉(zhuǎn)化為執(zhí)行對(duì)象;將所述執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中。其中,所述ClassKey子節(jié)點(diǎn)的屬性包括返回值類型resultClass、屬性名稱keyProperty、類型type、序列生成器Java類全名className和序列生成方法methodName。相應(yīng)地,本發(fā)明還提供了一種用于Ibatis方案的序列值生成裝置,包括:查找模塊,用于通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的結(jié)構(gòu)化查詢語句執(zhí)行對(duì)象;序列生成器構(gòu)建模塊,用于當(dāng)所述結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為非空時(shí),動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,其中所述classKey屬性對(duì)象為預(yù)先定義的利用java類方法的classKey節(jié)點(diǎn)對(duì)應(yīng)的屬性對(duì)象;序列值生成模塊,用于根據(jù)與所述序列生成器對(duì)應(yīng)的預(yù)先定義的序列生成方法生成序列值。其中,所述序列值生成裝置還包括:配置文件加載模塊,用于檢測(cè)并加載總配置文件;配置文件解析模塊,用于從所述總配置文件中讀取并解析預(yù)先定義的數(shù)據(jù)表操作文件,所述數(shù)據(jù)表操作文件包括classKey節(jié)點(diǎn)配置;根節(jié)點(diǎn)解析模塊,用于解析所述數(shù)據(jù)表操作文件中的根節(jié)點(diǎn),當(dāng)所述根節(jié)點(diǎn)為classKey節(jié)點(diǎn)時(shí),獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象;存儲(chǔ)模塊,用于利用〈鍵名標(biāo)識(shí),結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。其中,所述根節(jié)點(diǎn)解析模塊還用于當(dāng)所述根節(jié)點(diǎn)不是classKey節(jié)點(diǎn)時(shí),獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象,并判斷所述根節(jié)點(diǎn)中是否有子節(jié)點(diǎn)為classKey節(jié)點(diǎn);所述序列值生成裝置還包括:注入模塊,用于當(dāng)所述根節(jié)點(diǎn)中有子節(jié)點(diǎn)為classKey節(jié)點(diǎn)時(shí),分別解析所述classKey節(jié)點(diǎn)并將所述classKey節(jié)點(diǎn)對(duì)應(yīng)的classKey執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中。其中,所述注入模塊包括:
classKey解析模塊,用于解析所述classKey節(jié)點(diǎn),獲取解析結(jié)果對(duì)象;classKey執(zhí)行對(duì)象構(gòu)建模塊,用于將所述解析結(jié)果對(duì)象構(gòu)建轉(zhuǎn)化為執(zhí)行對(duì)象;classKey執(zhí)行對(duì)象注入模塊,用于將所述執(zhí)行對(duì)象注入到所述insert節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中。其中,所述ClassKey子節(jié)點(diǎn)的屬性包括返回值類型resultClass、屬性名稱keyProperty、類型type、序列生成器Java類全名className和序列生成方法methodName。實(shí)施本發(fā)明實(shí)施例,具有如下有益效果:通過動(dòng)態(tài)構(gòu)建序列生成器,利用預(yù)先定義的序列生成方法獲取序列值,可以將Ibatis主鍵序列值生成方法擴(kuò)展到自定義的某個(gè)Java類方法(即自定義的序列生成器),而不再僅限于數(shù)據(jù)庫方式。


為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明提供的用于Ibatis方案的序列值生成方法的第一實(shí)施例流程圖;圖2是使用圖1所示的序列值生成方法進(jìn)行配置文件解析過程的操作步驟流程圖;圖3是本發(fā)明提供的用于Ibatis方案的序列值生成方法的第二實(shí)施例流程圖;圖4是使用圖3所示的序列值生成方法進(jìn)行配置文件解析過程的操作步驟流程圖;圖5是本發(fā)明提供的用于Ibatis方案的序列值生成裝置的第一實(shí)施例結(jié)構(gòu)示意圖;圖6是本發(fā)明提供的用于Ibatis方案的序列值生成裝置的第二實(shí)施例結(jié)構(gòu)示意圖;圖1是本發(fā)明提供的用于Ibatis方案的序列值生成裝置的第三實(shí)施例結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。請(qǐng)參見圖1,是本發(fā)明提供的用于Ibatis方案的序列值生成方法的第一實(shí)施例流程圖,包括:步驟S100、通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的SQL語句執(zhí)行對(duì)象。其中,鍵名標(biāo)識(shí)可以包括但不限于insert、update、delete、procedure、statement、classKey和selectKey。具體地,當(dāng)軟件程序或系統(tǒng)在運(yùn)行過程中,需要調(diào)用某個(gè)數(shù)據(jù)表操作文件從而執(zhí)行相關(guān)操作時(shí),可以通過用戶輸入的鍵名標(biāo)識(shí)查找與該鍵名標(biāo)識(shí)對(duì)應(yīng)的SQL語句執(zhí)行對(duì)象。步驟S101、當(dāng)所述結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為非空時(shí),動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,其中所述classKey屬性對(duì)象為預(yù)先定義的利用java類方法的classKey節(jié)點(diǎn)對(duì)應(yīng)的屬性對(duì)象。具體地,可以根據(jù)Java反射機(jī)制動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,也可以利用IOC容器(例如spring bean)代理對(duì)象注入方式動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象。步驟S102、根據(jù)與所述序列生成器對(duì)應(yīng)的預(yù)先定義的序列生成方法獲得序列值。本發(fā)明提供的序列值生成方法,通過動(dòng)態(tài)構(gòu)建序列生成器,利用預(yù)先定義的序列生成方法獲取序列值,可以將Ibatis主鍵序列值生成方法擴(kuò)展到自定義的某個(gè)Java類方法(即自定義的序列生成器),而不再僅限于數(shù)據(jù)庫方式。具體地,圖1所示的實(shí)施例中,若classKey為輸入的鍵名標(biāo)識(shí),那么生成序列值之后,可以直接將該序列值作為返回值返回給SQL語句執(zhí)行對(duì)象中的classKey屬性對(duì)象,然后執(zhí)行該SQL語句,從而完成鍵名標(biāo)識(shí)對(duì)應(yīng)的操作。若classKey不是輸入的鍵名標(biāo)識(shí),那么生成序列值之后,先將該序列值作為返回值返回給SQL語句執(zhí)行對(duì)象中的classKey屬性對(duì)象,然后根據(jù)SQL語句執(zhí)行對(duì)象中的鍵名標(biāo)識(shí)對(duì)應(yīng)的語句(例如insert語句)構(gòu)建JDBC(Java Data Base Connectivity, java數(shù)據(jù)庫連接)執(zhí)行對(duì)象,根據(jù)用戶輸入的參數(shù)進(jìn)行參數(shù)賦值,然后執(zhí)行相應(yīng)的SQL語句(例如insert語句),從而可以完成鍵名標(biāo)識(shí)對(duì)應(yīng)的操作。另外,若SQL語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為空,則直接根據(jù)SQL語句執(zhí)行對(duì)象中的相應(yīng)語句構(gòu)建JDBC執(zhí)行對(duì)象,根據(jù)用戶輸入的參數(shù)進(jìn)行參數(shù)賦值,然后執(zhí)行該語句。在完成圖1所示的生成序列值的過程之前,在軟件程序或系統(tǒng)啟動(dòng)時(shí),往往需要先加載總配置文件,解析出執(zhí)行對(duì)象,并進(jìn)行存儲(chǔ),其中總配置文件通常為XMUExtensibleMarkup Language,可擴(kuò)展標(biāo)記語言)格式。請(qǐng)參見圖2,是使用圖1所示的序列值生成方法進(jìn)行配置文件解析過程的操作步驟流程圖,包括:步驟S200、檢測(cè)并加載總配置文件。具體地,在軟件程序或系統(tǒng)啟動(dòng)時(shí),檢測(cè)并加載Ibatis總配置XML格式文件。步驟S201、從總配置文件中讀取并解析預(yù)先定義的數(shù)據(jù)表操作文件,該數(shù)據(jù)表操作文件包括classKey節(jié)點(diǎn)配置。具體地,遍歷Ibatis總配置文件,循環(huán)讀取已預(yù)先定義的數(shù)據(jù)表操作文件SQLmap并解析,其中數(shù)據(jù)表操作文件SQLmap中新增了 classKey節(jié)點(diǎn)配置。更具體地,除了新增的classKey節(jié)點(diǎn)配置,數(shù)據(jù)表操作文件SQLmap中還預(yù)先定義了類 ClassKeySource 和類 ClassKeyStatement。其中,ClassKeySource 用于創(chuàng)建 ClassKey解析結(jié)果對(duì)象,ClassKeyStatement用于通過classKey解析結(jié)果對(duì)象創(chuàng)建ClassKey執(zhí)行對(duì)象。例如,ClassKey節(jié)點(diǎn)的屬性包括返回值類型resultClass、屬性名稱keyProperty、類型type、序列生成器Java類全名className和序列生成方法methodName。可選地,classKey節(jié)點(diǎn)的屬性還可以包括序列生成方法輸入?yún)?shù)類型paramTypes和序列生成方法輸入?yún)?shù)值args,其中paramTypes與args匹配對(duì)應(yīng),且paramTypes可以包括支持Java的任意基本數(shù)據(jù)類型和字符串。另外,ClassKeySource的屬性可以包括序列生成器Java類全名className和序列生成方法methodName,可選地,還可以包括序列生成方法輸入?yún)?shù)類型paramTypes和序列生成方法輸入?yún)?shù)值args。ClasssKeystatement的屬性可以包括ClassKeySourceo步驟S202、解析該數(shù)據(jù)表操作文件中的根節(jié)點(diǎn),判斷根節(jié)點(diǎn)是否為classKey節(jié)點(diǎn)。若步驟S202的判斷結(jié)果為是,則執(zhí)行步驟S203。步驟S203、獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象。步驟S204、利用〈鍵名標(biāo)識(shí),結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。這樣,在執(zhí)行圖1所述的方法時(shí),就可以根據(jù)鍵名標(biāo)識(shí)查找解析得到的SQL語句執(zhí)行對(duì)象了。若步驟S202的判斷結(jié)果為否,則執(zhí)行步驟S205。步驟S205、獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象,并判斷所述根節(jié)點(diǎn)中是否有子節(jié)點(diǎn)為classKey節(jié)點(diǎn)。例如,若根節(jié)點(diǎn)是insert節(jié)點(diǎn),可以在單個(gè)數(shù)據(jù)表操作文件中解析insert節(jié)點(diǎn),以獲得insert節(jié)點(diǎn)的SQL語句執(zhí)行對(duì)象,該節(jié)點(diǎn)下的SQL語句主要用于數(shù)據(jù)保存操作。若步驟S205的判斷結(jié)果為是,則執(zhí)行步驟S206。步驟S206、分別解析所述classKey節(jié)點(diǎn)并將所述classKey節(jié)點(diǎn)對(duì)應(yīng)的classKey執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中。具體地,Ibatis框架中SQLmap配置類MappedStatementConfig定義中包括新增的對(duì)ClassKeyStatement的注入處理,因此,步驟S202可以包括:當(dāng)該根節(jié)點(diǎn)中存在classKey節(jié)點(diǎn)配置時(shí),解析該classKey節(jié)點(diǎn),獲取解析結(jié)果對(duì)象;將解析結(jié)果對(duì)象構(gòu)建轉(zhuǎn)化為執(zhí)行對(duì)象;將該執(zhí)行對(duì)象注入到該根節(jié)點(diǎn)的SQL語句執(zhí)行對(duì)象中。接下來執(zhí)行步驟S204。若步驟S205的判斷結(jié)果為否,則執(zhí)行步驟S204。請(qǐng)參見圖3,是本發(fā)明提供的用于Ibatis方案的序列值生成方法的第二實(shí)施例流程圖,包括:步驟S300、通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的SQL語句執(zhí)行對(duì)象。步驟S301、判斷該SQL語句執(zhí)行對(duì)象中的selectKey屬性對(duì)象是否非空。若步驟S301的判斷結(jié)果為是,則執(zhí)行步驟S302。步驟S302、執(zhí)行selectKey屬性對(duì)象中內(nèi)置的SQL語句以獲得序列值。若步驟S301的判斷結(jié)果為否,則執(zhí)行步驟S303。步驟S303、判斷該SQL語句執(zhí)行對(duì)象中的classKey屬性對(duì)象是否非空。若步驟S303的判斷結(jié)果為是,則執(zhí)行步驟S304。步驟S304、動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象。步驟S305、根據(jù)與所述序列生成器對(duì)應(yīng)的預(yù)先定義的序列生成方法獲得序列值。若步驟S303的判斷結(jié)果為否,則本方法流程結(jié)束。通常情況下,同一屬性名keyProperty只對(duì)應(yīng)于selectKey屬性對(duì)象和classKey屬性對(duì)象其中之一。當(dāng)selectKey屬性對(duì)象和classKey屬性對(duì)象具有相同的屬性名keyProperty時(shí),一般優(yōu)先處理selectKey屬性對(duì)象。當(dāng)selectKey屬性對(duì)象和classKey屬性對(duì)象的屬性名keyProperty不同時(shí),兩者同時(shí)處理。通過這種方式,可以擴(kuò)展Ibatis框架使用場景,兼容支持?jǐn)?shù)據(jù)庫與非數(shù)據(jù)庫方式生產(chǎn)序列值的方法。在解析過程中,同一屬性名keyProperty只對(duì)應(yīng)于selectKey節(jié)點(diǎn)和classKey節(jié)點(diǎn)其中之一。當(dāng)selectKey節(jié)點(diǎn)和classKey節(jié)點(diǎn)具有相同的屬性名keyProperty時(shí),一般優(yōu)先處理selectKey節(jié)點(diǎn)。當(dāng)selectKey節(jié)點(diǎn)和classKey節(jié)點(diǎn)的屬性名keyProperty不同時(shí),兩者同時(shí)處理。。請(qǐng)參見圖4,是使用圖3所示的序列值生成方法進(jìn)行配置文件解析過程的操作步驟流程圖,以根節(jié)點(diǎn)為insert節(jié)點(diǎn)為例,該方法包括:步驟S400、檢測(cè)并加載總配置文件。具體地,在軟件程序或系統(tǒng)啟動(dòng)時(shí),檢測(cè)并加載Ibatis總配置XML格式文件。步驟S401、從總配置文件中讀取并解析預(yù)先定義的數(shù)據(jù)表操作文件,該數(shù)據(jù)表操作文件包括classKey節(jié)點(diǎn)配置。步驟S402、解析該數(shù)據(jù)表操作文件中的insert節(jié)點(diǎn),獲取該insert節(jié)點(diǎn)的SQL語句執(zhí)行對(duì)象。步驟S403、判斷該insert節(jié)點(diǎn)中是否存在selectKey子節(jié)點(diǎn)配置。若步驟S403的判斷結(jié)果為是,則執(zhí)行步驟S404。步驟S404、解析該selectKey子節(jié)點(diǎn)并將selectKey執(zhí)行對(duì)象注入到該insert節(jié)點(diǎn)的SQL語句執(zhí)行對(duì)象中。若步驟S403的判斷結(jié)果為否,則執(zhí)行步驟S405。步驟S405、判斷該insert節(jié)點(diǎn)中是否存在classKey子節(jié)點(diǎn)配置。若步驟S405的判斷結(jié)果為是,則執(zhí)行步驟S406。步驟S406、解析該classKey子節(jié)點(diǎn)并將classKey執(zhí)行對(duì)象注入到該insert節(jié)點(diǎn)的SQL語句執(zhí)行對(duì)象中。步驟S407、利用〈鍵名標(biāo)識(shí),SQL語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。若步驟S405的判斷結(jié)果為否,則跳到步驟S407。請(qǐng)參見圖5,是本發(fā)明提供的用于Ibatis方案的序列值生成裝置500的第一實(shí)施例結(jié)構(gòu)示意圖,包括:查找模塊510,用于通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的SQL語句執(zhí)行對(duì)象。其中,鍵名標(biāo)識(shí)可以包括但不限于insert、update、delete、procedure>statement、classKey和selectKey。具體地,當(dāng)軟件程序或系統(tǒng)在運(yùn)行過程中,需要調(diào)用某個(gè)數(shù)據(jù)表操作文件從而執(zhí)行相關(guān)操作時(shí),可以通過用戶輸入的鍵名標(biāo)識(shí)查找與該鍵名標(biāo)識(shí)對(duì)應(yīng)的SQL語句執(zhí)行對(duì)象。序列生成器構(gòu)建模塊520,用于當(dāng)所述結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為非空時(shí),動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,其中所述classKey屬性對(duì)象為預(yù)先定義的利用java類方法的classKey節(jié)點(diǎn)對(duì)應(yīng)的屬性對(duì)象。具體地,可以根據(jù)Java反射機(jī)制動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,也可以利用IOC容器(例如springbean)代理對(duì)象注入方式動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象。序列值生成模塊530,用于根據(jù)與所述序列生成器對(duì)應(yīng)的預(yù)先定義的序列生成方法獲得序列值。本發(fā)明提供的序列值生成裝置,通過動(dòng)態(tài)構(gòu)建序列生成器,利用預(yù)先定義的序列生成方法獲取序列值,可以將Ibatis主鍵序列值生成方法擴(kuò)展到自定義的某個(gè)Java類方法(即自定義的序列生成器),而不再僅限于數(shù)據(jù)庫方式。具體地,圖5所示的實(shí)施例中,若classKey為輸入的鍵名標(biāo)識(shí),序列值生成模塊530生成序列值之后,可以直接將該序列值作為返回值返回給SQL語句執(zhí)行對(duì)象中的classKey屬性對(duì)象,以便外部程序執(zhí)行該SQL語句,完成鍵名標(biāo)識(shí)對(duì)應(yīng)的操作。若classKey不是輸入的鍵名標(biāo)識(shí),序列值生成模塊530生成序列值之后,先將該序列值作為返回值返回給SQL語句執(zhí)行對(duì)象中的classKey屬性對(duì)象,然后根據(jù)SQL語句執(zhí)行對(duì)象中的鍵名標(biāo)識(shí)對(duì)應(yīng)的語句(例如insert語句)構(gòu)建JDBC (Java Data Base Connectivity, java數(shù)據(jù)庫連接)執(zhí)行對(duì)象,根據(jù)用戶輸入的參數(shù)進(jìn)行參數(shù)賦值,然后執(zhí)行相應(yīng)的SQL語句(例如insert語句),從而可以完成鍵名標(biāo)識(shí)對(duì)應(yīng)的操作。另外,若SQL語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為空,則直接根據(jù)SQL語句執(zhí)行對(duì)象中的相應(yīng)語句構(gòu)建JDBC執(zhí)行對(duì)象,根據(jù)用戶輸入的參數(shù)進(jìn)行參數(shù)賦值,然后執(zhí)行該語句。在完成生成序列值的過程之前,在軟件程序或系統(tǒng)啟動(dòng)時(shí),往往需要先加載總配置文件,解析出執(zhí)行對(duì)象,并進(jìn)行存儲(chǔ),其中總配置文件通常為XML格式。請(qǐng)參見圖6,是本發(fā)明提供的用于Ibatis方案的序列值生成裝置600的結(jié)構(gòu)示意圖。序列值生成裝置600包括查找模塊610、序列生成器構(gòu)建模塊620、序列值生成模塊630、配置文件加載模塊640、配置文件解析模塊650、insert執(zhí)行對(duì)象獲取模塊660、claSSKey注入模塊670和存儲(chǔ)模塊680。其中,查找模塊610、序列生成器構(gòu)建模塊620、序列值生成模塊630分別與查找模塊
510、序列生成器構(gòu)建模塊520、序列值生成模塊530類似。配置文件加載模塊640,用于檢測(cè)并加載總配置文件。具體地,在軟件程序或系統(tǒng)啟動(dòng)時(shí),配置文件加載模塊640檢測(cè)并加載Ibatis總配置XML格式文件。配置文件解析模塊650,用于從總配置文件中讀取并解析預(yù)先定義的數(shù)據(jù)表操作文件,該數(shù)據(jù)表操作文件包括classKey節(jié)點(diǎn)配置。具體地,配置文件解析模塊650遍歷Ibatis總配置文件,循環(huán)讀取已預(yù)先定義的數(shù)據(jù)表操作文件SQLmap并解析,其中數(shù)據(jù)表操作文件SQLmap中新增了 classKey節(jié)點(diǎn)配置。更具體地,除了新增的classKey節(jié)點(diǎn)配置,數(shù)據(jù)表操作文件SQLmap中還預(yù)先定義了類ClassKeySource和類ClassKeyStatement。其中,ClassKeySource用于創(chuàng)建ClassKey解析結(jié)果對(duì)象,ClassKeyStatement用于通過classKey解析結(jié)果對(duì)象創(chuàng)建ClassKey執(zhí)行對(duì)象。例如,ClassKey節(jié)點(diǎn)的屬性包括返回值類型resultClass、屬性名稱keyProperty、類型type、序列生成器Java類全名className和序列生成方法methodName??蛇x地,classKey節(jié)點(diǎn)的屬性還可以包括序列生成方法輸入?yún)?shù)類型paramTypes和序列生成方法輸入?yún)?shù)值args,其中paramTypes與args匹配對(duì)應(yīng),且paramTypes可以包括支持Java的任意基本數(shù)據(jù)類型和字符串。另外,ClassKeySource的屬性可以包括序列生成器Java類全名className和序列生成方法methodName,可選地,還可以包括序列生成方法輸入?yún)?shù)類型paramTypes和序列生成方法輸入?yún)?shù)值args。ClasssKeystatement 的屬性可以包括 ClassKeySource。根節(jié)點(diǎn)解析模塊660,用于解析該數(shù)據(jù)表操作文件中的根節(jié)點(diǎn),并判斷根節(jié)點(diǎn)是否為classKey節(jié)點(diǎn);若根節(jié)點(diǎn)為classKey節(jié)點(diǎn),則獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象;若根節(jié)點(diǎn)不是classKey節(jié)點(diǎn),則獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象,并判斷所述根節(jié)點(diǎn)中是否有子節(jié)點(diǎn)為classKey節(jié)點(diǎn)。注入模塊670,用于分別解析所述classKey節(jié)點(diǎn)并將所述classKey節(jié)點(diǎn)對(duì)應(yīng)的classKey執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中。具體地,Ibatis框架中SQLmap配置類MappedStatementConfig定義中包括新增的對(duì)ClassKeyStatement的注入處理,因此,注入模塊670可以包括=ClassKey解析模塊,用于當(dāng)該根節(jié)點(diǎn)中存在classKey子節(jié)點(diǎn)配置時(shí),解析該classKey子節(jié)點(diǎn),獲取解析結(jié)果對(duì)象;classKey執(zhí)行對(duì)象構(gòu)建模塊,用于將解析結(jié)果對(duì)象構(gòu)建轉(zhuǎn)化為執(zhí)行對(duì)象;claSSKey執(zhí)行對(duì)象注入模塊,用于將該執(zhí)行對(duì)象注入到該根節(jié)點(diǎn)的SQL語句執(zhí)行對(duì)象中。存儲(chǔ)模塊680,用于利用〈鍵名標(biāo)識(shí),SQL語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。這樣,查找模塊610就可以根據(jù)鍵名標(biāo)識(shí)查找解析得到的SQL語句執(zhí)行對(duì)象了。請(qǐng)參見圖7,是本發(fā)明提供的用于Ibatis方案的序列值生成裝置700的結(jié)構(gòu)示意圖,以根節(jié)點(diǎn)為insert節(jié)點(diǎn)為例。序列值生成裝置700包括查找模塊710、序列生成器構(gòu)建模塊720、序列值生成模塊730、配置文件加載模塊740、配置文件解析模塊750、根節(jié)點(diǎn)解析模塊760、注入模塊770、存儲(chǔ)模塊780和selectKey處理模塊790、selectKey注入模塊795。其中,查找模塊710、序列生成器構(gòu)建模塊720、序列值生成模塊730、配置文件加載模塊740、配置文件解析模塊750、根節(jié)點(diǎn)解析模塊760、注入模塊770、存儲(chǔ)模塊780分別與查找模塊610、序列生成器構(gòu)建模塊620、序列值生成模塊630、配置文件加載模塊640、配置文件解析模塊650、根節(jié)點(diǎn)解析模塊660、注入模塊670、存儲(chǔ)模塊680類似。selectKey處理模塊790,用于當(dāng)查找模塊710查找得到的SQL語句執(zhí)行對(duì)象中的selectKey屬性對(duì)象為非空時(shí),執(zhí)行selectKey屬性對(duì)象中內(nèi)置的SQL語句以獲得序列值。selectKey注入模塊795,用于當(dāng)根節(jié)點(diǎn)解析模塊解析出的insert節(jié)點(diǎn)中存在selectKey子節(jié)點(diǎn)配置時(shí),解析該selectKey子節(jié)點(diǎn)并將selectKey執(zhí)行對(duì)象注入到該insert節(jié)點(diǎn)的SQL語句執(zhí)行對(duì)象中。通常情況下,同一屬性名keyProperty只對(duì)應(yīng)于selectKey屬性對(duì)象(或selectKey節(jié)點(diǎn))和classKey屬性對(duì)象(或classKey節(jié)點(diǎn))其中之一。當(dāng)selectKey屬性對(duì)象(或selectKey節(jié)點(diǎn))和classKey屬性對(duì)象(或classKey節(jié)點(diǎn))具有相同的屬性名keyProperty時(shí),一般優(yōu)先處理selectKey屬性對(duì)象(或selectKey節(jié)點(diǎn))。當(dāng)selectKey屬性對(duì)象(或selectKey節(jié)點(diǎn))和classKey屬性對(duì)象(或classKey節(jié)點(diǎn))的屬性名keyProperty不同時(shí),兩者同時(shí)處理。通過這種方式,可以擴(kuò)展Ibatis框架使用場景,兼容支持?jǐn)?shù)據(jù)庫與非數(shù)據(jù)庫方式生產(chǎn)序列值的方法。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(RandomAccessMemory, RAM)等。以上所揭露的僅為本發(fā)明一種較佳實(shí)施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
權(quán)利要求
1.一種用于Ibatis方案的序列值生成方法,其特征在于,包括: 通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的結(jié)構(gòu)化查詢語句執(zhí)行對(duì)象; 當(dāng)所述結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為非空時(shí),動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,其中所述classKey屬性對(duì)象為預(yù)先定義的利用java類方法的classKey節(jié)點(diǎn)對(duì)應(yīng)的屬性對(duì)象; 根據(jù)與所述序列生成器對(duì)應(yīng)的預(yù)先定義的序列生成方法生成序列值。
2.如權(quán)利要求1所述的用于Ibatis方案的序列值生成方法,其特征在于,所述方法還包括以下步驟: 在所述通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象的步驟之前,檢測(cè)并加載總配置文件; 從所述總配置文件中讀取并解析預(yù)先定義的數(shù)據(jù)表操作文件,所述數(shù)據(jù)表操作文件包括classKey節(jié)點(diǎn)配置; 解析所述數(shù)據(jù)表操作文件中的根節(jié)點(diǎn),當(dāng)所述根節(jié)點(diǎn)為classKey節(jié)點(diǎn)時(shí),獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象; 利用〈鍵名標(biāo)識(shí),結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。
3.如權(quán)利要求2所述的用于Ibatis方案的序列值生成方法,其特征在于,所述方法還包括: 當(dāng)所述根節(jié)點(diǎn)不是classKey節(jié)點(diǎn)時(shí),獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象,并判斷所述根節(jié)點(diǎn)中是否有子節(jié)點(diǎn)為classKey節(jié)點(diǎn); 若所述根節(jié)點(diǎn)中有子節(jié)點(diǎn)為classKey節(jié)點(diǎn),分別解析所述classKey節(jié)點(diǎn)并將所述classKey節(jié)點(diǎn)對(duì)應(yīng)的classKey執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中; 利用〈鍵名標(biāo)識(shí),結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。
4.如權(quán)利要求3所述的用于Ibatis方案的序列值生成方法,其特征在于,所述解析所述classKey節(jié)點(diǎn)并將所述classKey節(jié)點(diǎn)對(duì)應(yīng)的classKey執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的步驟具體包括: 解析所述classKey節(jié)點(diǎn),獲取解析結(jié)果對(duì)象; 將所述解析結(jié)果對(duì)象構(gòu)建轉(zhuǎn)化為執(zhí)行對(duì)象; 將所述執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中。
5.如權(quán)利要求1-4中任一項(xiàng)所述的用于Ibatis方案的序列值生成方法,其特征在于,所述ClassKey子節(jié)點(diǎn)的屬性包括返回值類型resultClass、屬性名稱keyProperty、類型type、序列生成器Java類全名className和序列生成方法methodName。
6.一種用于Ibatis方案的序列值生成裝置,其特征在于,包括: 查找模塊,用于通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的結(jié)構(gòu)化查詢語句執(zhí)行對(duì)象; 序列生成器構(gòu)建模塊,用于當(dāng)所述結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為非空時(shí),動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,其中所述classKey屬性對(duì)象為預(yù)先定義的利用java類方法的classKey節(jié)點(diǎn)對(duì)應(yīng)的屬性對(duì)象; 序列值生成模塊,用于根據(jù)與所述序列生成器對(duì)應(yīng)的預(yù)先定義的序列生成方法生成序列值。
7.如權(quán)利要求6所述的用于Ibatis方案的序列值生成裝置,其特征在于,所述序列值生成裝置還包括: 配置文件加載模塊,用于檢測(cè)并加載總配置文件; 配置文件解析模塊,用于從所述總配置文件中讀取并解析預(yù)先定義的數(shù)據(jù)表操作文件,所述數(shù)據(jù)表操作文件包括classKey節(jié)點(diǎn)配置; 根節(jié)點(diǎn)解析模塊,用于解析所述數(shù)據(jù)表操作文件中的根節(jié)點(diǎn),當(dāng)所述根節(jié)點(diǎn)為classKey節(jié)點(diǎn)時(shí),獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象; 存儲(chǔ)模塊,用于利用〈鍵名標(biāo)識(shí),結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象 > 對(duì)組合的鏈表結(jié)構(gòu)存儲(chǔ)所述數(shù)據(jù)表操作文件。
8.如權(quán)利要求7所述的用于Ibatis方案的序列值生成裝置,其特征在于,所述根節(jié)點(diǎn)解析模塊還用于當(dāng)所述根節(jié)點(diǎn)不是classKey節(jié)點(diǎn)時(shí),獲取所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象,并判斷所述根節(jié)點(diǎn)中是否有子節(jié)點(diǎn)為classKey節(jié)點(diǎn); 所述序列值生成裝置還包括: 注入模塊,用于當(dāng)所述根節(jié)點(diǎn)中有子節(jié)點(diǎn)為classKey節(jié)點(diǎn)時(shí),分別解析所述classKey節(jié)點(diǎn)并將所述classKey節(jié)點(diǎn)對(duì)應(yīng)的classKey執(zhí)行對(duì)象注入到所述根節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中。
9.如權(quán)利要求8所述的用 于Ibatis方案的序列值生成裝置,其特征在于,所述注入模塊包括: classKey解析模塊,用于解析所述classKey節(jié)點(diǎn),獲取解析結(jié)果對(duì)象;classKey執(zhí)行對(duì)象構(gòu)建模塊,用于將所述解析結(jié)果對(duì)象構(gòu)建轉(zhuǎn)化為執(zhí)行對(duì)象;classKey執(zhí)行對(duì)象注入模塊,用于將所述執(zhí)行對(duì)象注入到所述insert節(jié)點(diǎn)的結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中。
10.如權(quán)利要求6-9中任一項(xiàng)所述的用于Ibatis方案的序列值生成裝置,其特征在于,所述ClassKey子節(jié)點(diǎn)的屬性包括返回值類型resultClass、屬性名稱keyProperty、類型type、序列生成器Java類全名className和序列生成方法methodName。
全文摘要
本發(fā)明實(shí)施例公開了一種序列值生成方法及裝置,該方法包括通過用戶輸入的鍵名標(biāo)識(shí)查找與所述鍵名標(biāo)識(shí)對(duì)應(yīng)的結(jié)構(gòu)化查詢語句執(zhí)行對(duì)象;當(dāng)所述結(jié)構(gòu)化查詢語言語句執(zhí)行對(duì)象中的classKey屬性對(duì)象為非空時(shí),動(dòng)態(tài)構(gòu)建預(yù)先定義的序列生成器對(duì)象,其中所述classKey屬性對(duì)象為預(yù)先定義的利用java類方法的classKey節(jié)點(diǎn)對(duì)應(yīng)的屬性對(duì)象;根據(jù)與所述序列生成器對(duì)應(yīng)的預(yù)先定義的序列生成方法生成序列值??梢詫batis主鍵序列值生成方法擴(kuò)展到自定義的某個(gè)Java類方法,而不再僅限于數(shù)據(jù)庫方式。
文檔編號(hào)G06F9/44GK103116622SQ20131003478
公開日2013年5月22日 申請(qǐng)日期2013年1月30日 優(yōu)先權(quán)日2013年1月30日
發(fā)明者王興春 申請(qǐng)人:深圳聯(lián)友科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
贺州市| 赤水市| 通辽市| 泌阳县| 平山县| 英超| 荥阳市| 万全县| 桐乡市| 民权县| 涟源市| 定襄县| 衡水市| 益阳市| 南京市| 衡南县| 得荣县| 洪泽县| 洛扎县| 南城县| 子长县| 乌鲁木齐市| 伊金霍洛旗| 图们市| 外汇| 东乡族自治县| 普洱| 金华市| 常熟市| 辽源市| 阿城市| 邯郸市| 剑河县| 清镇市| 高邮市| 禹城市| 民权县| 盈江县| 府谷县| 吉安市| 建德市|