日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 事物封装_mysqls 一个node对mysql的封装库 链式调用、支持事务

發布時間:2024/10/8 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 事物封装_mysqls 一个node对mysql的封装库 链式调用、支持事务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我自己的平常開發中很少有見到javascript對sql的封裝比較好的庫(找了一圈也沒找到、應該是暫時我沒發現),因此前期的項目中根據自己的項目情況實現了一套封裝方法。

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

mysqls想表達什么node.js連接mysql的庫有很多,因此覺得沒必要自己再封裝一個,為了達到庫的廣泛使用性,因此此庫只做生成SQL語句的功能封裝

整個api采用鏈式調用的方式,這樣能最大化的減少開發代碼和使用自由度

鏈式調用方法順序內部已經做了排序,因此可以不按嚴格的sql語句順序來使用方法

sql調用方法直接參考ThinkPHP的api,因此不用自己再從新定義方法名稱

自由、簡潔、使用簡單是它想表達出來的

完整的API說明文檔,寫文檔比寫代碼更累,時間更久,可見開源框架文檔的難能可貴,為它們致敬

進入正文:

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

安裝:

npm install mysqls --save-dev

然后使用一個支持 CommonJS 或 ES2015 的模塊管理器,例如 webpack:

//import方式

import { execute,sql,transaction } from 'mysqls'

//require方式

let { execute,sql,transaction } = require('mysqls')

參數說明

execute :執行單挑sql語句 參數:(config,sqlStr)

sql :鏈式調用生成sql語句 鏈式調用語法,參考后文

transaction :執行事務相關任務時使用 參數:(config,sqlArr)

定義一個公共的config配置

let config={

host:'localhost',

user:'root',

password:'123456',

database:'web-performance',

port:'3306',

}

使用Promise方式

//使用

let sqlstr = sql.table('web_pages').where({id:147}).select()

execute(config,sqlstr).then(res=>{

console.log(res)

}).catch(err=>{

console.log(err)

})

使用async/await

let sqlstr = sql.table('web_pages').where({id:147}).select()

let result = await execute(config,sqlstr)

console.log(result)

處理事務

let tranSqlArr = [

sql.table('table1').data({number:number-5}).update(),

sql.table('table2').data({number:number+5}).update()

]

let result = await transaction(config,tranSqlArr)

console.log(result)

生成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`

生成sql語句高級用法

數據庫的查詢是最復雜的,因此高級用法主要針對于查詢

//參數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

更多用法請查看詳細文檔

項目運行

git clone https://github.com/wangweianger/mysqls.git

npm install

//dve

npm run dve

//product

npm run build

此庫后期也會根據自己的使用不斷的完善,也歡迎您的建議

如果你絕對對你有幫助,歡迎給個star

總結

以上是生活随笔為你收集整理的mysql 事物封装_mysqls 一个node对mysql的封装库 链式调用、支持事务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。