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