您的位置:首页 > 其它

自己写个简易版的CURD

2016-03-31 16:24 375 查看
项目开发中,往往会写很多的查询,更新,插入语句,页面的代码看起来特别的乱.

在看过THINKPHP的Model后,决定照葫芦画瓢也弄个CURD,只为了让代码看起来更清爽.

var Model = function(tbname){
var _join = '',_order = '',_group = '',_where = '',_field = '',_limit = '',_table = '';
this.data = {};
_table = tbname;
var that = this;
this.table = function(p){
_table = p;
return that;
}
this.field = function(p){
_field = p?p:"*";
return that;
}
this.join = function(p){
_join += " "+p;
return that;
}
this.where = function(p){
//字符串
if(typeof p === "string"){
var arr = p.split('=');
_where = " where "+arr[0]+"='"+arr[1]+"'";
}
//数组
if(typeof p==="object" && (p instanceof Array)){
_where = " where "+p[0];
for(var i=1,m=p.length;i<m;i++){
var arr = p.split('=');
_where = " and "+arr[0]+"='"+arr[1]+"'";
}
}
return that;
}
this.group = function(p){
_group = " group by "+p;
return that;
}
this.order = function(p){
_order = " order by "+p;
return that;
}
this.limit = function(start,length){
_limit = " limit "+start + (length?","+length:"");
return that;
}
//CURD
/*
params:v-参数值,f-参数名,默认id
*/
this.create = function(callback){
var sql = "insert into "+_table+"($field) values($value)";
var _f = '',_v = '',_values = [];
for(var key in this.data){
_f += "," + key;
_v += ",?";
_values.push(this.data[key]);
}
sql = sql.replace('$field',_f.substr(1)).replace('$value',_v.substr(1));
//执行语句
// db.operatorDB(sql,_values,function(err, result){
// if (err) {
// callback(null);
// return;
// }
// callback(result);
// });
callback(sql);
}
this.update = function(callback){
var sql = "update "+_table+" set $field";
var _f = '',_values = [];
for(var key in this.data){
_f += "," + key + "=?";
_values.push(this.data[key]);
}
sql = sql.replace('$field',_f.substr(1))+_where;
//执行语句
// db.operatorDB(sql,_values,function(err, result){
// if (err) {
// callback(null);
// return;
// }
// callback(result);
// });
callback(sql);
}
this.select = function(callback){
//var sql = "`select ${_field} from ${_table} ${_join} ${_where} ${_group} ${_order} ${_limit}`";
var sql = "select ";
sql += _field?_field:"*";
sql += " from " + _table + _join + _where + _group + _order + _limit;
//执行语句,返回结果
// db.operatorDB(sql,null,function(err, result){
// if (err) {
// callback(null);
// return;
// }
// callback(result);
// });
callback(sql);
}
//find调用get,使用select方法查询结果
this.find = function(v,f,callback){
this.get(v,f,callback);
}
this.get = function(v,f,callback){
this.where((f?f:"id")+"="+v).select(callback);
}
this.delete = function(){
var sql = "delete from "+_table+_where;
//执行语句,返回结果
// db.operatorDB(sql,null,function(err, result){
// if (err) {
// callback(null);
// return;
// }
// callback(result);
// });
callback(sql);
}
return this;
};


db.operatorDB为数据库操作方法,可根据自己的需要进行添加.

调用方法如下:

//联合查询
var u = new Model("user");
u.where("name=1").join("left join dept d on user.id=d.id").order("user.id desc,d.id").select(function(s){
console.log(s);
});
//插入/更新
var d = new Model("custom");
u.data["name"]="a";
u.data["id"]="1";
d.create(function(re){//d.where("id=1").update(...
console.log(re);
});
//简单查询
var u = new Model("user");
u.find(1,"",function(s){//u.get(1,...
console.log(s);
})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: