node-transform-mysql , js對mysql封裝庫,鏈?zhǔn)秸{(diào)用,文檔完善

在我自己的平常開發(fā)中很少有見到j(luò)avascript對sql的封裝比較好的庫(找了一圈也沒找到、應(yīng)該是暫時(shí)我沒發(fā)現(xiàn))黄痪,因此前期的項(xiàng)目中根據(jù)自己的項(xiàng)目情況實(shí)現(xiàn)了一套封裝方法劫乱。

最近我準(zhǔn)備寫一個(gè)這樣的庫缠借,基于前期自己對mysql的封裝(ThinkPHP是我使用過的一個(gè)PHP框架邑跪,對它的模型模塊調(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地址:github.com/wangweiange…

npm地址:www.npmjs.com/package/nod…

API文檔地址:wangweianger.gitbooks.io/node-transf…

安裝:

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`

刪除

let data=[{
        id:1,
        name:'zane'
    },{
        sex:1,
        address:'shenzheng'
    }]

DELETE FROM node_table WHERE name=`zane`

高級(jí)用法

數(shù)據(jù)庫的查詢是最復(fù)雜的未舟,因此高級(jí)用法主要針對于查詢

//參數(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文檔地址:wangweianger.gitbooks.io/node-transf…

項(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ù)自己的使用不斷的完善掂为,也歡迎您的建議

如果你絕對對你有幫助裕膀,歡迎給個(gè)star

關(guān)注我的博客:zane的個(gè)人博客

原文地址:專屬node.js調(diào)用mysql數(shù)據(jù)庫封裝開發(fā)的node-transform-mysql庫 鏈?zhǔn)秸{(diào)用、使用簡單

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勇哗,一起剝皮案震驚了整個(gè)濱河市昼扛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌欲诺,老刑警劉巖抄谐,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渺鹦,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛹含,警方通過查閱死者的電腦和手機(jī)毅厚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浦箱,“玉大人吸耿,你說我怎么就攤上這事≡髅” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵锤岸,是天一觀的道長竖幔。 經(jīng)常有香客問我,道長是偷,這世上最難降的妖魔是什么拳氢? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮蛋铆,結(jié)果婚禮上馋评,老公的妹妹穿的比我還像新娘。我一直安慰自己刺啦,他們只是感情好留特,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玛瘸,像睡著了一般蜕青。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糊渊,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天右核,我揣著相機(jī)與錄音,去河邊找鬼渺绒。 笑死贺喝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宗兼。 我是一名探鬼主播躏鱼,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼殷绍!你這毒婦竟也來了挠他?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤篡帕,失蹤者是張志新(化名)和其女友劉穎殖侵,沒想到半個(gè)月后贸呢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拢军,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年楞陷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茉唉。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡固蛾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出度陆,到底是詐尸還是另有隱情艾凯,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布懂傀,位于F島的核電站趾诗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蹬蚁。R本人自食惡果不足惜恃泪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望犀斋。 院中可真熱鬧贝乎,春花似錦、人聲如沸叽粹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虫几。三九已至朽肥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間持钉,已是汗流浹背衡招。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留每强,地道東北人始腾。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像空执,于是被迫代替她去往敵國和親浪箭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359