#说明

操作mysql数据库工具包

笔记分享:hongjilin
转载请注明出处。

一、数据库链接与操作工具包-2020

该模块封装于2020疫情本人撰写 nodejs+vue搭建校园疫情防控系统实战项目(全栈项目)项目期间,主要用于Nodejs项目链接数据库与操作

操作数据库模块 hongjilin 2020年7月29日

当时编程习惯还不是很好,如类名命名规范等,可以自行更正

1、类方式声明与使用

Ⅰ-工具包代码

该声明方式好处在于,多次调用时我可以用类与继承的方式进行调用,非常方便

```javascript

/*操作数据库模块 author [洪吉林] 2020年7月29日/

const mysql=require(‘mysql’) const pool=mysql.createPool({ host:’localhost’, user:’root’, password:’root’, port:’3306’, database:’vue_store’ //数据库名

}) /**

  • 封装一个数据库模型基类
  • @type {module.Model} / module.exports=class Model { /*

    • 通用的查询方法
    • @param sql 要执行的sql语句
    • @param params 给sql语句的占位符进行赋值的参数数组 */ static query(sql,params){ return new Promise((resolve ,reject)=>{

      1. pool.getConnection(function (err,connection) {
      2. if (err){
      3. console.error(err)
      4. connection.release()
      5. }else{
      6. //query执行sql语句
      7. connection.query(sql, params,(err,results)=>{
      8. if (err){
      9. console.error(err)
      10. reject(err)
      11. }else{
      12. resolve(results)
      13. }
      14. //结束会话,释放连接
      15. connection.release()
      16. })
      17. }
      18. })

      }) } //此处主要是外部传入参数格式转换 static formatParams(){ let array=[] for (let i=0,l=arguments.length;i<l;i++){

      1. array.push(arguments[i]);

      } return array } } ```

Ⅱ-使用示例

使用继承的方式,可以通过this的方式进行直接调用

  1. module.exports = class student_mod extends require('./model') {
  2. static LoginUserByid(id,password,type){
  3. type=Number(type)
  4. return new Promise((resolve ,reject)=>{
  5. let sql="select * from user where binary id='"+id+"' and password='"+password+"' and type= "+type
  6. console.log(sql)
  7. this.query(sql).then(result=>{
  8. resolve(result)
  9. }).catch(err=>{
  10. reject('登录失败')
  11. })
  12. })
  13. }
  14. /**
  15. * 已读转未读
  16. * @param u_id
  17. * @param n_id
  18. */
  19. static goweiduMod(u_id, n_id) {
  20. u_id = Number(u_id)
  21. n_id = Number(n_id)
  22. return new Promise((resolve, reject) => {
  23. let sql = "delete from `read` where u_id = ? and n_id = ? "
  24. this.query(sql, this.formatParams(u_id, n_id)).then(result => {
  25. resolve("已读转未读成功")
  26. }).catch(err => {
  27. reject("已读转未读失败")
  28. })
  29. })
  30. }
  31. static gethealthNowDayPageTotal(newDate, lastDate) {
  32. return new Promise((resolve, reject) => {
  33. let sql = "select count(1) as count from health where createtime between ? and ?"
  34. this.query(sql, this.formatParams(newDate, lastDate)).then(result => {
  35. resolve(result)
  36. }).catch(err => {
  37. reject(err)
  38. })
  39. })
  40. }
  41. }

2、函数声明方式

直接以函数的方式调用即可

```javascript // 操作数据库模块 mysqlUtils.js 工具包代码 var mysql = require(‘mysql’); let logPrefix=mysql var pool = mysql.createPool({ host : ‘localhost’, user : ‘root’, password : ‘root’, port : ‘3306’, database : ‘xxx’ });

/**

  • 增删改查 通用组件 同步写法 *
  • @param sql 增删改查sql 含占位符
  • @param params 跟占位符顺序匹配的参数数组,要求跟sql的占位符数量一样多 */ let exec = function (sql,params) { // 返回一个 Promise
    1. return new Promise((resolve, reject) => {
    2. pool.getConnection(function (err, connection) {
    3. if (err) {
    4. console.error(err)
    5. } else {
  1. //query执行sql语句
  2. connection.query(sql, params, (err, results) => {
  3. if (err) {
  4. console.error(err)
  5. // reject(err)
  6. } else {
  7. console.log(`${logPrefix}result : ${JSON.stringify(results)}`);
  8. resolve(results)
  9. }
  10. // 结束会话 释放链接
  11. connection.release()
  12. })
  13. }
  14. })
  15. })

}

/**

  • 将所有的参数格式化成数组 参数是可变参数(可变参数在函数声明的时候不写)
  • @returns {Array} */ let formatParams = function () { var array = []; //js中有个变量arguments,可以访问所有传入的值 for(var i = 0, l = arguments.length; i < l; i++){
    1. array.push(arguments[i]);
    } return array; } module.exports = {exec, formatParams}; ```