基于nodejs的mysql快速拼接(包含增删改查,事务控制)

本文介绍了一个基于Node.js的MySQL快速拼接工具,涵盖了增删改查及事务控制。通过示例展示了如何拼接SQL条件、执行单表查询、插入数据、删除/修改记录以及使用事务。适合需要进行MySQL操作的Node.js开发者参考。

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

基于nodejs的mysql快速拼接(包含增删改查),事务控制工具,上传此文件只为技术交流;若您有更好的想法,欢迎指正,不胜感激

1、拼接sql后半段条件(字符串返回模式)

sql="select * from tableName where 1=1" + exports.pushParams(con,tableAlias)

 
/**
 * 将Mongodb数据库的查询条件解析为sql查询条件
 *
 * 传入:
 var conditionMap = {
    a:'',//普通传参
    b:'1',
    c:['2','3'],//传递数组 in(arr)
    d:{$nin:[4,5]}, //传递数组 not in (arr)
    $or:[{e:'6'},{f:'7'}],//  或条件  (e=6 or f=7)
    $or1:[{e:'6'},{f:'7'}],// 关键字($or+纯数字)或条件  (e=6 or f=7)
    $or2:[{e:'6'},{f:'7'}],// 或条件  (e=6 or f=7)
    $isnull:['g','h'], // null字段查询  g IS NULL AND h IS NULL
    $null:['g','h'], // null字段查询  g IS NULL AND h IS NULL
    $isnotnull:['k','l'] // not null 字段   k IS NOT NULL AND l IS NOT NULL
    $isnotanull:['k','l'] // not null 字段   k IS NOT NULL AND l IS NOT NULL
    gt:{$gt:6},//  gt大于6
    gte:{$gte:6},//  gte大于等于6
    lt:{$lt:6},//  lt小于6
    lte:{$lte:6},//  lte小于等于6
    ne:{$ne:6}, // ne 不等于 6

    m:null, //这个传参是错的,需要用上面的方法传递空值字段查询条件 $isNull
}
 *
 * 注意:模糊查询时,请将正则表达式变成sql的正则:"%_XXX_%" 形式
 * tableAlias  表名的别名 tableAlias+'.'+i=conditionMap[i]
 *
 * 返回值为“AND ??=?? AND (??=?? OR ??=?? OR(??=?? AND ??=??)) AND ?? IN(??,??) ”
 */
exports.pushParam = function (conditionMap, tableAlias, cb) {
    var err = null;
    var tf = tableAlias && typeof tableAlias == 'string';
    var sql = '';
    if (isEmpty(conditionMap)||Object.prototype.toString.call(conditionMap)!=='[object Object]') {
        err = new Error('sqlParamUtil.pushParam;传入参数为空或者传入的参数不为对象')
        // console.error(err);
        if (cb) cb(err, null);
        return sql;
    }
    for (var i in conditionMap) {
        var j = fn(conditionMap[i]);
        if (j != 'objIsNotArr' && Array.isArray(conditionMap[i][j])) {
            if (conditionMap[i][j].length == 0) {
                conditionMap[i][j].push(null);
            }
            if (j.toLowerCase() == '$in') {
                sql += " AND `" + (tf ? tableAlias + '`.`' + i : i) + "` IN (";
                sql += pool.escape(conditionMap[i][j]);
                sql += ") ";
            } else if (j.toLowerCase() == '$nin') {
                sql += " AND `" + (tf ? tableAlias + '`.`' + i : i) + "` NOT IN (";
                sql += pool.escape(conditionMap[i][j]);
                sql += ") ";
            }
        } else if (/^\$or\d{0,}$/.test(i.toLowerCase())) {//or 的条件回到一个conditionMap对象
            sql += ' AND (';
            for (var m = 0; m < conditionMap[i].length; m++) {
                sql += '(';
                sql += exports.pushParam(conditionMap[i][m], tableAlias).replace(/AND/, 'OR').replace(/OR/, '');
                sql += " OR ";
                sql = sql.substr(0, sql.length - 3);
                sql += ") OR ";
            }
            sql = sql.substr(0, sql.length - 3);
            sql += ")";
        }
        //将 null 值的条件打包为一个数组  {$null:['a字段','b字段']}
        else if ((i.toLowerCase() == '$null' || i.toLowerCase() == '$isnull') && Array.isArray(conditionMap[i])) {
            for (var k in conditionMap[i]) {
                sql += ' AND `' + (tf ? (tableAlias + '`.`' + conditionMap[i][k]) : conditionMap[i][k]) + '` is NULL ';
            }
        } else if ((i.toLowerCase() == '$isnotnull' || i.toLowerCase() == '$isnotanull') && Array.isArray(conditionMap[i])) {
            for (var k in conditionMap[i]) {
                sql += ' AND `' + (tf ? (tableAlias + '`.`' + conditionMap[i][k]) : conditionMap[i][k]) + '` is NOT NULL ';
            }
        }
        //将 普通数组解析为 in
        else if (i.toLowerCase() != '$isnotnull' && i.toLowerCase() != '$null' && i.toLowerCase() != '$isnull' && i.toLowerCase() != '$isnotanull' && Array.isArray(conditionMap[i])) {//直接传数组时,用in来解析
            if (conditionMap[i].length == 0) {
                conditionMap[i].push(null);
            }
            sql += " AND `" + (tf ? tableAlias + '`.`' + i : i) + "` IN (";
            sql += pool.escape(conditionMap[i]);
            sql += ") ";
        } else {
            if (Object.prototype.toString.call(conditionMap[i]) !== '[object Object]' && (String(conditionMap[i]).indexOf('%') > -1 || String(conditionMap[i]).indexOf('_') > -1 || String(conditionMap[i]).indexOf('[') > -1)) {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值