node mysql 插件_mysqls,为node.js而编写的sql语句生成插件 (crud for mysql).

It is written in JavaScript,crud for mysql.You can also use transactions very easily.

mysqls 一款专为node.js生成sql语句的插件,链式调用,使用灵活。支持生成sql语法,也支持生成语法之后直接调用,支持事物等特性。

API参考很流行的ThinkPHP模型API。

mysqls是笔者在开发过程中为了更简单、更高效的开发效率而封装的一个库,年初做的,最近从新小修改和加强了一下。分享给有需要的人,感兴趣的也可以看看笔者的思路。因为个人使用过ThinkPHP,认为其对mysql的封装调用方式是非常友好和易用的,因此绝大部分api参考其中。如果你有其他的意见和建议也希望可以跟我分享。

安装:

npm install mysqls --save-dev

mysqls参数说明

init: sql初始化API

exec: 执行sql语句

sql: 链式调用生成sql语句,支持生成后直接执行sql语句

transaction: 执行事务API

项目使用:

//import方式

import { init, exec, sql, transaction } from 'mysqls'

//require方式

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

mysql配置初始化:

//可在项目的启动时初始化配置

init({

host:'localhost',

user:'root',

password:'123456',

database:'test',

port:3306,

})

init 参数说明

ispool: 是否以连接池的方式初始化 (default:true)

host: host地址 (default:'127.0.0.1')

user: 用户名 (default:'root')

password: 数据库密码 (default:'root')

database: 使用的数据库 (default:'test')

port: 端口 (default:'3306')

waitConnection: 是否等待链接(连接池时使用) (default:true)

connectionLimit: 连接池大小 (default:10)

queueLimit: 排队限制 (default:0)

只生成sql语句

sql

.table('node_table')

.field('id,name')

.where({id:1})

.select()//result

SELECT id,name FROM node_table WHERE id=1

使用exec函数执行sql语句

const sqlstr =sql

.table('node_table')

.field('id,name')

.where({id:1})

.select();

const result= await exec(sqlstr);

使用sql.prototype.exec链式调用

const result =sql

.table('node_table')

.field('id,name')

.where({id:1})

.select(true)

.exec();

链式调用执行sql时select方法需要传参数:true

同样适合update(true),insert(true),delet(true),query(true)方法

使用Promise方式

//使用 exec 函数

exec(sql.table('web_pages').where({id:147}).select())

.then(res=>{

console.log(res)

}).catch(err=>{

console.log(err)

})//使用 exec 方法

sql.table('web_pages').where({id:147}).select(true).exec()

.then(res=>{

console.log(res)

}).catch(err=>{

console.log(err)

})

使用async/await

//使用 exec 函数

const result = await exec(sql.table('web_pages').where({id:147}).select())//使用 exec 方法

const result = await sql.table('web_pages').where({id:147}).select(true).exec()

处理事务

const tranSqlArr =[

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

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

]

const result= await transaction(tranSqlArr)

生成sql语句简单用法

备注:sql调用方法的顺序内部已经做了排序,因此可以不按严格的sql语句顺序来写

查询

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)

更多用法请查看详细文档:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值