简介
mysql-qbuilder 是一个 Node.js 的 ORM 查询构建器,用于方便地构建复杂的 SQL 语句。该库支持 MySQL 和 MariaDB 数据库。相比于其他 ORM 库,mysql-qbuilder 更加轻量化和自由化,允许使用原生 SQL 语句和输入参数绑定。本文将介绍 mysql-qbuilder 如何安装和使用,并给出一些示例。
安装
在项目根目录下执行以下命令:
npm install mysql-qbuilder
或者,当你希望在全局使用时,可以这样:
npm install -g mysql-qbuilder
使用
在项目中引入 mysql-qbuilder:
const mysql = require('mysql'); const qBuilder = require('mysql-qbuilder');
连接到数据库
const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'mydb', }); connection.connect();
基础查询
在 mysql-qbuilder 中,可以直接使用原生 SQL 语句进行查询:
const [result, fields] = await qBuilder.query(connection, 'SELECT * FROM mytable'); console.log(result);
上述代码会查询 mydb 数据库中名为 mytable 的数据表中的全部数据,并输出到控制台。
参数占位符
mysql-qbuilder 也支持使用参数占位符来预防 SQL 注入攻击。
const id = 1; const name = 'Alice'; const [result, fields] = await qBuilder.query(connection, 'SELECT * FROM mytable WHERE id = ? OR name = ?', [id, name]); console.log(result);
使用参数占位符可以避免将变量直接拼接到 SQL 语句中,从而提高了查询安全性。
构建查询
mysql-qbuilder 的主要功能还是构建查询,可以使用链式方法构建复杂的 SQL 语句。比如:
const q = qBuilder.select('*') .from('mytable') .where(qBuilder.or(qBuilder.where('id', 1), qBuilder.where('name', 'Alice'))) .orderBy('id', 'DESC') .limit(0, 10); const [result, fields] = await qBuilder.query(connection, q.toString()); console.log(result);
上述代码使用 select、from、where、orderBy 和 limit 方法构建了一个查询,查询 mydb 数据库中名为 mytable 的数据表中 id 为 1 或者 name 为 Alice 的数据,并按照 id 倒序排列,最后取出前 10 行数据输出。
插入、更新和删除
mysql-qbuilder 同样支持插入、更新和删除操作。
插入:
const [result, fields] = await qBuilder.query(connection, qBuilder.insert('mytable', {name: 'Alice'}).toString()); console.log(result);
更新:
const [result, fields] = await qBuilder.query(connection, qBuilder.update('mytable', {name: 'Bob'}).where(qBuilder.where('id', 1)).toString()); console.log(result);
删除:
const [result, fields] = await qBuilder.query(connection, qBuilder.delete('mytable').where(qBuilder.where('id', 1)).toString()); console.log(result);
事务
在 mysql-qbuilder 中使用事务可以保证数据的一致性和完整性,避免多个操作之间产生的竞态条件。
try { await qBuilder.transaction(connection, async (q) => { await q.query(qBuilder.insert('mytable', {name: 'Alice'}).toString()); await q.query(qBuilder.insert('mytable', {name: 'Bob'}).toString()); }); } catch (err) { console.log(err); }
上述代码使用了 transaction 方法来执行事务,其中传递了一个回调函数,回调函数中执行两次插入操作,如果其中一次操作失败,就会回滚整个事务。
总结
mysql-qbuilder 是一个非常方便的 SQL 语句构建器,支持原生 SQL 语句和参数占位符,同时也提供了插入、更新和删除操作。在使用 mysql-qbuilder 构建 SQL 语句时,可以使用链式方法来构建复杂的查询。事务功能可以保证数据的一致性和完整性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600559e781e8991b448d78eb