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

目录
  • 一、ORM模型
  • 二、在Node中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)创建接口文件:使用模型创建数据表

1️⃣插入记录

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

// http://localhost:9000/employee/addempEmprouter.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请求

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

2️⃣删除记录

模型名:destroy({

where:{

列名:值

}

}).then((result)=>{

删除成功后的回调

}

3️⃣ 更新记录

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

更新成功后的回调

}).catch((e)=>{

出现异常的回调

})

4️⃣ 查询记录

模型名.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));        })    }})

5️⃣ 模糊查询:

在执行带条件查询时,需要导入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访问关系型数据库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • NodeJs Express框架实现服务器接口详解

    目录 CORS 跨域资源共享 1. 接口的跨域问题 2. 使用 cors 中间件解决跨域问题 创建基本的服务器 创建 API 路由模块 编写 GET 接口 编写 POST 接口 注意:如果要获取 URL-encoded 格式的请求体数据,必须配置中间件 app.use(express.urlencoded({ extended: false })) CORS 跨域资源共享 1. 接口的跨域问题 <body> <button id="btnGET">GET<

  • Nodejs封装类似express框架的路由实例详解

    代码如下 var http=require('http'); var ejs=require('ejs'); var app=require('./model/express-route.js'); console.log(app); http.createServer(app).listen(3000); app.get('/',function(req,res){ var msg='这是数据库的数据' ejs.renderFile('views/index.ejs',{msg:msg},fu

  • NodeJs Express中间件超详细讲解

    目录 什么是中间件 现实生活中的例子 Express 中间件的调用流程 Express 中间件的格式 next 函数的作用 定义中间件函数 全局生效的中间件 定义全局中间件的简化形式 中间件的作用 定义多个全局中间件 局部生效的中间件 定义多个局部中间件 了解中间件的5个使用注意事项 中间件的分类 应用级别的中间件 路由级别的中间件 错误级别的中间件 Express内置的中间件 第三方的中间件 自定义中间件 1. 需求描述与实现步骤 2. 定义中间件 3 .监听req的data事件 4. 监听r

  • NodeJs Express中间件使用流程解析

    目录 1.调用流程 2.格式 3.next函数的作用 4.定义中间件函数 5.全局生效的中间件 6.中间件的作用 7.定义多个全局中间件 8.局部生效的中间件 9.定义多个局部中间件 10.了解中间件的注意事项 11.中间件的分类 1.应用级别的中间件 2.路由级别的中间件 3.错误级别的中间件 4.Express内置的中间件 5.第三方中间件 6.自定义中间件 中间件(Middleware),特指业务流程的中间处理环节 1.调用流程 当一个请求到达Express的服务器之后,可以连续调用多个中

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

    目录 一.ORM模型 二.在Node中ORM的实现 一.ORM模型 设计思想,主要目的是简化计算机程序访问数据库 1.ORM:对象关系模型(对象关系映射) Object Releastion Model,将程序中的对象和数据库中关系(表格)进行映射.可以使开发者在程序中方便的对数据库进行操作(用户在程序操作对对象实际就是操作数据库的表格) 2.ORM的映射关系: (1)程序中的模型(即为类) <——>表名 (2)模型的类型(类中定义的属性)<——> 表的列 (3)由模型创建的对象(

  • 微信小程序访问mysql数据库流程详解

    目录 1 开通云上的mysql 2 创建自定义连接器 3 创建云函数 4 安装依赖 5 出参映射 6 在小程序中使用连接器 总结 1 开通云上的mysql 经过询价,我发现阿里云的数据库是比较便宜的,新人购买非常划算.对于爱学习的博主来说,果断购买一个. 按照操作指引购买后,云会帮你创建一系列的环境,在控制台就可以看到属于自己的实例 点击操作列上的管理,就可以创建我们自己的数据库.配置的步骤是先创建数据库的账号 然后创建一个数据库 都设置好之后就可以登录数据库,创建表,加数据了 刚创建好的数据库

  • nodejs express路由匹配控制及Router模块化使用详解

    目录 路由控制匹配 Router模块化路由 使用方式 对比app上的路由 总结 路由控制匹配 本文主要分析下express的核心功能路由的使用. express路由的匹配规则: 支持模糊匹配,同一个路由可能命中多个定义的路由 router.get("/user/*",(req,res,next)=>{ console.log("====demo====") }) router.get("/user/list",(req,res,next)=

  • Tensorflow加载模型实现图像分类识别流程详解

    目录 前言 正文 VGG19网络介绍 总结 前言 深度学习框架在市面上有很多.比如Theano.Caffe.CNTK.MXnet .Tensorflow等.今天讲解的就是主角Tensorflow.Tensorflow的前身是Google大脑项目的一个分布式机器学习训练框架,它是一个十分基础且集成度很高的系统,它的目标就是为研究超大型规模的视觉项目,后面延申到各个领域.Tensorflow 在2015年正式开源,开源的一个月内就收获到1w多的starts,这足以说明Tensorflow的优越性以及

  • Python操作MongoDb数据库流程详解

    1.简介 MongoDB是一个基于分布式文件存储的文档数据库,可以说是非关系型(NoSQL,Not Only SQL)数据库中比较像关系型数据库的一个,具有免费.操作简单.面向文档.自动分片.可扩展性强.查询功能强大等特点,对大数据处理支持较好,旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB文档类似于JSON对象.字段值可以包含其他文档,数组及文档数组. 2.应用 MongoDB数据库可以到网

  • Django CBV模型源码运行流程详解

    在view文件中编写一个类,并配置好路由 class Test(View): def get(self, request, *args, **kwargs): return HttpResponse('cbv_get') def post(self, request, *args, **kwargs): return HttpResponse('cbv_post') url(r'test/',views.Test.as_view()), 通过as_view()进入查看源码 实际上views.Te

  • django ORM之values和annotate使用详解

    任务需求:项目中有个问题表,存储所有的问题,以_id为编号,由于_id未做唯一校验,所以早期数据有多个问题使用同一编号的情况. 需求就是找出编号有重复的数据,只保留第一个 开始之前 使用了values和annotate两个函数 简单的来说values可以理解成展示models指定列的值 annotate起到了group by的作用, 所以我做的事就是对指定字段按个数进行统计,然后留下重复编号的数据,进行清洗 看看数据库数据 查看每条数据的_id的值 对_id数据条数进行统计 转换数据格式为lis

  • mysql 操作数据库基础详解

    目录 一.介绍 二.SQL分类 三.基本操作 创建 查询 修改 删除 使用数据库 一.介绍 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. 是最流行的关系型数据库管理系统之一. 二.SQL分类 SQL语句的五种分类分别是DDL.DML.DDL.DQL.DCL. 数据定义语言(DDL) 用来创建数据库中的各种对象,创建.删除.修改表的结构.关键字:create, drop,alter 等 数据操作语言(DM

  • php 访问oracle 存储过程实例详解

    php 访问oracle 存储过程实例详解 比如我的本地Oracle数据库有一个package,里面有一个存储过程: create or replace package PKG_TRANS_REL is -- Author : test -- Created : -- Purpose : test -- Public type declarations PKG_NAME varchar2(20) := 'PKG_TRANS_REL'; --存储过程,测试用 procedure pro_GC_wi

  • django基础之数据库操作方法(详解)

    Django 自称是"最适合开发有限期的完美WEB框架".本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触Django ,本文会让你在感性上对Django有个认识,完成本文操作后会让你有兴趣阅读的相关书籍和文档. 本文客操作的环境,如无特别说明,后续都以下面的环境为基础: =================== Windows 7/10 python 3.5 Django 1.10 ======

随机推荐