js 拼接mysql语句_node.js拼接mysql东西

node.js中拼接mysql东西

前一阵子被迫分享了一次node.JS,在写sql时真是恼火的不得了。之前写php的时刻发明php真是机灵,php的双引号是能够辨认变量的,而js就惨了,当写sql查询时,写变量得拼字符串,然后sql里自身就有不少的字符串,js的字符串还要单双循环。我真是欲哭无泪啊,写一个稍稍复杂点sql,就要改好频频。从网上找了半天,末了坚决写一个。现在只支撑增编削查,合适给用nodejs做背景写个小demo的玩家。

上源码:

var sqlJoin = (function () {

var whereResolve = function (type, whereSwitch) {

if (whereSwitch.where) {

type += ' WHERE ';

}

var keyAry = (whereSwitch && whereSwitch.whereProp) ? whereSwitch.whereProp : [];

if (keyAry.length) {

for (let i = 0; i < keyAry.length; i++) {

let c = keyAry[i];

if (typeof c == 'object') {

for (var key in c) {

if (key != 'operator') type += '`' + key + '`' + (c['operator'] ? c['operator'] : '=') + '' + "'" + c[key] + "'";

}

} else if (/(AND)?(OR)?/.test(c)) {

type += ' ' + c + ' ';

} else if (/(\()?(\))?/.test(c)) {

type += c;

}

}

}

var likeKeyArr = whereSwitch.likeProp ? Object.keys(whereSwitch.likeProp) : [];

if (likeKeyArr.length) {

if (likeKeyArr.length > 1) {

for (let j = 0; j < likeKeyArr.length; j++) {

let cur = likeKeyArr[j];

if (j == likeKeyArr.length - 1) {

type += cur + ' LIKE ' + "'%" + whereSwitch.likeProp[cur] + "%'";

} else {

type += cur + ' LIKE ' + "'%" + whereSwitch.likeProp[cur] + "%'" + ' AND ';

}

}

} else {

for (let key in whereSwitch.likeProp) {

type += key + ' LIKE ' + "'%" + whereSwitch.likeProp[key] + "%'";

}

}

}

return type;

};

/**

* @param sqlType Object query type-> 'INSERT' 'DELETE' 'UPDATE' 'SELECT'

* @param tableName String the name of the enqueried table

* @param whereSwitch [,Object] config the WHERE sentence

* @param limitSwitch [,Object] config the LIMIT sentence

* @returns String the sql query string joined by sqlJoin function

var sqlJoin = function (sqlType, tableName, whereSwitch, limitSwitch) {

var SELECT = '',

UPDATE = '',

DELETE = '',

INSERT = '';

switch (sqlType.type) {

case 'SELECT':

SELECT = 'SELECT ';

if (sqlType.distinct) {

SELECT += ' DISTINCT '

}

sqlType.prop = sqlType.prop ? sqlType.prop : [];

if (sqlType.prop && sqlType.prop.length) {

for (let i = 0; i < sqlType.prop.length; i++) {

var cur = sqlType.prop[i];

if (i == sqlType.prop.length - 1) {

SELECT += '`' + cur + '`';

} else {

SELECT += '`' + cur + '`,';

}

}

} else {

SELECT += ' *'

}

SELECT += ' FROM ' + '`' + tableName + '`';

if (whereSwitch) {

SELECT = whereResolve(SELECT, whereSwitch);

}

var orderArr = sqlType.orderProp ? Object.keys(sqlType.orderProp) : [];

if (orderArr.length) {

SELECT += ' ORDER BY ';

for (let m = 0; m < orderArr.length; m++) {

let c = orderArr[m];

if (m == orderArr.length - 1) {

if (sqlType.orderProp[c]) {

SELECT += c + ' ASC'

} else {

SELECT += c + ' DESC'

}

} else {

if (sqlType.orderProp[c]) {

SELECT += c + ' ASC, '

} else {

SELECT += c + ' DESC, '

}

}

}

}

if (limitSwitch && limitSwitch.limit) {

SELECT += ' LIMIT ' + limitSwitch.num;

}

break;

case 'UPDATE':

UPDATE = 'UPDATE ';

UPDATE += tableName + ' SET ';

var updatekeys = Object.keys(sqlType.prop);

for (let i = 0; i < updatekeys.length; i++) {

var cur = updatekeys[i];

if (i == updatekeys.length - 1) {

UPDATE += '`' + cur + '` =' + "'" + sqlType.prop[cur] + "'";

} else {

UPDATE += '`' + cur + '` =' + "'" + sqlType.prop[cur] + "', ";

}

}

if (whereSwitch && whereSwitch.where) {

UPDATE = whereResolve(UPDATE, whereSwitch);

}

if (limitSwitch && limitSwitch.limit) {

UPDATE += ' LIMIT ' + limitSwitch.num;

}

break;

case 'DELETE':

DELETE = 'DELETE FROM ' + tableName;

if (whereSwitch && whereSwitch.where) {

DELETE = whereResolve(DELETE, whereSwitch);

}

if (limitSwitch && limitSwitch.limit) {

DELETE += ' LIMIT ' + limitSwitch.num;

}

break;

case 'INSERT':

INSERT = 'INSERT INTO ' + tableName;

var insertProp = Object.keys(sqlType.prop);

if (insertProp.length) {

for (let i = 0, len = insertProp.length; i < len; i++) {

var cur = insertProp[i];

if (i == 0) {

INSERT += '(`' + cur;

} else if (i == len - 1) {

INSERT += '`' + cur + '`)';

} else {

INSERT += '`, `' + cur + '`, ';

}

}

INSERT += ' VALUES ';

for (let j = 0, leng = insertProp.length; j < leng; j++) {

var curr = insertProp[j];

if (j == 0) {

INSERT += "('" + sqlType.prop[curr];

} else if (j == leng - 1) {

INSERT += "'" + sqlType.prop[curr] + "')";

} else {

INSERT += "','" + sqlType.prop[curr] + "', ";

}

}

}

break;

}

return {SELECT, UPDATE, DELETE, INSERT}[sqlType.type];

};

return sqlJoin

})();

exports.sqlJoin = sqlJoin;

用法示例:

新增

var str = sqlJoin(

{type: 'INSERT', prop: {mNum: 7570, mName: '晓鑫', points: 14}},

'members',

{limit: true, num: 1}

);

console.log(str);

//INSERT INTO members(`mNum`, `mName`, `points`) VALUES ('7570','晓鑫', '14')

删除

var str = sqlJoin(

{type: 'DELETE'},

'members',

{where: true, whereProp: [{mId: 67}]},

{limit: true, num: 1}

);

console.log(str);

//DELETE FROM members WHERE `mId`='67' LIMIT 1

修正

var str = sqlJoin(

{type: 'UPDATE', prop: {points: 14}},

'members',

{where: true, whereProp: [{mId: 24}]},

{limit: true, num: 1}

);

console.log(str);

//UPDATE members SET `points` ='14' WHERE `mId`='24' LIMIT 1

查询—— %

var str = sqlJoin(

{type: 'SELECT'},

'members',

{where: true, likeProp: {mNum: 75, mName: '刘', points: 12}},

{limit: false, num: 1}

);

console.log(str);

//SELECT * FROM `members` WHERE mNum LIKE '%75%' AND mName LIKE '%刘%' AND points LIKE '%12%'

查询—— % + AND/OR

var str = sqlJoin(

{type: 'SELECT'},

'members',

{where: true, whereProp: [{'mNum': 7501, operator: '='},'OR', {mName: '刘想',operator: '='}, 'AND',{points: 5, operator: '>'}]},

{limit: false, num: 1}

);

console.log(str);

//SELECT * FROM `members` WHERE `mNum`='7501' OR `mName`='刘想'

查询—— % + AND+OR

var str = sqlJoin(

{type: 'SELECT'},

'members',

{where: true, whereProp: ['(', {'mNum': 7501, operator: '='},'OR', {mName: '刘想',operator: '='},')', 'AND',{points: 5, operator: '>'}]},

{limit: false, num: 1}

);

console.log(str);

//SELECT * FROM `members` WHERE ( `mNum`='7501' OR `mName`='刘想' ) AND `points`>'5'

查询——DESC/ASC

//true: ASC,false: DESC

var str = sqlJoin(

{type: 'SELECT', orderProp: {points:false}},

'members'

);

console.log(str);

//SELECT * FROM `members` ORDER BY points DESC

查询——WHERE

var str = sqlJoin(

{type: 'SELECT', prop: ['mName','points','mNum'], orderProp: {points: true}},

'members',

{where: true, whereProp: [{mId: 2, operator: '>'}]}

);

console.log(str);

//SELECT `mName`,`points`,`mNum` FROM `members` WHERE `mId`='24'

查询——distinct

/*var str = sqlJoin(

{type: 'SELECT', distinct: true, prop: ['points'], orderProp: {points: true}},

'members',

{where: true, whereProp: [{mId: 2, operator: '>'}]}

);

console.log(str);

//SELECT DISTINCT `points` FROM `members` WHERE `mId`>'2' ORDER BY points ASC

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值