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