实战学习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
- 实战学习NodeJS建站(4)—封装 SqlClient 实现对MySql的访问
- 实战学习NodeJS建站(5)—nodejs 访问 redis
- 实战学习NodeJS建站(3)—bootstrap后台管理、nodejs访问数据库
- 【mysql】nodejs 下对 mysql 查询条件的一个封装
- 对nodejs express 框架的简单封装实现快速开发
- 实战学习NodeJS建站(1)—windows环境下用nodejs创建blog
- Nodejs对postgresql基本操作的封装
- 代理模式深入学习(二)——实现动态代理对事务的封装
- nodejs封装的mysql链接数据库
- 基于.NET平台的分层架构实战(七-外一篇)—对数据访问层第一种实现
- Mysql数据库学习(四):常用Mysql C API 介绍和使用、封装一个访问Mysql数据库的类MysqlDB
- 对mysql的简单封装
- 实战学习NodeJS建站(2)—blog结构,request&response,结合bootstrap
- system.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权
- system.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权
- system.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权
- Android 对网络访问的封装
- 基于模板实现对MYSQL query封装
- 汉明距离图片相似度比较
- 【RBM】受限玻尔兹曼机(Restricted Boltzmann Machine, RBM) 简介
- Oracle Primavera Contract Management 最新补丁更新R14.2.5.1
- python:赋值和相等,=和==
- 带缓存的I/O操作
- 实战学习NodeJS建站(4)—封装 SqlClient 实现对MySql的访问
- Ubuntu 下载工具安装方法
- 为什么单片机不能直接驱动继电器和电磁阀
- Implement a program could only be launched by
- 数组定义注意的问题
- linux 文件管理
- 使用servlet作为控制器
- CallableStatement注册用户
- 数组去重