美文网首页我爱编程
Node.js关于数据库的一些想法

Node.js关于数据库的一些想法

作者: Alander | 来源:发表于2018-05-26 13:05 被阅读0次

前言

马上服务外包决赛了,好久没有写东西了,大作业太多了,全是扯淡。
上一个创新创业管理项目交付了,昨天突然看见Criteria类如下

Criteria是一种比hql更面向对象的查询方式。

然后想到之前项目里自己采用的方法,惨不忍睹,今天重构一下连接数据库的想法。

实现思路

希望实现的目标:

// 新建与数据库表对应的实体类对象
let award = new AwardPojo() 
// add方法添加需要筛选的条件
award.add({
    award_name: '服务外包大赛'
})  
// search方法根据add方法中的筛选条件查询数据,以Promise方式返回
award.search().then(res => {
    console.log(res)
    award.order()
})
  1. 构建父类
const isEmptyObj = require('./utils').isEmptyObj
const db = require('mysql')
const config = require('./config')

let pools = db.createPool({
    user: config.db.user,
    port: config.db.port,
    password: config.db.password,
    database: config.db.db,
    host: config.db.host,
    connectionLimit: 20
})




function DBInit(tb, _columns) {
    if (tb) this.tableName = tb
    if (_columns) this.columns = JSON.parse(JSON.stringify(_columns))
    this.filter = {}
}

/**
 * 
 * @param {添加筛选条件} _filter 
 */
DBInit.prototype.add = function (_filter) {
    for (let k in _filter) {
        let v = _filter[k]
        this.filter[k] = v
    }
}

/**
 * 查询数据库表
 * @param {开始行数} start 
 * @param {结束函数} end 
 */
DBInit.prototype.search = function (start, end) {
    let sql = `select * from ${this.tableName}`
    if (!isEmptyObj(this.filter)) {
        let fq = `where `
        for (let k in this.filter) {
            let v = this.filter[k]
            fq += `${k}='${v}' and `
        }
        fq = fq.slice(0, fq.length - 4)
        sql += ` ${fq}`
    }
    if (start && end) {
        sql += `limit ${start}, ${end}`
    }
    return new Promise((resolve, reject) =>{
        pools.getConnection((err, connection) => {
            let pojos = null
            if (err) {
                console.log(err)
                reject(pojos)
            }
            connection.query(sql, (err, results) => {
                connection.release()
                if (err) {
                    console.log(err)
                    reject(pojos)
                }
                else {
                    resolve(results)
                }
            })
        })
    })
}

module.exports = DBInit
  1. 对于每张表构建不同的实体类继承自父类即可
const DBInit = require('../DBHelper')
function AwardPojo() {
    let awardPOJO = {
        award_id: '',
        award_time: '',
        award_name: '',
        award_identity: '',
        award_level: ''
    }
    DBInit.call(this, 'award', awardPOJO)
}
AwardPojo.prototype = new DBInit()
AwardPojo.prototype.constructor = AwardPojo
AwardPojo.prototype.order = function() {
    console.log('order')
}

let award = new AwardPojo()
award.add({
    award_name: '服务外包大赛'
})
award.search().then(res => {
    console.log(res)
    award.order()
})

结束

主要用到的知识点只有一个组合继承了,参考js原型链和面向对象的继承。
用mysql库的时候一定要调用release方法关闭链接!

相关文章

  • Node.js关于数据库的一些想法

    前言 马上服务外包决赛了,好久没有写东西了,大作业太多了,全是扯淡。上一个创新创业管理项目交付了,昨天突然看见Cr...

  • 关于一些想法

    刚刚在火车站卫生间里看到自己蒙着口罩的样子,可能因为化了点淡妆,眼睛也恢复了很多,感觉精神奕奕了许多。 不...

  • XDL_NO.8 Node.js 操作MongoDB数据库

    Node.js 操作MongoDB数据库 安装组件 mongodb Node.js 官方对MongoDB的驱动mo...

  • nodeJs

    node.js 搭建服务 数据库常用操作 node操作数据库 案例

  • 分布式数据库 分库分表 读写分离 UUID

    参考关于分布式数据库,你需要知道的一些事(上)关于分布式数据库,你需要知道的一些事(中)关于分布式数据库,你需要知...

  • Node.js安装

    关于Node.js Node.js® is a JavaScript runtime built on Chrom...

  • Node.js yarn安装

    最近在做的前端用的Node.js,关于node.js网上的介绍很多,可以自己了解一下,我自己在安装时遇到一些问题,...

  • Node.js中MySQL的使用

    Node.js的MySQL数据库的使用 下载地址 数据库的分类 关系型数据库非关系型数据库 关系型数据库组成 数据...

  • 关于持久层和数据库一些自己的想法

    最近遇到一些让自己纠结的问题,如持久层到底是选择mybatis还是spring-data-jpa。就我个人而言,m...

  • Node.js链接MySql数据库

    node.js链接数据库: 在 Node.js本地服务器 server文件中安装驱动: npm install m...

网友评论

    本文标题:Node.js关于数据库的一些想法

    本文链接:https://www.haomeiwen.com/subject/jjcmjftx.html