UNPKG

yoyomysql

Version:

一个链式连接mysql数据库的扩展包

216 lines (172 loc) 6.3 kB
# YoyoMysql 链式操作库 (采用mysql2) ## 前言 对于sql不熟悉的人不是很友好,而且复用并不是很方便,所以封装了这个链式方法库(可能有些地方写得不是很好)!但是我会尽力去完善它! 我是Yoyo感谢您的浏览!!!! ## 引入 ```javascript import YoyoMysql from 'yoyomysql'; ``` ## 连接mysql数据库 ```javascript YoyoMysql.createPool({ host: 'localhost', user: 'root', password: 'root', database: 'yoyo', waitForConnections: true, connectionLimit: 10, maxIdle: 10, // 最大空闲连接数,默认等于 `connectionLimit` idleTimeout: 60000, // 空闲连接超时,以毫秒为单位,默认值为 60000 ms queueLimit: 0, enableKeepAlive: true, keepAliveInitialDelay: 0, }); //这里和mysql2一样的配置数据 // 如果你有mysql2的连接池对象可以直接设置 YoyoMysql.setPool(pool); // 开启sql显示 默认 false YoyoMysql.isShowSql = true; /** * 设置打印sql语句的方法 * @param sql sql语句 * @param highlightSQL 高亮sql方法 */ YoyoMysql.printMethod = (sql, highlightSQL) => { // sql 原生组成的 sql // highlightSQL 高亮sql方法 console.log(highlightSQL(sql));//打印高亮sql }; ``` ## 添加数据 ```javascript const result =await YoyoMysql.table('user')//需要操作的完整表名 .field(['name','account','describe'])//设置字段 .insert(['我是名称',123456,'我是描述']);//添加一条数据 //你也可以添加多条(比如这样) .insert([ ['我是名称1',123456,'我是描述1'], ['我是名称2',123456,'我是描述2'], ]); //或许你想这样做(这样直接指定字段) const result =await YoyoMysql.table('user')//需要操作的完整表名 .insert({name:'我是名称呀',account:9877,describe:'说得是这样?'});//添加一条数据 //任然,你也可以添加多条(比如这样) .insert([ {name:'我是名称呀',account:9877,describe:'说得是这样?'}, {name:'我是名称呀',account:9877,describe:'说得是这样?'} ]); ``` ## 删除数据 ```javascript const result =await YoyoMysql.table('user')//需要操作的完整表名 .where('id',1)//获取你可以添加一些条件 (id = 1) .where('name','<>','yoyo')//获取你可以添加一些条件 (name <> 'yoyo') .where([ ['name','like','%yoyo%'], ['ps','in',[1,2,3,4]], ])//获取你可以添加一些条件 (name like %yoyo% AND ps in (1,2,3,4)) .limit(5)//获取还可以限制删除的条数 .delete(); ``` ## 更新数据(修改) ```javascript const result =await YoyoMysql.table('user')//需要操作的完整表名 .where('id',1)//获取你可以添加一些条件 (id = 1) .update({ rmb:99999, name:'我被修改了' }) .update(['name',`'被修改了'`]); // 注意这个是原始数据 字符串需要自行增加 单引号 .update([ ['name', "'被修改了'"], ['rmb', 'rmb+1'] ]); ``` ## 查询数据 ```javascript !!!!!!!!!!!!!查询返回值有修改哦!!!!!看我 result.data;//查询到的数据 result.field;//字段 result.count;//查询到的数据总数量 const result =await YoyoMysql.table('user')//需要操作的完整表名 .where('id',1)//获取你可以添加一些条件 (id = 1) .find();//查询一条数据 whereOr() //或者 // 子查询 where('id',()=>{ return YoyoMysql.table('qd').whereOr('a2', '=', 222); }); //或者 (子查询 IN) .whereIn('id',()=>{ return YoyoMysql.table('qd').whereOr('a2', '=', 222).whereOr('a2', '=', 222); }); //或者 .select();//查询多条 //你任然可以用 .limit(5) //or .limit(0,18) //去限制它 //我们看看排序 .order('id','DESC')//设置降序 .order({ id:'ASC', rmb:'DESC' }) //你也可以单独设置字段显示默认是 * .field(['id','name'])//只要两个字段 .field('name AS 名称')//或者用来取名也可以 .group('id')//分组查询 .group(['id','name'])//分组查询 .having('count(*) > 1')//分组条件(原始拼接) //多表联查也是支持的 const result = await YoyoMysql.table('user u')//需要操作的完整表名 .join('user2 u2','u.id = u2.id')//你可以这样的当然它还有(leftJoin,rightJoin,fullJoin)他们分别代表(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN) ``` ## 分页查询 ```javascript const result = await YoyoMysql.table('user').where('id', '>', 1).order('id','DESC').pages(1,2); console.log(result); ``` ## 事务操作 ```javascript async function test() { const result = await YoyoMysql.beginTransaction(async (conn) => { await conn.table('user').where('id', '=', 1).delete(); await conn.table('user').where('id', '=', 1).update({ name: '张三' }); }); // result 是true就是成功提交了 是false就是回滚了 // 还有另一种 try catch 的方式 也是异步的 你可以这样 捕获错误 try { await YoyoMysql.beginTransaction(async (conn) => { await conn.table('user').where('id', '=', 1).delete(); await conn.table('user').where('id', '=', 1).update({ name: '张三' }); },true); } catch (error) { // 错误 回滚了 console.log(error); } } // 启动事务(都是异步的你可以用 await 等待它或者 在 then 回调里面执行) ``` ## 获取一条单独的连接 ```javascript async function test() { const result = await YoyoMysql.getOneConnection(async (conn) => { await conn.table('user').where('id', '=', 1).delete(); await conn.table('user').where('id', '=', 1).update({ name: '张三' }); return '你的值'; }); // result 是 '你的值' } // 报错或者执行完成的时候 会自动是否这个连接 ``` ## 原始的查询和执行 ```javascript //如果还是没有您需要的你可以自己编写sql使用以下的方法执行 await YoyoMysql.query(sql);//执行并返回 await YoyoMysql.query(sql,bind);//执行并返回 (它有一个可选参数绑定就是预处理方式) await YoyoMysql.execute(sql); await YoyoMysql.execute(sql,bind);//使用方式和上面雷同 ```