请根据实际项目需求调整配置和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
函数的参数是经过适当验证和清理的数据