对于sql不熟悉的人不是很友好,而且复用并不是很方便,所以封装了这个链式方法库(可能有些地方写得不是很好)!但是我会尽力去完善它!
我是Yoyo感谢您的浏览!!!!
import YoyoMysql from 'yoyomysql';
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
};
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:'说得是这样?'}
]);
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();
const result =await YoyoMysql.table('user')//需要操作的完整表名
.where('id',1)//获取你可以添加一些条件 (id = 1)
.update({
rmb:99999,
name:'我被修改了'
})
.update(['name',`'被修改了'`]);
// 注意这个是原始数据 字符串需要自行增加 单引号
.update([
['name', "'被修改了'"],
['rmb', 'rmb+1']
]);
!!!!!!!!!!!!!查询返回值有修改哦!!!!!看我
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)
const result = await YoyoMysql.table('user').where('id', '>', 1).order('id','DESC').pages(1,2);
console.log(result);
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 回调里面执行)
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 是 '你的值'
}
// 报错或者执行完成的时候 会自动是否这个连接
//如果还是没有您需要的你可以自己编写sql使用以下的方法执行
await YoyoMysql.query(sql);//执行并返回
await YoyoMysql.query(sql,bind);//执行并返回 (它有一个可选参数绑定就是预处理方式)
await YoyoMysql.execute(sql);
await YoyoMysql.execute(sql,bind);//使用方式和上面雷同