在我本身的日常開發中不多有見到javascript對sql的封裝比較好的庫(找了一圈也沒找到、應該是暫時我沒發現),所以前期的項目中根據本身的項目狀況實現了一套封裝方法。javascript
最近我準備寫一個這樣的庫,基於前期本身對mysql的封裝(ThinkPHP是我使用過的一個PHP框架,對它的模型模塊調用sql的方式很喜歡) 所以決定參考其API,用javascript實現一次。java
node-transform-mysql想表達什麼node
進入正文:
簡介: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