node.js對mysql數據庫封裝庫node-transform-mysql庫 鏈式調用、使用簡單、文檔完善

在我本身的日常開發中不多有見到javascript對sql的封裝比較好的庫(找了一圈也沒找到、應該是暫時我沒發現),所以前期的項目中根據本身的項目狀況實現了一套封裝方法。javascript

最近我準備寫一個這樣的庫,基於前期本身對mysql的封裝(ThinkPHP是我使用過的一個PHP框架,對它的模型模塊調用sql的方式很喜歡) 所以決定參考其API,用javascript實現一次。java

node-transform-mysql想表達什麼node

  • node.js鏈接mysql的庫有不少,所以以爲不必本身再封裝一個,爲了達到庫的普遍使用性,所以此庫只作生成SQL語句的功能封裝
  • 整個api採用鏈式調用的方式,這樣能最大化的減小開發代碼和使用自由度
  • 鏈式調用方法順序內部已經作了排序,所以能夠不按嚴格的sql語句順序來使用方法
  • sql調用方法直接參考ThinkPHP的api,所以不用本身再重新定義方法名稱
  • 自由、簡潔、使用簡單是它想表達出來的
  • 完整的API說明文檔,寫文檔比寫代碼更累,時間更久,可見開源框架文檔的難能難得,爲它們致敬

進入正文:
簡介:node-transform-mysql是在node.js場景中使用mysql,根據傳入的參數生成相應的sql語句。它所作的事情很簡單也很專注,只負責生成sql語句,不執行任何實際的增刪改查。你也不用擔憂它的體量,總體代碼300行左右,壓縮以後代碼不足8k。mysql

github地址:https://github.com/wangweiang...webpack

npm地址:https://www.npmjs.com/package...git

API文檔地址:https://wangweianger.gitbooks...github

安裝:web

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

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

相關文章
相關標籤/搜索