Angular4+NodeJs+MySQL 入门-02 MySql操作类
来源:互联网 发布:pycharm和python 编辑:程序博客网 时间:2024/06/05 22:20
NodeJs操作MySQL类
此类封装了几个常用的方法:插入,更新,删除,查询,开启事务,事务提交,事务回滚等操作。有一这个类,操作MYSQL就方便多了。
批处理,存储过程等方法还没有添加,因为觉得目前写的那里还没有用到批处理的,所以就没有在这里加上,等以后要是用到了要进行批处理的时候,再加上。
以前用C#在操作数据库的时候,也都有类似的操作类:MSSQLHelper,OracleHelper,MySQLHelper等这些,现在只是用NodeJs写了一个操作MySql,想操作其它数据库,按照这样的思路也应该可以写出来吧。
具体怎么用在以后再讲了,如果心急的话,可以到我的 github(https://github.com/xiaotuni/angular-map-http2)里下载项目,运行起来就可以了。
const mysql = require('mysql');/** * 操作类型,插入,更新,删除,查询 */const OperatorType = { Insert: 0, Update: 1, Delete: 2, QueryList: 3, QueryOne: 4,}/** * 数据操作类 * QueryOne、Query、InsertSQL、DeleteSQL、UpdateSQL、BeginTransaction、Rollback、Commit * * @class MySqlHelper */class MySqlHelper { constructor() { this.__CreatePool(); } /** * 创建一个资源池 * * @memberof MySqlHelper */ __CreatePool() { this.pool = mysql.createPool({ connectionLimit: 10, host: 'localhost', // 数据库连接 user: 'liaohb', // 数据库名用户名 password: 'xiaotuni', // 密码 database: 'nodejs' // 表空间 }); } /** * 资源池信息 * * @param {any} error 出错事件出得函数 * @returns * @memberof MySqlHelper */ poolInfo(error) { if (!this.pool) { this.__CreatePool(); } if (!this.pool) { error && error({ code: 500, msg: '数据库连接失败' }); return null; } return this.pool; } /** * 插入操作 * * @param {any} sql 插入语句 * @param {any} success 成功后调用的方法 * @param {any} error 失败后调用的方法 * @memberof MySqlHelper */ Query(sql, success, error) { this.__ExecuteSQL(sql, success, error, OperatorType.QueryList); } /** * 查询操作,获取一条语句 * * @param {any} sql 插入语句 * @param {any} success 成功后调用的方法 * @param {any} error 失败后调用的方法 * @memberof MySqlHelper */ QueryOne(sql, success, error) { this.__ExecuteSQL(sql, success, error, OperatorType.QueryOne); } /** * 更新操作 * * @param {any} Sql 修改语句 * @param {any} Success 成功后调用的方法 * @param {any} Error 失败后调用的方法 * @memberof MySqlHelper */ UpdateSQL(Sql, Success, Error) { this.__ExecuteSQL(Sql, Success, Error, OperatorType.Update); } /** * 插入操作 * * @param {any} Sql 插入语句 * @param {any} Success 成功后调用的方法 * @param {any} Error 失败后调用的方法 * @memberof MySqlHelper */ InsertSQL(Sql, Success, Error) { this.__ExecuteSQL(Sql, Success, Error, OperatorType.Insert); } /** * 删除操作 * * @param {any} Sql 删除语句 * @param {any} Success 成功后调用的方法 * @param {any} Error 失败后调用的方法 * @memberof MySqlHelper */ DeleteSQL(Sql, Success, Error) { this.__ExecuteSQL(Sql, Success, Error, OperatorType.Delete); } /** * 执行SQL语句 * * @param {any} Sql SQL语句 * @param {any} Success 成功后调用的方法 * @param {any} Error 失败后调用的方法 * @param {any} Type 类型[查询,更新,删除,修改等] * @returns * @memberof MySqlHelper */ __ExecuteSQL(Sql, Success, Error, Type) { const __self = this; const __ProcessResult = (__sql, result, fields, Type) => { const _type = Type || OperatorType.QueryOne; let __result = result; switch (Type) { case OperatorType.Insert: const { insertId } = result; __result = { insertId }; break; case OperatorType.Delete: break; case OperatorType.Update: break; case OperatorType.QueryList: break; case OperatorType.QueryOne: __result = result && result.length > 0 ? result[0] : null; break; } return __result; }; const { IsBeginTrConn, BeginTrConn } = this; if (!!IsBeginTrConn) { console.log('事务线程ID:', BeginTrConn.threadId); // 事务处理 BeginTrConn.query(Sql, (err, result, fields) => { if (err) { __self.Rollback(err); Error && Error(err); return; } const __result = __ProcessResult(Sql, result, fields, Type); Success && Success({ fields, result: __result }); }); } else { const poolInfo = this.poolInfo(Error); if (!poolInfo) { return; } const __query = poolInfo.query(Sql, (err, result, fields) => { if (err) { Error && Error(err); return; } const __result = __ProcessResult(__query.sql, result, fields, Type); Success && Success({ fields, result: __result }); }); } } /** * 开启事务 * * @param {any} Success 成功后调用的方法 * @param {any} Error 失败后调用的方法 * @returns * @memberof MySqlHelper */ BeginTransaction(Success, Error) { const poolInfo = this.poolInfo(Error); if (!poolInfo) { return; } const __self = this; poolInfo.getConnection((err, conn) => { if (err) { Error && Error(err); } conn.beginTransaction((btErr) => { if (btErr) { Error && Error(btErr); } console.log('开始事务处理...'); __self.BeginTrConn = conn; __self.IsBeginTrConn = true; Success && Success(); }); }); } /** * 事务回滚 * * @param {any} ErrorInfo 回滚出错信息 * @returns * @memberof MySqlHelper */ Rollback(ErrorInfo) { const { IsBeginTrConn, BeginTrConn } = this; const __self = this; if (!IsBeginTrConn) { return; } if (!BeginTrConn) { return; } console.log('Rollback->事务线程ID:', BeginTrConn.threadId); BeginTrConn.rollback(() => { console.log('事务回滚,回滚原因:', ErrorInfo); delete __self.IsBeginTrConn; delete __self.BeginTrConn; }); } /** * 提交事件 * * @param {any} Success 成功后调用的方法 * @param {any} Error 失败后调用的方法 * @returns * @memberof MySqlHelper */ Commit(Success, Error) { const { IsBeginTrConn, BeginTrConn } = this; const __self = this; if (!IsBeginTrConn) { return; } if (!BeginTrConn) { return; } BeginTrConn.commit((err) => { if (err) { console.log('事务提交失败,执行回滚操作...'); __self.Rollback(err); Error && Error(err); return; } console.log('事务提交成功...'); console.log('Commit->事务提交成功...事务ID:', BeginTrConn.threadId); delete __self.IsBeginTrConn; delete __self.BeginTrConn; Success && Success(); }); } /** * 关闭连接池 * * @param {any} Success * @param {any} Error * @returns * @memberof MySqlHelper */ ClosePool(Success, Error) { const __self = this; const poolInfo = this.poolInfo(Error); if (!poolInfo) { return; } poolInfo.end((err) => { if (err) { Error && Error(err); return; } Success && Success(); if (__self.__pool) { delete this.pool; delete this.__pool; } }); }}module.exports = MySqlHelper;
阅读全文
0 0
- Angular4+NodeJs+MySQL 入门-02 MySql操作类
- Angular4+NodeJs+MySQL 入门-01
- Angular4+NodeJs+MySQL 入门-04 接口调用类
- Angular4+NodeJs+MySQL 入门-05 接口调用
- Angular4+NodeJs+MySQL 入门-06 接口配置
- Angular4+NodeJs+MySQL 入门-03 后台接口定义
- nodejs+mysql入门实例
- nodejs - mysql操作示例
- Nodejs 操作mysql数据库
- nodejs操作mysql数据库
- nodejs-mysql基础操作
- nodejs操作mysql数据库
- nodeJS操作MySQL
- nodejs操作mysql数据库
- ES6+angular4+mysql杂记
- 初学nodejs 之 nodejs操作mysql
- 【Nodejs】Nodejs连接Mysql初级操作CURD
- nodejs操作mysql的尝试
- SIP穿越NAT的rport机制
- ECMAScript 6 常用特性整理
- 记(Laravel)PDO 使用prepared statement 预处理LIMIT等字段遇到的坑。
- 开发者都应该使用的10个C++11特性
- 【字符串】查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- Angular4+NodeJs+MySQL 入门-02 MySql操作类
- js将 一串数字1403149534转换为日期格式
- (转载)request.getParameter() 和request.getAttribute() 区别
- 快速排序 分治法
- 监听器listener.ora中HOST参数配置
- <9>soc sensor与bayer sensor 区别,内外置isp
- 嵌入式学习日记(十一)
- mongodb 宕机重启,linux
- JS 压缩混淆