在我自己的平常開發(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)用、使用簡單