实战学习NodeJS建站(4)—封装 SqlClient 实现对MySql的访问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quasimodo_es/article/details/52843371

1、db_config.js

首先,对数据库的访问需要配置数据库连接参数:host、port、用户名、密码; 

/**
* 需要安装mysql组件
* 类似于安装express,执行:npm install mysql 即可;
* 在node_modules 目录下多出 mysql 模块
*(或者从其他项目中拷贝进来也可以)
*/
var mysql = require('mysql');
var pool = mysql.createPool({
    host: '127.0.0.1',  //ip或者域名
    port: '3306',   //端口号
    user: 'root',   //数据库的用户名
    password: 'root123',    //密码
    database: 'mydb'  //数据库名称
});

2、新建数据库mydb,并执行建表、初始化

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- t_user 表
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `realname` varchar(255) DEFAULT NULL,
  `username` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

INSERT INTO `t_user` VALUES ('1', '张三', 'zhangsan');


3、SqlClient.js文件

require('./CommonUtil');
var pool=require('./db_config').pool;

/**
 * mysql SqlClient 客户端
 */
SqlClient=function(){};
SqlClient.prototype={
	
	/**
	*根据id获取
	*obj :model对象
	*callback :回调函数
	*/
	getById : function(obj,callback){
		pool.getConnection(function(err, connection) {
			var sql = 'SELECT * FROM '+obj['table_name']+' WHERE ID = '+obj['id'];
			console.log('##    sql: '+sql);
			connection.query(sql, function(err, result) {
				if(err){
					console.log('[getById error] - ',err.message);
		        	return;
	        	}
				if(result != null && result.length > 0){
					obj = result[0];
					callback(obj);
				}else{
					callback(null);
				}
    		});
			connection.release();
		});
	},
	
	/**
	*查询列表
	*obj :model对象
	*callback :回调函数
	*/
	query : function(obj,callback){
		pool.getConnection(function(err, connection) {
			var sql = 'SELECT * FROM '+obj['table_name'];
			console.log('##    sql: '+sql);
			connection.query(sql, function(err, result) {
				if(err){
					console.log('[query error] - ',err.message);
					return;
	        	}
	            callback(result);
        	});
			connection.release();
		});
	},
	
	/**
	*创建:根据model对象实例处理属性和值;
	*obj :model对象
	*callback :回调函数
	*/
	create : function(obj,callback){
		var cols = [];
		var params = [];
		var paramValues = [];
		for(var name in obj){
			if(obj.hasOwnProperty(name) && name != 'table_name'){
				if(name == 'id' && CommonUtil.isStrEmpty(obj[name])){//mysql id 自增处理
					continue;
				}else{
					console.log(obj.hasOwnProperty(name));
					cols.push(name);
					params.push('?');
					paramValues.push(obj[name]);
				}
			}
    	}
		pool.getConnection(function(err, connection) {
			var sql = 'INSERT INTO '+obj['table_name']+'('+cols.join(',')+') VALUES('+params+')';
			console.log('##    sql: '+sql);
			console.log('## values: '+paramValues);
			connection.query(sql,paramValues,function (err, result) {
	        	if(err){
	        		console.log('[create error] - ',err.message);
	        		return;
	       	 	}
	        	callback(result.insertId);//插入的id
			});
			connection.release();
		});
	},
	
	/**
	*更新,如果不为null就更新
	*obj :model对象
	*callback :回调函数
	*/
	update : function(obj,callback){
		var cols = [];
		var paramValues = [];
		for(var name in obj){
			if(obj.hasOwnProperty(name) && name != 'table_name' && name != 'id' && obj[name] != null){
				cols.push(name+"=?");
				paramValues.push(obj[name]);
			}
    	}
		pool.getConnection(function(err, connection) {
			var sql = 'UPDATE '+obj['table_name']+' SET '+cols.join(',') + ' WHERE ID = ' + obj['id'];
			console.log('##    sql: '+sql);
			console.log('## values: '+paramValues);
			connection.query(sql,paramValues,function (err, result) {
		        if(err){
		        	console.log('[update error] - ',err.message);
		        	return;
		        }
		        callback(result.affectedRows);//影响的行数
			});
			connection.release();
		});
	},
	
	/**
	*根据id删除
	*obj :model对象
	*callback :回调函数
	*/
	deleteById : function(obj,callback){
		pool.getConnection(function(err, connection) {
			var sql = 'DELETE FROM '+obj['table_name']+' WHERE ID = '+obj['id'];
			console.log('##    sql: '+sql);
			connection.query(sql, function(err, result) {
		    	if(err){
        			console.log('[deleteById error] - ',err.message);
        			return;
	       	 	}
		    	callback(result.affectedRows);//影响的行数
       		});
			connection.release();
		});
	},
	
	/**
	*执行SQL
	*sql :要执行的sql
	*paramValues:sql中需要的参数
	*callback :回调函数
	*/
	queryBySql : function(sql,paramValues,callback){
		pool.getConnection(function(err, connection) {
			console.log('##    sql: '+sql);
			console.log('## values: '+paramValues);
			connection.query(sql,paramValues,function (err, result) {
				if(err){
		        	console.log('[queryBySql error] - ',err.message);
		        	return;
	        	}
        		callback(result);
			});
			connection.release();
		});
	}
	
};



