如何通過(guò)執(zhí)行SQL為低代碼項(xiàng)目提速?
見(jiàn)多了SQL為代碼開(kāi)發(fā)提速,那么當(dāng)?shù)痛a遇到SQL會(huì)擦出怎樣的火花呢?本文將低代碼和SQL結(jié)合進(jìn)行介紹,讓大家了解如何通過(guò)執(zhí)行SQL為低代碼項(xiàng)目提速。
背景
自從計(jì)算機(jī)誕生的一刻起,如何讓計(jì)算機(jī)能夠按照人類(lèi)的需求進(jìn)行工作,滿足人類(lèi)的需要就成為了一個(gè)問(wèn)題,于是便誕生了計(jì)算機(jī)語(yǔ)言。最初的計(jì)算機(jī)語(yǔ)言是由0和1構(gòu)成的機(jī)器語(yǔ)言,用二進(jìn)制代碼表示的計(jì)算機(jī)能直接識(shí)別和執(zhí)行的一種機(jī)器指令的集合,運(yùn)行快,但是不容易使用,上手困難且難易理解。為了克服機(jī)器語(yǔ)言的缺點(diǎn),人們將機(jī)器指令的代碼用英文助記符來(lái)表示,代替機(jī)器語(yǔ)言中的指令和數(shù)據(jù)。便誕生了第二代編程語(yǔ)言——匯編語(yǔ)言,匯編語(yǔ)言在一定程度中克服了機(jī)器語(yǔ)言難以學(xué)習(xí)使用的缺點(diǎn),同時(shí)保證了執(zhí)行速度快的優(yōu)點(diǎn),但是匯編語(yǔ)言的通用性,可讀性還是很低。于是就誕生了以人類(lèi)的日常語(yǔ)言為基礎(chǔ)的一種編程語(yǔ)言,就是第三代編程語(yǔ)言——高級(jí)語(yǔ)言,像我們熟知的JAVA、JS、C#等都屬于第三代編程語(yǔ)言。
(圖片來(lái)源于網(wǎng)絡(luò))
高級(jí)語(yǔ)言與計(jì)算機(jī)的硬件結(jié)構(gòu)及指令系統(tǒng)無(wú)關(guān),它有更強(qiáng)的表達(dá)能力,可方便地表示數(shù)據(jù)的運(yùn)算和程序的控制結(jié)構(gòu),能更好地描述格中算法,而且更易學(xué)習(xí)掌握,也是目前被程序員所使用的最為廣泛的語(yǔ)言,但是,第三代語(yǔ)言對(duì)于業(yè)務(wù)人員來(lái)說(shuō)還是難以理解。需要在編程上有專(zhuān)門(mén)的訓(xùn)練才能使用。
于是,便誕生了第四代語(yǔ)言,即面向問(wèn)題的語(yǔ)言。第四代語(yǔ)言是非常高級(jí)的語(yǔ)言,用戶只需要簡(jiǎn)單的培訓(xùn)即可參與編程,解決特定的問(wèn)題。同時(shí),第四代語(yǔ)言比第三代語(yǔ)言更接近日常語(yǔ)言,更容易編程,更廣泛地被非專(zhuān)業(yè)程序員所使用。像我們今天的主角——SQL就屬于第四代語(yǔ)言,使用者并不需要告訴計(jì)算機(jī)要怎么做,只需要告訴它執(zhí)行命令內(nèi)容即可。而低代碼平臺(tái)誕生可以追溯到第四代語(yǔ)言,第四代語(yǔ)言的主要特點(diǎn)就是簡(jiǎn)單易學(xué)、上手快。那使用第四代語(yǔ)言SQL再加上本來(lái)開(kāi)發(fā)周期就短的低代碼,能擦出怎么樣的火花呢?
SQL與低代碼的碰撞
我們先來(lái)看看沒(méi)有使用SQL功能的低代碼是如何開(kāi)發(fā)一個(gè)項(xiàng)目與數(shù)據(jù)庫(kù)進(jìn)行交互的,這里使用企業(yè)級(jí)低代碼開(kāi)發(fā)平臺(tái)-活字格為例向大家介紹?;钭指裰惺怯袛?shù)據(jù)庫(kù)這個(gè)概念的,而且活字格在更新迭代的過(guò)程中也有從“無(wú)執(zhí)行SQL功能”到“有執(zhí)行SQL功能”的一個(gè)變化,這一過(guò)程正好可以作為展示執(zhí)行SQL為低代碼提速的最好例子。
早些時(shí)候,大多數(shù)的低代碼平臺(tái)沒(méi)有直接執(zhí)行SQL功能,平臺(tái)通過(guò)一些類(lèi)似SQL功能去實(shí)現(xiàn)數(shù)據(jù)處理,比如活字格中的odata、數(shù)據(jù)表操作等功能,以實(shí)現(xiàn)執(zhí)行數(shù)據(jù)表基本的DML操作。但是一旦明對(duì)更加復(fù)雜的業(yè)務(wù)場(chǎng)景,需要執(zhí)行SQL才能實(shí)現(xiàn)時(shí),就不免顯得捉襟見(jiàn)肘。其性能對(duì)比執(zhí)行SQL命令也有顯著差距,可以看到使用執(zhí)行SQL命令原本需要73秒才能做完的插入5000行數(shù)據(jù)操作,現(xiàn)在1.5秒的時(shí)間就可以完成了。
(插入方式比較)
由此可見(jiàn)在低代碼項(xiàng)目中執(zhí)行SQL可以大大提升低代碼項(xiàng)目的搭建速度,提升低代碼開(kāi)發(fā)效率,使得開(kāi)發(fā)效率本來(lái)就較高的低
代碼項(xiàng)目效率更高,那說(shuō)了這么多執(zhí)行SQL的優(yōu)點(diǎn),如何在低代碼項(xiàng)目中執(zhí)行SQL呢。還是以活字格這款企業(yè)級(jí)低代碼開(kāi)發(fā)平臺(tái)來(lái)舉例。
使用SQL功能可以實(shí)現(xiàn)很多復(fù)雜的功能,比如:編寫(xiě)和調(diào)用存儲(chǔ)過(guò)程、創(chuàng)建臨時(shí)表、創(chuàng)建表索引、創(chuàng)建多個(gè)聯(lián)合查詢等。這里找兩個(gè)簡(jiǎn)單的例子給大家介紹一下如何在低代碼項(xiàng)目中使用SQL?,F(xiàn)在有數(shù)據(jù)表的設(shè)計(jì)如下:課程表(課程號(hào)、課程名、學(xué)分)、學(xué)生表(學(xué)號(hào)、姓名、性別、專(zhuān)業(yè))、分?jǐn)?shù)表(學(xué)號(hào)、課程號(hào)、分?jǐn)?shù))。然后現(xiàn)在的需求是輸入課程名和學(xué)生名來(lái)查詢這個(gè)學(xué)生的分?jǐn)?shù),那在活字格中怎么做呢,我們一起來(lái)操作下。
首先設(shè)置前端頁(yè)面,將活字格中的文本框單元格類(lèi)型,按鈕單元格類(lèi)型,設(shè)置在活字格的設(shè)計(jì)器頁(yè)面中。
(圖片來(lái)源于活字格)
新建一個(gè)服務(wù)端命令,增加參數(shù)學(xué)生名,和課程名參數(shù),命令中新建執(zhí)行SQL命令,數(shù)據(jù)庫(kù)選擇內(nèi)建庫(kù)(如果使用外聯(lián)數(shù)據(jù)庫(kù)也可以通過(guò)連接字符串直接在外聯(lián)數(shù)據(jù)庫(kù)中操作),添加學(xué)生名和課程名參數(shù),參數(shù)值直接從服務(wù)端命令接收的參數(shù)值中獲取即可,寫(xiě)SQL語(yǔ)句如下SELECT 分?jǐn)?shù)表.分?jǐn)?shù) FROM 分?jǐn)?shù)表 join 課程表 on 分?jǐn)?shù)表.課程號(hào) = 課程表.課程號(hào) join 學(xué)生表 on 分?jǐn)?shù)表.學(xué)號(hào) = 學(xué)生表.學(xué)號(hào) where 學(xué)生表.姓名=@學(xué)生名 and 課程表.課程名 =@課程名;將執(zhí)行SQL結(jié)果,也就是返回值寫(xiě)到變量SQL數(shù)組中。由于執(zhí)行SQL命令返回的結(jié)果是一個(gè)json對(duì)象數(shù)組,所以需要使用循環(huán)命令去取得數(shù)組中的每個(gè)Json對(duì)象,再去取值即可。這里示例中當(dāng)確定了姓名和課程名之后,分?jǐn)?shù)就確定了,也就是SQL查詢的結(jié)果中只有一條記錄,所以循環(huán)第一次就可以使用返回命令將分?jǐn)?shù)的值返回出來(lái)。
(圖片來(lái)源于活字格)
在頁(yè)面中的按鈕再使用調(diào)用服務(wù)端命令,調(diào)用構(gòu)建好的SQL命令。學(xué)生名和課程名選擇設(shè)計(jì)好的文本框,將返回值返回到頁(yè)面中的分?jǐn)?shù)。這樣就實(shí)現(xiàn)了這個(gè)需求了。
(圖片來(lái)源于活字格)
我們可以看一下執(zhí)行效果,學(xué)生名輸入張三,課程名輸入語(yǔ)文,點(diǎn)擊查詢,分?jǐn)?shù)便顯示88。
(圖片來(lái)源于活字格)
這樣,這個(gè)需求在低代碼中就可以通過(guò)執(zhí)行SQL實(shí)現(xiàn)了。我們來(lái)?yè)Q一下需求,改為輸入一個(gè)學(xué)生名查詢出這個(gè)學(xué)生全部課程的成績(jī)。還是以活字格為例,我們只需對(duì)上面的一些步驟做更改即可。
首先,設(shè)置頁(yè)面的步驟中,將課程名和課程名后的文本框刪除掉,分?jǐn)?shù)區(qū)域改為設(shè)置一個(gè)表格,表格中有課程列和分?jǐn)?shù)列。
(圖片來(lái)源于活字格)
服務(wù)端命令中刪除課程名參數(shù),服務(wù)端命令中的執(zhí)行SQL命令也刪除課程名參數(shù),修改SQL語(yǔ)句如下SELECT 分?jǐn)?shù)表、分?jǐn)?shù)、課程表、課程名 FROM、分?jǐn)?shù)表 join 課程表 on 分?jǐn)?shù)表、課程號(hào) = 課程表、課程號(hào) join 學(xué)生表 on 分?jǐn)?shù)表、學(xué)號(hào) = 學(xué)生表、學(xué)號(hào) where 學(xué)生表、姓名=@學(xué)生名,直接將查詢的數(shù)組結(jié)果返回出去。
(圖片來(lái)源于活字格)
在前端調(diào)用時(shí),將調(diào)用服務(wù)端命令的結(jié)果保存在SQL數(shù)組變量中,然后直接使用導(dǎo)入Json數(shù)據(jù)到表格命令將json對(duì)象數(shù)組導(dǎo)入到表格。
(圖片來(lái)源于活字格)
可以看到,在瀏覽器中文本框輸入張三,點(diǎn)擊查詢,即可查詢出張三全部的課程和分?jǐn)?shù)。由此可見(jiàn),通過(guò)執(zhí)行SQL可以大大的提升低代碼項(xiàng)目的開(kāi)發(fā)效率,在需求變化是也能很高速的通過(guò)修改SQL語(yǔ)句和低代碼工程實(shí)現(xiàn)更改后的需求。
(圖片來(lái)源于活字格)
當(dāng)然,這里只舉了兩個(gè)簡(jiǎn)單的例子來(lái)為大家展示如何通過(guò)執(zhí)行SQL為低代碼項(xiàng)目提速,一些更復(fù)雜的需求如編寫(xiě)和調(diào)用存儲(chǔ)過(guò)程,創(chuàng)建臨時(shí)表等,都是可以通過(guò)執(zhí)行SQL在低代碼項(xiàng)目中實(shí)現(xiàn)的。大家如果感興趣的話,可以找找相關(guān)的低代碼產(chǎn)品來(lái)更詳細(xì)地了解一下。