[node.js学习]为node.js写的一个操作mysql的类
不支持一个对象在不同异步中使用,模仿的php框架 speedphp中的model模块
GaryMysql.js
var mysql = require('mysql');
var pool = null;
//由于使用了一些类的属性,所以不支持在多线程情况下使用同一对象执行sql
module.exports = class GaryMysql{
constructor(tabName, pk) {
this.tabName = tabName;//类中变量
this.pk = typeof pk !=="undefined"?pk:'id';
this.initSet();
}
static setDB(host,user,password,database)
{
if(pool==null)
{
pool=mysql.createPool({
connectionLimit : ,
host : host ,
user : user ,
password : password ,
database : database
});
}
}
query(sql,callback){
var values=this.values;
this.initSet();
pool.getConnection(function(err,conn){
if(err){
callback(err,null,null);
}else{
conn.query(sql,values,function(qerr,vals,fields){
//释放连接
conn.release();
//事件驱动回调
callback(qerr,vals,fields);
});
}
});
}
//strWhere
// 链式调用
where(whereSet,values)
{
this.values = typeof values !=="undefined"?values:[];
if(typeof whereSet==='string')
{
this.strWhere=whereSet;
}else if(typeof whereSet==='object')
{
var strWhere='';
for(var key in whereSet)
{
if(strWhere!='')strWhere+=' AND ';
strWhere+=key+'=?';
this.values.push(whereSet[key]) ;
}
this.strWhere=strWhere;
}else{
this.strWhere='';
}
if(this.strWhere!="")this.strWhere=" WHERE "+this.strWhere
return this;
}
findCont(callback){
var sql='SELECT COUNT(1)C FROM '+this.tabName+this.strWhere;
this.query(sql,function(err, result){
if(!err)
{
result=result[].C;
}
if(typeof callback =="function")
{
callback(err,result);
}
});
}
find(callback,order,field)
{
this.findAll(function(err,rows,fields){
if(typeof callback =="function")
{
rows=rows&&rows.length>?rows[]:null;
callback(err,rows,fields);
}
},order,field,);
}
findAll(callback,order,field,limit){
order = typeof order !=="undefined"?' ORDER BY '+order:'';
field = typeof field !=="undefined"?field:'*';
limit = typeof limit !=="undefined"?' LIMIT '+limit:'';
var sql='SELECT '+field+' FROM '+this.tabName+this.strWhere+order+limit;
this.query(sql,function(err,rows,fields){
if(typeof callback =="function")
{
rows=rows&&rows.length>?rows:null;
callback(err,rows,fields);
}
});
}
//setData 需要在 setWhere前面
data(dataSet){
this.dataStr='';
this.values = typeof values !=="undefined"?values:[];
for(var key in dataSet)
{
if(this.dataStr!='')this.dataStr+=',';
this.dataStr+=key+'=?';
this.values.push(dataSet[key]) ;
}
return this;
}
del(callback){
var sql='DELETE FROM '+this.tabName+this.strWhere;
this.query(sql,function(err,result,fields){
if(typeof callback =="function")
{
if(!err)
{
result=result.affectedRows;
}
callback(err,result,fields);
}
});
}
update(callback){
var sql='UPDATE '+this.tabName+' SET '+this.dataStr+this.strWhere;
this.query(sql,function(err,result,fields){
if(typeof callback =="function")
{
if(!err)
{
result=result.changedRows;
}
callback(err,result,fields);
}
});
}
//
create(dataSet,callback)
{
var fields="";
var valuesStr="";
for(var key in dataSet)
{
if(fields!="")fields+=",";
if(valuesStr!="")valuesStr+=",";
fields+=key;
valuesStr+="?";
this.values.push(dataSet[key]) ;
}
var sql="INSERT INTO "+this.tabName+"("+fields+")VALUES("+valuesStr+")";
this.query(sql,function(err,result,fields){
if(typeof callback =="function")
{
if(!err)
{
result=result.insertId;
}
callback(err,result,fields);
}
});
}
initSet(){
this.values=[];
this.dataStr='';
this.strWhere='';
}
}
使用
var GaryMysql = require('./GaryMysql');
GaryMysql.setDB('localhost','root','root','msg');
var m_main=new GaryMysql('m_main');
m_main.where({"txt":""}).find(function(err,result,fields){
if(err)
{
console.log(err);
}
console.log(result);
});
m_main.where({"txt":""}).findAll(function(err,result,fields){
if(err)
{
console.log(err);
}
console.log(result);
});
//实际不能直接这样一个对像使用两次,只有在回调里面才可以,最好是重新new一个,或者在回调中使用,
[node.js学习]为node.js写的一个操作mysql的类的更多相关文章
- 自己写的一个操作Mysql的简单的实例
#include <WinSock.h> #include <stdio.h> #include <iostream> #include <windows.h ...
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- Sea.js学习4——Sea.js的配置
可以对 Sea.js 进行配置,让模块编写.开发调试更方便. seajs.config seajs.config(options) 用来进行配置的方法. seajs.config({ // 别名配置 ...
- python学习笔记-(十六)python操作mysql
一. mysql安装 1. windows下安装mysql 1.1. 下载源: http://dev.mysql.com/downloads/installer/,请认准对应版本 Windows (x ...
- python学习之模块(pip),列表生成式,模块操作mysql,excel
python基础 生成式 列表生成式 格式 [表达式 for 表达式 in 迭代对象 (可加判断)] 原: res1 = [] for i in range(1,5): res1.append(i) ...
- Node.js学习(Node.js基础)
1.开发环境搭建 v8引擎是作为解析JavaScript程序来运行的 nodejs是一个高性能的,第一个体现在他的JavaScript解析速度很快,v8引擎性能很高,第二个事件驱动和非阻塞 2.全局对 ...
- Node.js学习笔记(5)--文件简单操作
说明(2017-5-3 11:53:45): 1. foo.js var fs = require("fs"); var documents = []; fs.readdir(&q ...
- Sea.js学习5——Sea.js的构建工具spm
如果项目遵循推荐的标准目录结构: foo-module/ |-- dist 存放构建好的文件 |-- src 存放 js.css 等源码 | |-- foo.js | `-- style.css `- ...
- Sea.js学习3——Sea.js的CMD 模块定义规范
在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...
随机推荐
- 《MySQL 基础课程》笔记整理(基础篇)
一.尝试MySQL 1.打开MySQL # 启动MySQL服务 sudo service mysql start # 使用 root 用户登录,这里密码为空,直接回车登录 mysql -u root ...
- spring_boot 配置
配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- Hql语句转化为sql语句中文乱码问题
刚刚学习Hql语句就出现这一的问题,百度半天终于解决了,总结一下解决的方案: 出现中文乱码最可能的原因是hibernate配置文件配置的问题 1.检查url路径是否指定字符集为UTF-8 <pr ...
- Java jsp 自定义标签
1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫 ...
- C语言——单链表初始化、求表长、读表元素、插入元素
头文件Linear.h // 单链表的类型定义 typedef struct node { int data; // 数据域 struct node *next; // 指针域 }Node, *Lin ...
- OSGEarth加载 geoserver 发布 TMS
geoserver配好数据并用自带的gwc切片好后, 访问 http://localhost:9999/geoserver/gwc/service/tms/1.0.0/ 在OsgEarth的earth ...
- Android Button事件处理
一般只需要处理按钮的点击事件就可以,但想让一个按钮处理多个事件,就得同时监听多个方法. OnClickListener 点击事件 OnLongClickListener 长按事件 OnTouchLi ...
- ES6学习笔记(一)
‘变量’声明 ES6新增两个声明’变量’的关键字,let和const命令. l let用来声明局部变量 同ES5中var声明的变量不同的是,let声明的变量的作用域范围仅仅是从其声明的地方开始,到其 ...
- Java基础之final和static关键字
一.final 根据程序上下文环境,它可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的方法默认是final的. ...
- $.each遍历JSON字符串和 Uncaught TypeError: Cannot use 'in' operator to search for '156错误
现在页面和后端交互都流行使用json了 自己记录一下解析字符串的方法,要不老是忘记!!!! success: function (data) { //data是后台传过来的字符串 $.each(JS ...