mysql-model-orm
mysql-model-orm 主要是node 操作mysql 的常用的增删改查的封装,主要特点是用法简单,链式调用,主要实现是利用sql 的特点特点进行sql封装,sql的防注入利用的是mysql 模块的方法转义,不用担心这个,默认是用链接池进行连接,主要的方法都是返回promise
要求 node>7.6 ,使用了 async 方法
第一类:主要方法:返回promise
-
查询
- select():查所有数据
- findOne():查一条数据
- pageSelect():分页查询
-
增加
- add(option):单个、批量添加; {string|object|array} option
- thenAdd(data,where): where条件查询后不存在则添加 {object}:data {object}:where
-
更新
- update(option):单个更新 {object} option
- updateMany(data,options):批量更新,{object}:data 更新的数据;{object}:options:更新的条件
- thenUpdate(data,where):按where条件查询后数据不存在,则更新:{object}:data 更新的数据;{object}:where:查询条件
-
删除
- delete():一定要结合where使用
-
聚合函数
- min(filed):最小值
- max(filed):最大值
- count(filed):总个数
- sum(filed):总和
-
直接返回 sql(不执行)
- buildSql()
-
事务
- transaction(option):{Array}
-
原始方法
- execsql()
参数转义 escape()
第二类:辅助添加函数,一定要在主要函数前调用 - table():表名 (有表前缀的直接写) - where();条件 - field():指定字段 - limit():限制个数 - group(): 分组 - having(): 分组添加;参数用法和where一样 - distinct():去除重复数据字段
例子:
let model = ; // 创建实例 var Model = "host": "localhost"//主机名/ip "user": "root"//用户名 "password": ""//密码 "port": 3306//端口 "database": "koajs" //连接的库
利用trycatch捕获可能出现的错误,因为返回的是promise 也可以用.catch 回调
1、select():查询数据
async { await Model; }
2、findOne():查询一条数据
async { await Model; }
3、field(val):{string|array},指定字段查询
async { await Model; }
4、where(option):{string|object|array} 按条件查询
async { //(1):string await Model; // sql=>from tk_tab where id = 1 //(2):object await Model; //sql=>from tk_tab where id = 1 //(3):array (数组第三个数:"or"|“and"),数组第一,二个:string|object await Model; //sql=>sql=>:select * from tk_tab where ( id = 1 ) or ( id = 3 ) //(4):option.__logic or=>或者,and =>且 await Model; //sql=>:select * from tk_tab where ( id = 1 ) or ( status = 1 ) //(5):option.__complex 复合查询 await Model; //res=>sql -: select * from tk_article where ( title = 'ai') or ( title = '1212' and id != '2' ) //(6): like,notlike await Model; //res=>sql:select * from tk_tab where ( name like '%美%' or name like '%音%' ) //(7):BETWEEN,NOT BETWEEN await Model; //res=>sql: select * from tk_tab where ( id between '1' and '3' ); //(8):IN,NOTIN await Model; //res=>sql:select * from tk_tab where id in ( '1',2,'3' ) ; //(9): =,!= ,>,>=,<,<= ; await Model; //res=>sql:select * from tk_tab where id in ( '1',2,'3' ) ; }
5、order(val):{string|object:array}; 排序:
async { //(1): string=>"name desc"; //(2):object=>{"name":'desc',id:"asc"}; // (3):array=>['name desc","id asc"] await Model; // res=>sql:select * from tk_tab order by id desc; }
6、limit(val):{string|object|arrAry} 查询指定限制个数,page:从第page+1 条开始,查 offset 条
async { // (1).string:"2,10"; // (2).object:{"page":0,"offset":10}; // (3).array:[1,] await Model; //res=>sql:select * from tk_tab limit 3,3 }
6、group(val):{string};分组
async { await Model; //res=>sql:select * from tk_tab group by status ; }
7、hvaing(va;):结合group 方法一起,用法和 where一样
async { await Model; //res=>sql:select * from tk_tab group by status having status = 1 }
8、join(option):string|object|array;连接查询:分为左右连接,内连接
async { //(1).string: "right join tk_cate as c on a.cid=c.id" await Model; //res=>sql:select * from tk_article as a right join tk_cate as c on a.cid=c.id; //(2).object:{table,join,on}=>{table:"tk_cate as c",join:"right",on:"a.cid=c.id"} await Model; //res=>sql:select * from tk_article as a right join tk_cate as c on a.cid=c.id; //(3).array:[string|object],多个join ,可用数组 await Model; }
9、 distinct(val):string,去重字段
async { await Model }
10、add(val):{string|object|array },添加数据,单条、批量
async { await Model; await Model }
11、update(data,where),更新数据单条
async { await Model; await Model; }
12、updateMany(data,{key:更新条件字段}) 批量更新
async { await Model; }
13、 delete() 删除
async { await Model;//条件删除 await Model;//删除全部 }
14、thenAdd(data,where) 查询后不存在则添加
async { await Model; // return {type:"exist",id:""} 或者 {type:"add",id:insertId}; }
15、thenUpdate(data,where)) 查询后不存在则更新
async { // 更新id=1的字段name,如果查询name=123456 如果不存在更新否则返回提示存在 await Model; //return {type:"exist",id:""} 或者 {type:"update",id:""} }
16、 pageSelect() 分页查询
async { await Model; //return {code:200,mssage:"success",count:count,data:res} }
17、buildSql();直接返回sql语句
async { await Model; await Model }
18、transaction(option);事务执行
async { // 演示帖子与标签的一对多的关系,删除标签,连同中间表也要删除 var sql1 = await Model; var sql2 = await Model; await //还可以其他方式写sql ,传值参数方式 //(1) await transaction([{sql,value},{sql,value}]) //(2) await transaction([[sql,value],[sql,value]]) }
19、execsql(sql,option=[]);支持原生sql执行
async { var sql = `select * from tk_user where id=?`; await Model; }