基于 Node.js 和 mysql 模块封装的基本的数据库连接类及增删改查方法示例

请根据实际项目需求调整配置和SQL语句。

// 导入mysql模块
const mysql = require('mysql');

// 创建数据库连接池配置
const poolConfig = {
  host: 'localhost', // 数据库主机地址
  user: 'yourusername', // 数据库用户名
  password: 'yourpassword', // 数据库密码
  database: 'yourdatabase', // 数据库名
  port: 3306, // 数据库端口,默认为3306
  connectionLimit: 10, // 连接池中最大连接数
};

// 创建数据库连接池
const pool = mysql.createPool(poolConfig);

class DBManager {
  /**
   * 执行SQL查询
   * @param {String} sql - SQL语句
   * @param {Array} params - SQL参数列表
   * @returns {Promise} 返回Promise对象,resolve查询结果或reject错误信息
   */
  query(sql, params) {
    return new Promise((resolve, reject) => {
      pool.query(sql, params, (error, results, fields) => {
        if (error) {
          return reject(error);
        }
        resolve(results);
      });
    });
  }

  /**
   * 插入数据
   * @param {String} table - 表名
   * @param {Object} data - 要插入的数据对象,键值对形式
   * @returns {Promise} 返回Promise对象,resolve影响行数或reject错误信息
   */
  insert(table, data) {
    let keys = Object.keys(data).join(', ');
    let values = Object.values(data).map(() => '?').join(', ');
    
    let sql = `INSERT INTO ${table} (${keys}) VALUES (${values})`;
    let params = Object.values(data);

    return this.query(sql, params);
  }

  /**
   * 更新数据
   * @param {String} table - 表名
   * @param {Object} data - 更新的数据对象,键值对形式
   * @param {Object} condition - 更新条件,例如:{id: 1}
   * @returns {Promise} 返回Promise对象,resolve影响行数或reject错误信息
   */
  update(table, data, condition) {
    let setValues = Object.entries(data)
      .map(([key, value]) => `${key} = ?`)
      .join(', ');

    let conditionSql = '';
    let conditionParams = [];
    for (let key in condition) {
      conditionSql += `${key} = ? AND `;
      conditionParams.push(condition[key]);
    }
    conditionSql = `WHERE ${conditionSql.slice(0, -5)}`;

    let sql = `UPDATE ${table} SET ${setValues} ${conditionSql}`;
    let params = [...Object.values(data), ...conditionParams];

    return this.query(sql, params);
  }

  /**
   * 删除数据
   * @param {String} table - 表名
   * @param {Object} condition - 删除条件,例如:{id: 1}
   * @returns {Promise} 返回Promise对象,resolve影响行数或reject错误信息
   */
  delete(table, condition) {
    let conditionSql = '';
    let conditionParams = [];
    for (let key in condition) {
      conditionSql += `${key} = ? AND `;
      conditionParams.push(condition[key]);
    }
    conditionSql = `WHERE ${conditionSql.slice(0, -5)}`;

    let sql = `DELETE FROM ${table} ${conditionSql}`;
    let params = conditionParams;

    return this.query(sql, params);
  }

  /**
   * 查询数据
   * @param {String} table - 表名
   * @param {Object} condition - 查询条件,例如:{name: 'John'}
   * @param {String} [fields='*'] - 需要查询的字段,默认为所有字段
   * @returns {Promise} 返回Promise对象,resolve查询结果或reject错误信息
   */
  select(table, condition = {}, fields = '*') {
    let whereSql = '';
    let whereParams = [];
    for (let key in condition) {
      whereSql += `${key} = ? AND `;
      whereParams.push(condition[key]);
    }
    whereSql = whereSql ? `WHERE ${whereSql.slice(0, -5)}` : '';

    let sql = `SELECT ${fields} FROM ${table} ${whereSql}`;
    let params = whereParams;

    return this.query(sql, params);
  }
}

module.exports = DBManager;

使用这个封装后的类时,你可以像下面这样进行操作:

const DB = require('./DBManager');

// 创建数据库操作实例
const db = new DB();

// 插入数据示例
db.insert('users', { name: 'John Doe', email: 'john.doe@example.com' })
  .then(result => console.log('Inserted rows:', result.affectedRows))
  .catch(err => console.error('Insert error:', err));

// 查询数据示例
db.select('users', { id: 1 }, 'name, email')
  .then(rows => console.log('Selected rows:', rows))
  .catch(err => console.error('Select error:', err));

// 更新数据示例
db.update('users', { email: 'new.email@example.com' }, { id: 1 })
  .then(result => console.log('Updated rows:', result.affectedRows))
  .catch(err => console.error('Update error:', err));

// 删除数据示例
db.delete('users', { id: 2 })
  .then(result => console.log('Deleted rows:', result.affectedRows))
  .catch(err => console.error('Delete error:', err));

上述代码没有处理事务,如果需要进行涉及多个操作的事务处理,请在封装时增加相应的事务管理方法。同时,为了防止SQL注入,请始终确保传入给query函数的参数是经过适当验证和清理的数据

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于在 Node.js 中使用 MySQL 进行增删操作,你可以使用以下步骤: 1. 首先,确保你已经安装了 `mysql` 模块。你可以通过在终端中运行以下命令来安装它: ``` npm install mysql ``` 2. 在你的 Node.js 代码中,引入 `mysql` 模块: ```javascript const mysql = require('mysql'); ``` 3. 创建与数据库连接: ```javascript const connection = mysql.createConnection({ host: '数据库主机名', user: '用户名', password: '密码', database: '数据库名称' }); connection.connect((err) => { if (err) { console.error('数据库连接失败:', err); return; } console.log('数据库连接成功!'); }); ``` 4. 执行 SQL 询语句: ```javascript const sql = 'SELECT * FROM 表名'; connection.query(sql, (err, results) => { if (err) { console.error('询失败:', err); return; } console.log('询结果:', results); }); ``` 5. 执行 SQL 插入、更新或删除语句: ```javascript const insertSql = 'INSERT INTO 表名 (列1, 列2) VALUES (?, ?)'; const insertValues = ['值1', '值2']; connection.query(insertSql, insertValues, (err, result) => { if (err) { console.error('插入失败:', err); return; } console.log('插入成功,插入的行数:', result.affectedRows); }); const updateSql = 'UPDATE 表名 SET 列1 = ? WHERE 列2 = ?'; const updateValues = ['新值', '条件值']; connection.query(updateSql, updateValues, (err, result) => { if (err) { console.error('更新失败:', err); return; } console.log('更新成功,更新的行数:', result.affectedRows); }); const deleteSql = 'DELETE FROM 表名 WHERE 列 = ?'; const deleteValues = ['条件值']; connection.query(deleteSql, deleteValues, (err, result) => { if (err) { console.error('删除失败:', err); return; } console.log('删除成功,删除的行数:', result.affectedRows); }); ``` 6. 最后,记得在完成操作后关闭数据库连接: ```javascript connection.end((err) => { if (err) { console.error('关闭数据库连接失败:', err); return; } console.log('数据库连接已关闭!'); }); ``` 这样,你就可以在 Node.js 中使用 MySQL 进行增删操作了。记得将上述代码中的主机名、用户名、密码、数据库名称、表名、列名、条件值等根据你的实际情况进行替换。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值