NodeJS Express使用ORM模型访问关系型数据库流程详解

 更新时间:2023年01月10日 16:23:57   作者:秃头小宋s  
这篇文章主要介绍了NodeJS Express使用ORM模型访问关系型数据库流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

一、ORM模型

设计思想,主要目的是简化计算机程序访问数据库

1、ORM:对象关系模型(对象关系映射) Object Releastion Model,将程序中的对象和数据库中关系(表格)进行映射。可以使开发者在程序中方便的对数据库进行操作(用户在程序操作对对象实际就是操作数据库的表格)

2、ORM的映射关系:

(1)程序中的模型(即为类) <——>表名

(2)模型的类型(类中定义的属性)<——> 表的列

(3)由模型创建的对象(类的实例) <——> 表中的行

二、在Node中ORM的实现

1、Sequelize模块:支持ORM映射的模块,可以访问关系型数据库,可以提高node程序访问数据库的开发效率。

2、Sequelize模块的使用:

(1)安装MySQL模块:npm install mysql2

(2)安装Sequelize模块:npm install sequelize

3、Sequelize模块的使用

(1)创建数据库的配置文件

导入

创建数据库的配置对象

//1.导入Sequelize模块
const Sequelize = require('sequelize');
//2.使用Sequelize模块配置和数据库的连接信息
const mysql_Sequelize = new Sequelize('sales','root','syy2589',{
    host:'localhost', //数据库服务器的IP地址或域名
    port:'3306', //数据库使用的端口号,MySQL数据库默认端口号3306
    dialect: 'mysql', //数据库的类型
    pool:{  //数据库连接池:可以放若干个数据库的连接对象,提高数据库访问效率
        max:20, //数据库连接池中连接对象的最大个数
        min:3, //数据库连接池中连接对象的最少个数
        idle:20000 //等待延迟的时间,单位:毫秒
    },
    define:{
        'charset':'utf8' //处理MySQL中中文字符的问题
    }
})
// 3.导出数据库的连接对象
module.exports = mysql_Sequelize;

注:new Sequelize(数据库名,用户名,密码,(配置信息))

 测试数据库是否连接成功

const mysqltest = require('./mysqlconfig.js');
mysqltest.authenticate() //用来测试数据库是否连接成功
    .then(()=>{
        console.log('数据库连接成功~')
    })
    .catch((err)=>{
        console.error(err);
    })

(2)创建模型:实现模型和数据表的映射

模型名 = sequelize.define('数据表名','模型的属性',{其他配置})

模型名 <——> 数据表名

模型的属性<——> 数据表列

const  Sequelize = require(sequelize);
//1.导入数据库的配置对象
const mysql_Sequelize = require('../config/mysqlconfig.js');
// 2.创建模型与数据库中的表实现映射
const Employee = mysql_Sequelize.define('employee',{
    'e_id':{
        type:Sequelize.STRING,
        // type:Sequelize.INTEGER, 表示id的数据类型为int型
        autoIncrement:false, //表示id的值在表中是否自增
        allowNull:false, //表示id对象的值不能为空
        fields:'e_id',//实现模型的属性名和表的列名之间的映射关系(对应关系)
    },
    'e_name':{
        type:Sequelize.STRING,
        autoIncrement:false,
        allowNull:false,
        fields: 'e_name',
    },
    'sex':{
        type:Sequelize.STRING,
        autoIncrement:false,
        allowNull:false,
        fields: 'sex',
    },
    'apartment':{
        type:Sequelize.STRING,
        autoIncrement:false,
        allowNull:true,
        fields: 'apartment',
    },
    'phone':{
        type:Sequelize.STRING,
        autoIncrement:false,
        allowNull:true,
        fields: 'phone',
    },
    'address':{
        type:Sequelize.STRING,
        autoIncrement:false,
        allowNull:true,
        fields: 'address',
    },
},{
    freezeTableName:true, //不使用Sequelize给模型自定义的表名(自定义表名的命名规则:模型名后加s)
    timestamps:false //若为true,在获取数据时会自动添加两列数据(createTime、updateTime)
});
// 导出模型
module.exports = Employee;

(3)创建接口文件:使用模型创建数据表

插入记录

模型名.create({ }).then((result)=>{}):then表示插入操作完成后的处理,result参数中保存有数据库返回的信息

