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

来源:互联网 发布:女生英文名推荐 知乎 编辑:程序博客网 时间:2024/06/05 08:15

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;//设置idsqlClient.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;//设置idupdateUser.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;//对应字段 realnamethis.username=null;//对应字段 username};



源码下载

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

密码:wlo3



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




1 1
原创粉丝点击