4、测试demo:SqlClientTest.js文件

/**
 * 测试数据库操作;
 * 前提:db_config.js文件中的数据库创建完成、表(t_user)创建完成(参考db/mydb.sql文件)
 * 执行执行js文件即可:
 * 比如 node SqlClientTest.js 或者 sublime text 执行;
 * 或者 使用其他IDE开发工具执行
 */
require('./SqlClient.js');
require('./model.js');

/**
 * 创建SqlClient对象
 */
var sqlClient = new SqlClient();
var user = new User();

/**
 * 查询 User 列表
 */
sqlClient.query(user,function(result){
	console.log("***** 测试查询 User 列表 *****");
	if(result != null && result.length > 0){
		for(var i =0 ; i < result.length; i++){
			console.log(result[i].realname);
		}
	}
});

/**
 * 根据id 获取 User 对象
 */
user.id = 1;//设置id
sqlClient.getById(user,function(result){
	console.log("***** 测试根据id 获取 User 对象 *****");
	if(result != null){
		console.log(result.username);
	}
});


/**
 * 创建 User 对象
 */
var newUser = new User();
newUser.realname = '程序员实战';
newUser.username = 'coder10';
sqlClient.create(newUser,function(result){
	console.log("***** 创建 User 对象 *****");
	if(result != null){
		console.log("创建新对象的ID=" + result);
	}
});


/**
 * 根据id 更新 User 对象
 */
var updateUser = new User();
updateUser.id = 1;//设置id
updateUser.realname = '张三新';
sqlClient.update(updateUser,function(result){
	console.log("***** 更新 User 对象 *****");
	if(result != null){
		console.log("影响行数" + result);
	}
});


/**
 * 根据id 删除 User 对象
 */
var delUser = new User();
delUser.id = 5;
sqlClient.deleteById(delUser,function(result){
	console.log("***** 根据id 删除 User 对象 *****");
	if(result != null){
		console.log("影响行数" + result);
	}
});


5、依赖的文件

CommonUtil.js

/**
 * 工具类
 */
CommonUtil=function(){};

//判断字符串是否为空
CommonUtil.isStrEmpty = function(text){
    if(text == undefined || text == null || text == '' || text == 'null' || text == 'undefined'){
    	return true;
    }
    return text.replace(/(\s*$)/g, '') == '';
};

//删除左右两端的空格
CommonUtil.trim = function(str){ 
    return str.replace(/(^\s*)|(\s*$)/g, "");
};

//删除左边的空格
CommonUtil.ltrim = function(str){ 
    return str.replace(/(^\s*)/g,"");
};

//删除右边的空格
CommonUtil.rtrim = function(str){ 
    return str.replace(/(\s*$)/g,"");
};

//判断对象是否为空
CommonUtil.isObjEmpty = function(obj){
    if(obj != null && obj != undefined && typeof(obj) == 'object'){
    	for (var p in obj){
    	    return false;
    	} 
    	return true;
    }
    return true;
};

//产生uuid字符串
CommonUtil.uuid = function(){
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = "4";
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
    s[8] = s[13] = s[18] = s[23] = "";
    var uuid = s.join("");
    return uuid;
};



model.js文件

/**
 * 与表 t_user 对应的 javascript 对象;
 */
User=function(){
	this.table_name='t_user'; //数据库表名 【必须】
	this.id=null; 		//mysql数据库,id自增类型 【必须】
	this.realname=null;//对应字段 realname
	this.username=null;//对应字段 username
};



源码下载

链接:http://pan.baidu.com/s/1bpDp0GB

密码:wlo3



程序员实战技能,扫一扫学习




猜你喜欢

转载自blog.csdn.net/quasimodo_es/article/details/52843371