// http://localhost:9000/employee/addemp
Emprouter.post('/addemp',(req,res)=>{
    console.log(req.body);
    Employee.create({
        id:req.body.id,
        name:req.body.name,
        sex:req.body.sex,
        apartment:req.body.apartment,
        phone:req.body.phone,
        address:req.body.address
    }).then((result)=>{
        if(result){
            res.json({
                code:1002
            })
        }
    })
})

(4)前端页面:使用jQuery向服务器端发起ajax请求

表单序列化:表单名.serizlize(),作用是将表单中所有控件的值序列化成字符串

删除记录

模型名:destroy({

where:{

列名:值

}

}).then((result)=>{

删除成功后的回调

}

更新记录

模型名.update({修改的列},{where条件}.then((result)={

更新成功后的回调

}).catch((e)=>{

出现异常的回调

})

查询记录

模型名.findAll().then((result)=>{ //result:是一个数组,存放的是从数据库中查询的所有记录

查询成功后的回调

}).catch((e)=>{

执行查询出现异常的回调

}

Emprouter.get('/findemp',(req,res)=>{
    if(req.url != './favicon.ico'){
        Employee.findAll().then((result)=>{
            res.send(JSON.stringify(result));
        })
    }
})

模糊查询:

在执行带条件查询时,需要导入Sequelize模块的Op子模块,在Op子模块中存放的是所有条件查询的关键字。

const Op = require('sequelize').Op;
Emprouter.post('/findlike',(req,res)=>{
    // 获取前端发送的部门
    let apartment = req.body.apartment;
    // 进行模糊查询
    Employee.findAll({
        where:{
            apartment:{
                [Op.like]:apartment+'%'
            }
        }
    }).then((result)=>{
        res.json(result);
    }).catch((e)=>{
        console.log(e);
        res.json('查询失败~')
    })
})

到此这篇关于NodeJS Express使用ORM模型访问关系型数据库流程详解的文章就介绍到这了,更多相关NodeJS Express访问关系型数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node+socket实现简易聊天室功能

    node+socket实现简易聊天室功能

    这篇文章主要为大家详细介绍了node+socket实现简易聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • nodejs简单实现操作arduino

    nodejs简单实现操作arduino

    本文给大家分享的是使用nodejs来驱动arduino,主要是基于cylonjs 和 gort,有需要的小伙伴可以参考下
    2016-09-09
  • node.js中的fs.lchownSync方法使用说明

    node.js中的fs.lchownSync方法使用说明

    这篇文章主要介绍了node.js中的fs.lchownSync方法使用说明,本文介绍了fs.lchownSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node.js中的fs.unlinkSync方法使用说明

    node.js中的fs.unlinkSync方法使用说明

    这篇文章主要介绍了node.js中的fs.unlinkSync方法使用说明,本文介绍了fs.unlinkSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node+express+ejs制作简单页面上手指南

    node+express+ejs制作简单页面上手指南

    本文记录了使用node+express+ejs制作简单页面的全过程,话说express+ejs真的是太难了,有种蛋蛋的忧伤~
    2014-11-11
  • 深入分析node.js的异步API和其局限性

    深入分析node.js的异步API和其局限性

    这篇文章首先给大家介绍了为什么要用异步API,其次node.js异步api在使用过程有一些什么样的限制呢,对于这个问题我们下面来看看这篇关于node.js异步的介绍分析吧,有需要的可以参考借鉴。
    2016-09-09
  • 从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析

    从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析

    这篇文章主要介绍了Node.js SQLite3和MongoDB用法,结合实例形式分析了SQLite3和MongoDB数据库的初始化、连接、查询等操作的实现技巧与相关注意事项,需要的朋友可以参考下
    2017-04-04
  • Node.js环境下Koa2添加travis ci持续集成工具的方法

    Node.js环境下Koa2添加travis ci持续集成工具的方法

    这篇文章主要给大家介绍了在Node.js环境下Koa2添加travis ci持续集成工具的方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • node.js 用socket实现聊天的示例代码

    node.js 用socket实现聊天的示例代码

    本篇文章主要介绍了node.js 用socket实现聊天的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法

    NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法

    这篇文章主要介绍了NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10

最新评论