自己写个简易版的CURD

项目开发中,往往会写很多的查询,更新,插入语句,页面的代码看起来特别的乱.

在看过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);
})



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值