Node Mysql操作封装

本文介绍了一种优化的签到系统设计方法,通过调整SQL结构减少代码量,提高数据库操作效率。使用Node.js的mysql模块创建连接池,执行SQL语句,并通过回调函数处理结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于最近要写个签到系统,频繁的操作mysql导致代码量暴涨,就想着优化下SQL的结构,减少工作量。

'use strict';
var mysql = require('mysql');
// 数据库配置
module.exports = {
    /**
     * 数据库配置
     */
    config: {
        host: 'localhost',
        port: 3306,
        database: 'database',
        user: 'root',
        password: 'root'
    },
    conn: null,
    /**
     * 创建连接池并连接
     * @param callback
     */
    openConn: function (callback) {
        var me = this;
        me.conn = mysql.createConnection(me.config);
    },
    /**
     * 释放连接池
     * @param conn
     */
    closeConn: function () {
        var me = this;
        me.conn.end(function (err) {
            console.log(err);
        });
    },
    /**
     * 执行连接
     * @param config
     */
    exec: function (config) {
        const me = this;
        me.openConn();
        me.conn.query(config.sql, config.params, function (err, res) {
            if (err) {
                console.log(err);
            } else if (config.callback) {
                config.callback(res);
            }
            // 关闭数据库连接
            me.closeConn();
        });
    }
};

//test
var mysqlHandler = require('mysqlHandler');
mysqlHandler.exec({
    sql: 'select * from table where id = ?',
    params: [id],
    callback: function (r) {
        console.log(r);
    }
});

 

### Node.js 中 MySQL 操作封装 对于希望简化并优化在 Node.js 应用程序中与 MySQL 数据库交互过程的开发者来说,创建一个良好的数据库操作层至关重要。这不仅有助于提高代码可读性和维护性,还能增强安全性以及性能表现。 #### 使用 `mysql` 或者更现代的 `mysql2` 模块作为基础 考虑到社区支持和技术演进情况,推荐选用 `mysql2` 替代原始版本较低效能特性的 `mysql` 来建立连接[^1]。安装命令如下: ```bash npm install mysql2 ``` #### 构建基本的数据库连接池类 为了提升效率减少每次请求都重新建立新链接带来的开销,采用连接池机制是一个不错的选择。下面展示了一个简单而实用的例子来说明这一点: ```javascript const mysql = require('mysql2/promise'); class Database { constructor(config) { this.pool = mysql.createPool({ host: config.host, user: config.user, password: config.password, database: config.database, waitForConnections: true, connectionLimit: 10, queueLimit: 0 }); } async executeQuery(sql, params=[]) { try { const [rows] = await this.pool.execute(sql, params); return rows; } catch (error) { throw error; } } close() { this.pool.end(); } } ``` 此段代码定义了一个名为 `Database` 的类,它接受配置对象初始化,并提供了一种安全的方式去执行 SQL 命令。值得注意的是,在这里使用了 `async/await` 结构配合 promise-based API 实现更加直观易懂的操作流程[^3]。 #### 扩展 CRUD 方法 进一步扩展上述例子以包含常见的增删改查(CRUD) 功能是非常有帮助的。以下是几个可能的方法实现: ```javascript // 插入记录 async insert(table, data) { let columns = Object.keys(data).join(", "); let placeholders = Object.values(data).map(() => "?").join(", "); let sql = `INSERT INTO ${table} (${columns}) VALUES (${placeholders})`; return await this.executeQuery(sql, Object.values(data)); } // 更新特定条件下的多条记录 async update(table, updates, whereClause="") { let setPart = Object.entries(updates).map(([key,value])=>`${key}= ?`).join(', '); let conditions = whereClause ? " WHERE "+whereClause : ""; let sql = `UPDATE ${table} SET ${setPart}${conditions}`; return await this.executeQuery(sql, [...Object.values(updates)]); } // 删除符合条件的一或多条记录 async deleteFromTable(table, whereClause="") { let condition = whereClause ? "WHERE " + whereClause : ''; let sql = `DELETE FROM ${table} ${condition}`; return await this.executeQuery(sql); } // 获取表内所有数据或按指定条件筛选后的结果集 async selectAllOrByCondition(table, fields='*', whereClause='') { let fieldList = Array.isArray(fields)?fields.join(','):`${fields}`; let condition = whereClause ? 'WHERE '+whereClause:''; let sql = `SELECT ${fieldList} FROM ${table} ${condition}`; return await this.executeQuery(sql); } ``` 以上方法允许应用程序轻松地对关联表格实施标准的数据操纵动作,同时也保持了灵活性以便应对复杂查询需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tina姐

我就看看有没有会打赏我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值