本申請(qǐng)涉及sql數(shù)據(jù)庫,尤其是涉及一種sql語句動(dòng)態(tài)執(zhí)行方法及裝置。
背景技術(shù):
1、現(xiàn)有解析并執(zhí)行mybatis的xmlsql語句有兩種方式:第一種方式是編寫mapper接口,編寫對(duì)應(yīng)的mapperxml文件,在service層通過注入的方式,調(diào)用并執(zhí)行mapper借口的xmlsql來操作數(shù)據(jù)庫。第二種方式是直接執(zhí)行sql語句。
2、現(xiàn)有技術(shù)方案的策略是在執(zhí)行的時(shí)候必須要預(yù)先編譯然后啟動(dòng)服務(wù)。編譯完成后,代碼不可修改,即只能執(zhí)行程序員預(yù)先編寫完成的xmlsql,無法實(shí)現(xiàn)動(dòng)態(tài)解析執(zhí)行,無法實(shí)現(xiàn)用戶實(shí)時(shí)增加新的sql操作,缺乏靈活性。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本申請(qǐng)?zhí)峁┝艘环Nsql語句動(dòng)態(tài)執(zhí)行方法及裝置,該方法能夠?qū)崿F(xiàn)實(shí)時(shí)編寫sql操作語句,然后按照mybatis的執(zhí)行流程執(zhí)行sql操作語句,方便靈活且易于操作。
2、第一方面,本申請(qǐng)實(shí)施例提供一種sql語句動(dòng)態(tài)執(zhí)行方法,包括:
3、獲取待執(zhí)行的sql操作語句;
4、創(chuàng)建mapper接口并生成mapper接口的接口方法,將所述sql操作語句寫入到所述接口方法中,得到所述sql操作語句的類名、方法名和字節(jié)碼;
5、利用預(yù)先定義的加載器將所述sql操作語句的類名、方法名和字節(jié)碼加載到內(nèi)存中;
6、基于所述sql操作語句的類名、方法名和字節(jié)碼,利用預(yù)先構(gòu)建的sqlsessionfactory對(duì)象創(chuàng)建一個(gè)sqlsession對(duì)象;
7、利用所述sqlsession對(duì)象運(yùn)行所述接口方法,以執(zhí)行所述sql操作語句對(duì)應(yīng)的數(shù)據(jù)庫操作。
8、在一種的可能實(shí)現(xiàn)中,創(chuàng)建mapper接口并生成mapper接口的接口方法,將所述sql操作語句寫入到所述接口方法中,得到所述sql操作語句的類名、方法名和字節(jié)碼,包括:
9、利用classwriter方法創(chuàng)建mapper接口,通過版本控制工具定義所述mapper接口的類名;
10、利用methodwriter方法動(dòng)態(tài)生成所述mapper接口的接口方法,通過版本控制工具定義所述接口方法的方法名;
11、將所述sql操作語句以注解的方式寫入到所述mapper接口的接口方法中,得到對(duì)應(yīng)的字節(jié)碼。
12、在一種的可能實(shí)現(xiàn)中,所述方法還包括:
13、定義一個(gè)加載器classloader;
14、對(duì)加載器classloader的defineclass方法進(jìn)行重新編寫,其中,所述defineclass方法將所述字節(jié)碼轉(zhuǎn)化為class對(duì)象。
15、在一種的可能實(shí)現(xiàn)中,所述方法還包括:
16、基于所述sql操作語句生成xml格式的配置文件;
17、基于所述配置文件,創(chuàng)建單實(shí)例的sqlsessionfactory對(duì)象。
18、在一種的可能實(shí)現(xiàn)中,基于所述sql操作語句的類名、方法名和字節(jié)碼,利用預(yù)先構(gòu)建的sqlsessionfactory對(duì)象創(chuàng)建一個(gè)sqlsession對(duì)象,包括:
19、調(diào)用sqlsessionfactory對(duì)象的opensession方法;
20、利用opensession方法對(duì)所述sql操作語句的類名、方法名和字節(jié)碼進(jìn)行操作,創(chuàng)建一個(gè)sqlsession對(duì)象。
21、在一種的可能實(shí)現(xiàn)中,利用所述sqlsession對(duì)象運(yùn)行所述接口方法,以進(jìn)行所述sql操作語句對(duì)應(yīng)的數(shù)據(jù)庫操作,包括:
22、調(diào)用所述sqlsession對(duì)象的getmapper方法獲取所述mapper接口;
23、調(diào)用所述mapper接口的接口方法以進(jìn)行所述sql操作語句對(duì)應(yīng)的數(shù)據(jù)庫操作,所述數(shù)據(jù)庫操作包括:插入數(shù)據(jù)、更新數(shù)據(jù)、刪除數(shù)據(jù)和查詢數(shù)據(jù)的至少一個(gè)。
24、在一種的可能實(shí)現(xiàn)中,所述方法還包括:
25、釋放所述sqlsessionfactory對(duì)象所占用的資源。
26、第二方面,本申請(qǐng)實(shí)施例提供一種sql語句動(dòng)態(tài)執(zhí)行裝置,包括:
27、獲取單元,用于獲取待執(zhí)行的sql操作語句;
28、第一處理單元,用于創(chuàng)建mapper接口并生成mapper接口的接口方法,將所述sql操作語句寫入到所述接口方法中,得到所述sql操作語句的類名、方法名和字節(jié)碼;
29、加載單元,用于利用預(yù)先定義的加載器將所述sql操作語句的類名、方法名和字節(jié)碼加載到內(nèi)存中;
30、第二處理單元,用于基于所述sql操作語句的類名、方法名和字節(jié)碼,利用預(yù)先構(gòu)建的sqlsessionfactory對(duì)象創(chuàng)建一個(gè)sqlsession對(duì)象;
31、操作單元,用于利用所述sqlsession對(duì)象運(yùn)行所述接口方法,以執(zhí)行所述sql操作語句對(duì)應(yīng)的數(shù)據(jù)庫操作。
32、第三方面,本申請(qǐng)實(shí)施例提供了一種電子設(shè)備,包括:存儲(chǔ)器、處理器和存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)本申請(qǐng)實(shí)施例的方法。
33、第四方面,本申請(qǐng)實(shí)施例一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器運(yùn)行時(shí)實(shí)現(xiàn)本申請(qǐng)實(shí)施例的方法。
34、本申請(qǐng)的方法能夠?qū)崿F(xiàn)實(shí)時(shí)執(zhí)行新編寫的sql操作語句,方便靈活且易于操作。
1.一種sql語句動(dòng)態(tài)執(zhí)行方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的sql語句動(dòng)態(tài)執(zhí)行方法,其特征在于,創(chuàng)建mapper接口并生成mapper接口的接口方法,將所述sql操作語句寫入到所述接口方法中,得到所述sql操作語句的類名、方法名和字節(jié)碼,包括:
3.根據(jù)權(quán)利要求1所述的sql語句動(dòng)態(tài)執(zhí)行方法,其特征在于,所述方法還包括:
4.根據(jù)權(quán)利要求1所述的sql語句動(dòng)態(tài)執(zhí)行方法,其特征在于,所述方法還包括:
5.根據(jù)權(quán)利要求4所述的sql語句動(dòng)態(tài)執(zhí)行方法,其特征在于,基于所述sql操作語句的類名、方法名和字節(jié)碼,利用預(yù)先構(gòu)建的sqlsessionfactory對(duì)象創(chuàng)建一個(gè)sqlsession對(duì)象,包括:
6.根據(jù)權(quán)利要求1所述的sql語句動(dòng)態(tài)執(zhí)行方法,其特征在于,利用所述sqlsession對(duì)象運(yùn)行所述接口方法,以進(jìn)行所述sql操作語句對(duì)應(yīng)的數(shù)據(jù)庫操作,包括:
7.根據(jù)權(quán)利要求1所述的sql語句動(dòng)態(tài)執(zhí)行方法,其特征在于,所述方法還包括:
8.一種sql語句動(dòng)態(tài)執(zhí)行裝置,其特征在于,包括:
9.一種電子設(shè)備,其特征在于,包括:存儲(chǔ)器、處理器和存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)如權(quán)利要求1-7任一項(xiàng)所述的方法。
10.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)指令,所述計(jì)算機(jī)指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)如權(quán)利要求1-7任一項(xiàng)所述的方法。