傳統的方式是透過sql的prepare statement
再透過一個一個的set來設定那些問號(prepare statement中的值帶入方式,一般都以"?"來代表有值耀輸入)
有別於傳統,在物件導向程式語言中可以透過setter的方式來建立欄位
再透過像Hibernate的資料庫framework將資料一次鍵入DB
但Node.js中則沒那麼多規則...
但是如果要處理一堆問號跟參數的傳入,又不想要眼花...可以透過一些"方法"...
目的在提供一個可以重複利用的模組,讓任何require進來的程式可以直接操作
# vi sql.js
var util = require('util');
function buildSql(params){
var sql = "insert into xxxx (%s) values (%s)";
var k = '', v = '';
var arr = Object.keys(params);
var cond = [];
for(var i = 0 ; i < arr.length ; i++){
k += arr[i] ;
v += '?';
if(i < arr.length -1){
k += ',';
v += ',';
}
cond.push(params[arr[i]]);
}
var finalsql = util.format(sql,k,v)
return {sql:finalsql, cond:cond};
}
exports.buildSql = buildSql;
實作測試
# testSql.js
var sql = require('./sql');
var opt = {}
opt["k1"] = 'v1';
opt["k2"] = 'v2';
var s = sql.buildSql(opt);
console.log(JSON.stringify(s));
結果輸出
# node testSql.js
{"sql":"insert into xxxx (k1,k2) values (?,?)","cond":["v1","v2"]}
延伸這樣的組和參數與欄位的方式
也可以開發一套lib作為Node.js的Hibernate喔∼