您的位置:首页 > 数据库 > MySQL

【mysql】nodejs 下对 mysql 查询条件的一个封装

2017-09-05 09:40 441 查看
在node开发过程中,需要对数据库进行操作。不同的操作请求,要求写不同的请求语句。比较繁琐,还容易出错。在开发过程中,提炼出较为抽象的函数,数据接口,可以很方便地生成所需要的查询语句,减少错误,减少工作量。

设计查询条件:

let query = {
want:"*",// "id,name,age"
table:db.table,
conditions:{
age:[18,65],
sex:["male"]
},
pages:{
limit:20,
pages:3
}
}


生成函数:

第一个生成更新语句要求wants为对象形式。这个由前端传送回来,基本不用进行特别处理。

// 用于生成数据库更新语句
var generateSql_update = function(search){
var sql = "update " + search.table +" ",sql_d = [],sql_temp = "",sql_where="";
for(var s in search.wants){
sql_temp += s +"=? , ";
sql_d.push(search.wants[s]);
}
for(var s in search.conditions){
sql_where += " and " + s +"=? ,";
sql_d.push(search.conditions[s]);
}
sql += sql_temp? (" set "+sql_temp.substring(0,sql_temp.length-2)):"";
sql += sql_where?( "where "+sql_where.substring(4,sql_where.length-1)):"";
return {sql:sql,sqlData:sql_d}
}


// 用于生成数据库查询语句
var generateSql_search = function(/*action,*/search){
var sql = "select " + search.wants +" from "+ search.table + " ",sql_d = [],sql_temp = "";
for(var condi in search.conditions){
if(search.conditions[condi].length == 1){
sql_temp += " and " + condi + " = ? "
sql_d.push(search.conditions[condi][0])
}else if(search.conditions[condi].length == 2){
sql_temp += " and " + condi + " between ? and ? "
sql_d.push(search.conditions[condi][0]);
sql_d.push(search.conditions[condi][1]);
}
}
sql += sql_temp? ("where"+sql_temp.substring(4,sql_temp.length-1)):"";
search.pages?(sql+=" limit "+search.pages.limit+" offset "+search.pages.offset*search.pages.limit):null;
return {sql:sql,sqlData:sql_d}
}


// 用于生成数据库删除语句
var generateSql_delete = function(search){
var sql = "delete from " + search.table + " ",sql_d = [],sql_temp = "";
for(var condi in search.conditions){
if(search.conditions[condi].length == 1){
sql_temp += " and " + condi + " = ? "
sql_d.push(search.conditions[condi][0])
}else if(search.conditions[condi].length == 2){
sql_temp += " and " + condi + " between ? and ? "
sql_d.push(search.conditions[condi][0]);
sql_d.push(search.conditions[condi][1]);
}
}
sql += sql_temp ? ("where"+sql_temp.substring(4,sql_temp.length-1)):"";
return {sql:sql, sqlData:sql_d}
}


var generateSql_insert = function(search){
return {sql:"insert into " + search.table +" set ? ",sqlData:search.conditions}
}


上面三个函数为基础函数,可以将其再进行一次合并。并对query增加 action 键值对:

<
4000
code class=" hljs erlang">let query = {
want:"*",
action:"del",
table:db.table,
conditions:{ //查询时值为数组形式,增加时值为普通类型
age:[18,65],
sex:["male"]
},
pages:{
limit:20,
pages:3
}
}


function generateSql(query){
let result = "";
switch (query){
case "del":
result = generateSql_delete(query);
break;
case "add":
result = generateSql_insert(query);
break;
case "upd":
result = generateSql_update(query);
break;
case "sea":
result = generateSql_search(query);
break;
default :
result = {sql:"show databases",sqlData:[]}
break;
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql nodejs 封装 模块