摘要:最近我準(zhǔn)備寫一個(gè)這樣的庫,基于前期自己對(duì)的封裝是我使用過的一個(gè)框架,對(duì)它的模型模塊調(diào)用的方式很喜歡因此決定參考其,用實(shí)現(xiàn)一次。
在我自己的平常開發(fā)中很少有見到j(luò)avascript對(duì)sql的封裝比較好的庫(找了一圈也沒找到、應(yīng)該是暫時(shí)我沒發(fā)現(xiàn)),因此前期的項(xiàng)目中根據(jù)自己的項(xiàng)目情況實(shí)現(xiàn)了一套封裝方法。
最近我準(zhǔn)備寫一個(gè)這樣的庫,基于前期自己對(duì)mysql的封裝(ThinkPHP是我使用過的一個(gè)PHP框架,對(duì)它的模型模塊調(diào)用sql的方式很喜歡) 因此決定參考其API,用javascript實(shí)現(xiàn)一次。
node-transform-mysql想表達(dá)什么
node.js連接mysql的庫有很多,因此覺得沒必要自己再封裝一個(gè),為了達(dá)到庫的廣泛使用性,因此此庫只做生成SQL語句的功能封裝
整個(gè)api采用鏈?zhǔn)秸{(diào)用的方式,這樣能最大化的減少開發(fā)代碼和使用自由度
鏈?zhǔn)秸{(diào)用方法順序內(nèi)部已經(jīng)做了排序,因此可以不按嚴(yán)格的sql語句順序來使用方法
sql調(diào)用方法直接參考ThinkPHP的api,因此不用自己再從新定義方法名稱
自由、簡潔、使用簡單是它想表達(dá)出來的
完整的API說明文檔,寫文檔比寫代碼更累,時(shí)間更久,可見開源框架文檔的難能可貴,為它們致敬
進(jìn)入正文:
簡介:node-transform-mysql是在node.js場景中使用mysql,根據(jù)傳入的參數(shù)生成相應(yīng)的sql語句。它所做的事情很簡單也很專一,只負(fù)責(zé)生成sql語句,不執(zhí)行任何實(shí)際的增刪改查。你也不用擔(dān)心它的體量,整體代碼300行左右,壓縮之后代碼不足8k。
github地址:https://github.com/wangweiang...
npm地址:https://www.npmjs.com/package...
API文檔地址:https://wangweianger.gitbooks...
安裝:
npm install node-transform-mysql 然后使用一個(gè)支持 CommonJS 或 ES2015 的模塊管理器,例如 webpack: // 使用 ES6 的轉(zhuǎn)譯器,如 babel import sql from node-transform-mysql // 不使用 ES6 的轉(zhuǎn)譯器 var sql = require("node-transform-mysql") sql調(diào)用方法的順序內(nèi)部已經(jīng)做了排序,因此可以不按嚴(yán)格的sql語句順序來寫
簡單用法
查詢
sql .table("node_table") .where("id=1") .select() SELECT * FROM node_table WHERE id=1 sql .table("node_table") .field("id,name") .where({id:1}) .select() SELECT id,name FROM node_table WHERE id=1
插入
sql .table("node_table") .data({name:"zane",email:"752636052@qq.com"}) .insert() INSERT INTO node_table (name,email) VALUES (`zane`,`752636052@qq.com`)
更新
sql .table("node_table") .data({name:"zane",email:"752636052@qq.com"}) .update() UPDATE node_table SET name=`zane`,email=`752636052@qq.com`
刪除
sql .table("node_table") .where({name:"zane"}) .delet(); DELETE FROM node_table WHERE name=`zane`
高級(jí)用法
數(shù)據(jù)庫的查詢是最復(fù)雜的,因此高級(jí)用法主要針對(duì)于查詢
//參數(shù)json多字段 sql .table("node_table") .where({id:1,name:"zane"}) .select() SELECT * FROM node_table WHERE id=1 AND name=`zane` //參數(shù)數(shù)組 let data=[ {id:1,name:"zhangsan",_type:"or"}, {sex:1,number:3} ] sql.table("node_table").where(data).select() SELECT * FROM node_table WHERE (id=1 OR name=`zhangsan` ) AND (sex=1 AND number=3 ) //多字段連接方式 let data=[ {id:1,name:"zhangsan",_type:"or",_nexttype:"or"}, {sex:1,number:3,_type:"and"} ] sql.table("node_table").where(data).select() SELECT * FROM node_table WHERE (id=1 OR name=`zhangsan`) OR (sex=1 AND number=3) //表達(dá)式查詢 let data={ id:{eq:100,egt:10,_type:"or"}, name:"zhangshan" } sql.table("node_table").where(data).select() SELECT * FROM node_table WHERE ((id=100) OR (id>=10)) AND name=`zhangshan` //混合查詢 let data=[{ id:{eq:100,egt:10,_type:"or"}, name:"zhangshan", _nexttype:"or" },{ status:1, name:{like:"%zane%"} }] sql.table("node_table").where(data).select() SELECT * FROM node_table WHERE (((id=100) OR (id>=10)) AND name=`zhangshan`) OR (status=1 AND ((name LIKE `%zane%`))) //UNION , UNION ALL 組合使用 sql .union("SELECT * FROM think_user_1",true) .union("SELECT * FROM think_user_2",true) .union(["SELECT * FROM think_user_3","SELECT name FROM think_user_4"]) .union("SELECT * FROM think_user_5",true) .select() 得到 (SELECT * FROM think_user_1) UNION ALL (SELECT * FROM think_user_2) UNION ALL (SELECT * FROM think_user_3) UNION (SELECT name FROM think_user_4) UNION (SELECT * FROM think_user_5) //子查詢 let sqlstring = sql.field("id,name").table("node_table").group("field") sql.table(sqlstring).group("field").where("id=1").order("status").select() 得到 SELECT * FROM (SELECT id,name FROM node_table GROUP BY field ) WHERE id=1 GROUP BY field ORDER BY status
更多用法請查看詳細(xì)文檔
API文檔地址:https://wangweianger.gitbooks...
項(xiàng)目運(yùn)行
git clone https://github.com/wangweianger/node-transform-mysql.git npm install //dve npm run dve //product npm run build
此庫后期也會(huì)根據(jù)自己的使用不斷的完善,也歡迎您的建議
如果你絕對(duì)對(duì)你有幫助,歡迎給個(gè)star
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94091.html
摘要:簡介項(xiàng)目命名為就是一個(gè)服務(wù)器單純開發(fā)一個(gè)服務(wù)器的想法,變成構(gòu)建網(wǎng)絡(luò)應(yīng)用的一個(gè)基本框架發(fā)展為一個(gè)強(qiáng)制不共享任何資源的單線程,單進(jìn)程系統(tǒng)。單線程弱點(diǎn)無法利用多核錯(cuò)誤會(huì)引起整個(gè)應(yīng)用退出,應(yīng)用的健壯性大量計(jì)算占用導(dǎo)致無法繼續(xù)調(diào)用異步。 NodeJs簡介 Ryan Dahl項(xiàng)目命名為:web.js 就是一個(gè)Web服務(wù)器.單純開發(fā)一個(gè)Web服務(wù)器的想法,變成構(gòu)建網(wǎng)絡(luò)應(yīng)用的一個(gè)基本框架.Node發(fā)展...
摘要:本文同步自我得博客最近準(zhǔn)備折騰一下,在事先了解了之后,我知道了對(duì)這個(gè)庫有著強(qiáng)依賴,正好之前也沒使用過,于是我就想先把徹底了解一下,這樣之后折騰的時(shí)候也少一點(diǎn)阻礙。 本文同步自我得博客:http://www.joeray61.com 最近準(zhǔn)備折騰一下backbone.js,在事先了解了backbone之后,我知道了backbone對(duì)underscore這個(gè)庫有著強(qiáng)依賴,正好undersc...
摘要:以下展示它是如何工作的函數(shù)使用構(gòu)造函數(shù)創(chuàng)建一個(gè)新的對(duì)象,并立即將其返回給調(diào)用者。在傳遞給構(gòu)造函數(shù)的函數(shù)中,我們確保傳遞給,這是一個(gè)特殊的回調(diào)函數(shù)。 本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書筆記,在GitHub連載更新,同步翻譯版鏈接。 歡迎關(guān)注我的專欄,之后的博文將在專欄同步: Encounter的掘金專欄 知乎專欄...
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個(gè)符合規(guī)范并可配合使用的寫一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過...
閱讀 3226·2021-10-13 09:40
閱讀 3688·2019-08-30 15:54
閱讀 1309·2019-08-30 13:20
閱讀 2993·2019-08-30 11:26
閱讀 475·2019-08-29 11:33
閱讀 1099·2019-08-26 14:00
閱讀 2357·2019-08-26 13:58
閱讀 3366·2019-08-26 10:39