版权声明:本文为博主原创文章,未经博主允许不得转载。 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
程序员实战技能,扫一扫学习