Node.js ORM框架-sequelize

  • 什么是ORM
  • 什么是“持久化”
  • 什么是持久层
  • ORM技术特点
  • 什么是Sequelize
  • Sequelize特点
  • 使用方式
    • 安装库
    • 配置sequelize
    • 定义模型对象
    • 具体使用
      • 1、查询所有findAll
      • 2、查询满足条件的(Id=2)
      • 3、增加信息create
      • 4、删除单条信息destroy
      • 5、批量删除
      • 6、修改信息update
      • 将上述方法封装
      • 实现接口完成上述操作
      • 测试结果

什么是ORM

ORM(Object Relational Mapping,对象关系映射),是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,通过描述对象和数据库之间映射的元数据,把程序中的对象自动持久化到关系数据库中。它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。

什么是“持久化”

即把数据(如内存中的对象)保存的磁盘的某一文件中。

什么是持久层

持久层(Persistence Layer),即实现数据持久化应用领域的一个逻辑层面,将数据使用者和数据实体相关联。

ORM技术特点

1、提高了开发效率。ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。

2、ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

什么是Sequelize

Sequelize.js是一款针对nodejs的ORM框架。

它是一个很成熟的框架,在速度和性能上也非常有优势。而其中最关键的地方就在于,日常开发只需要管理对象的创建、查询方法的调用等即可,极少需要编写sql语句。这一个好处就是省去了复杂的sql语句维护,同时也避免了因sql而引起的不必要的bug。

它支持的数据库包括:PostgreSQL、 MySQL、MariaDB、 SQLite 和 MSSQL。

Sequelize特点

1、强大的模型定义,支持虚拟类型。

2、支持完善的数据验证,减轻前后端的验证压力。

3、Sequelize的查询非常全面和灵活

使用方式

安装库

1、安装MySQL:npm install mysql
2、安装Sequelize:npm i sequelize mysql2 -S

配置sequelize

基本语法格式

new Sequelize("表名","用户名","密码",配置)

正常使用中很少使用到所有的参数,这里提供一个常用的模板,只需要修改自己使用的值即可。

//导入sequelize模块
const Sequelize = require('sequelize');//配置数据库连接对象(默认带有链接池)
const db = new Sequelize('info','root','root23',{host:'localhost',//数据库地址port:3306,//数据库端口dialect:'mysql',//数据库类型pool:{max:5,//最大连接数量min:0,//最小连接数idle:10000 //若某个线程10秒没有使用,就释放},debug:true, //显示调试信息
})
module.exports = db;

定义模型对象

在使用之前一定要先创建模型对象。就是数据库中表的名称、使用到的字段、字段类型等。

const Sequelize = require('sequelize');const db = require('../config/dbbook');//定义模型
const BookModel = db.define('bookinfo',{id:{type:Sequelize.INTEGER,//数据类型primaryKey:true//是否主键},isbn:{type:Sequelize.CHAR(13),allowNull:false//是否可以是空值},bookName:{type:Sequelize.STRING(200),allowNull: false,field:'name'//映射数据库中name字段},author:{type:Sequelize.STRING(100),allowNull:false},press:{type:Sequelize.STRING(100),allowNull:false},price:{type:Sequelize.DECIMAL(7,2),allowNull:false},pubDate:{type:Sequelize.DATE,allowNull:false,field: "pubdate"},pricture:{type:Sequelize.STRING(255),}
},{//使用自定义表名freezeTableName: true,//去掉默认的添加时间和更新时间timestamps: false,
});
module.exports=BookModel;

具体使用

1、查询所有findAll

查询用的参数普遍通用,只有部分API的有特殊参数。

let getBooks = async function(){let result = Book.findAll({raw:true})return result}

2、查询满足条件的(Id=2)

let getBooks = async function(){let result = Book.findAll({where:{id:2,//id等于10}})return result
}

3、增加信息create

添加只需要传入model对象即可。这里要保证model对象的属性和字段名要一致。如果不一致就会出错。

let addBook = async function(params){let result = Book.create({isbn:params.isbn,bookName:params.bookName,author:params.author,press:params.press,price:params.price,pubDate:params.pubDate,pricture:params.pricture})return result;}

4、删除单条信息destroy

用配置参数有条件的区别要删除的对象即可。

let delBook = async function(bid){let result = Book.destroy({where:{id:bid}})return result;}

5、批量删除

batchBook:async function(id_list){let result = Book.destroy({where:{id:{[Op.in]:id_list}}})}

6、修改信息update

更新方法可以传入要更新的model对象,同时用配置参数有条件的区别要更新的对象。

let updateBook=async function(params){let result = Book.update({isbn:params.isbn,bookName:params.bookName,author:params.author,press:params.press,price:params.price,pubDate:params.pubDate,pricture: params.pricture},{where:{id:params.id}})}

将上述方法封装

const Sequelize = require('sequelize');
const Book = require('../model/bookModel');
const Op = Sequelize.Op;//导入Sequelize操作符
//定义对象,完成CRUD操作
const bookOption = {getBooks:async function(){let result = Book.findAll({raw:true})return result},getidBook:async function(){let result = Book.findAll({where:{id:2,//id等于10}})return result},addBook:async function(params){let result = Book.create({isbn:params.isbn,bookName:params.bookName,author:params.author,press:params.press,price:params.price,pubDate:params.pubDate,pricture:params.pricture})return result;},//删除delBook:async function(bid){let result = Book.destroy({where:{id:bid}})return result;},//批量删除batchBook:async function(id_list){let result = Book.destroy({where:{id:{[Op.in]:id_list}}})},//更新图书updateBook:async function(params){let result = Book.update({isbn:params.isbn,bookName:params.bookName,author:params.author,press:params.press,price:params.price,pubDate:params.pubDate,pricture: params.pricture},{where:{id:params.id}})}
}
module.exports = bookOption;

实现接口完成上述操作

const express = require('express');
const router = express.Router();
//导入BookOption对象
const bookOption = require('../../db/crud/bookOption');/*查询所有接口:http://localhost:8089/bookapi/books*/
router.get('/books',(req,res)=>{bookOption.getBooks().then((data)=>{res.send(data);})
})/*查询id=2:http://localhost:8089/bookapi/bookid*/
router.get('/bookid',(req,res)=>{bookOption.getidBook().then((data)=>{res.send(data);})
})/*增加图书:http://localhost:8089/bookapi/add*/
router.post('/add',(req,res)=>{let params = {isbn:req.body.isbn,bookName:req.body.bookName,author:req.body.author,press:req.body.press,price:req.body.price,pubDate:req.body.pubDate,pricture:req.body.pricture}bookOption.addBook(params).then((data)=>{// console.log(data[dataValues].pricture)res.send({code:data,msg:'添加成功'})})
})/*删除图书:http://localhost:8089/bookapi/del*/
router.delete('/del',(req,res)=>{bookOption.delBook(req.body.id).then((data)=>{res.send({code:data,msg:'删除成功'})})
})
/*批量删除图书:http://localhost:8089/bookapi/batch*/
router.delete('/batch',(req,res)=>{//1.获取id拼接的字符串let idStr = req.body.ids//2.将字符串分割成数组let id_list = idStr.split(',');bookOption.batchBook(id_list).then((data)=>{res.send({code:data,msg:'批量删除成功'})})
})
/*更新图书:http://localhost:8089/bookapi/updata*/
router.put('/updata',(req,res)=>{let params = {id:req.body.id,isbn:req.body.isbn,bookName:req.body.bookName,author:req.body.author,press:req.body.press,price:req.body.price,pubDate:req.body.pubDate,pricture:req.body.pricture}bookOption.updateBook(params).then((data)=>{res.send({code:data,msg:'更新成功'})})
})
module.exports=router;

测试结果

1、打开Postman访问:http://localhost:8089/bookapi/books

2、打开Postman访问:http://localhost:8089/bookapi/bookid
3、打开Postman访问:http://localhost:8089/bookapi/add

然后输入要添加的信息
由于我们的id是自增的所以我们添加id时添加不进去,但是不能缺少,可以给id为null作为占位符。

4、打开Postman访问:http://localhost:8089/bookapi/updata
将价格改为108

5、打开Postman访问:http://localhost:8089/bookapi/del

删除id为2的记录

6、打开Postman访问:http://localhost:8089/bookapi/batch

删除ids为14,21的记录。

Node.js ORM框架-sequelize相关推荐

  1. Node.js ORM 框架 Sequelize 重要更新 v5 发布

    Node.js ORM 框架 Sequelize v5 已正式发布,这也是 v4 推出一年多后的主要版本. Sequelize 是一个基于 promise 的 Node.js ORM,目前支持 Pos ...

  2. php sequelize,egg.js整合数据库ORM框架Sequelize

    在上篇文章中我们写了egg.js怎么连接mysql数据库, 而在一些较为复杂的应用中,我们可能会需要一个 ORM 框架来帮助我们管理数据层的代码.Java中有Mybatis.Hibernate.Spr ...

  3. 面向前端与未来标准的Node.js Web 框架再进化

    Web 开发一直是 Node.js 的主流方向,无论新人必学的 Express / Koa,或者是社区流行的企业级框架 Egg / Nest,各类 Web 框架层出不穷.本次分享来自阿里巴巴前端技术专 ...

  4. Node.js Web 框架再进化 - 面向前端与未来标准

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 Web 开发一直是 Node.js 的主流方向,无论新人必学的 Express / Koa, ...

  5. koa+ts+mysql后台开发——(五)使用orm框架sequelize操作数据库,自定义格式校验、统一处理返回信息、分页格式

    文章目录 前言 一.引包 二.初始化sequelize 三.添加模型层 四.添加服务层 五.添加控制层 (增删改查) 六.自定义数据校验 七.统一处理返回信息 八.统一处理分页格式 九.在路由中引入导 ...

  6. Fastify 2.2.0 和 1.14.5 发布,极速 Node.js Web 框架

    百度智能云 云生态狂欢季 热门云产品1折起>>>   Fastify 2.2.0 和 1.14.5 发布了.Fastify 是一个高度专注于以最少开销和强大的插件架构为开发者提供最佳 ...

  7. Fastify 2.0.1 和 1.14.3 发布,极速 Node.js Web 框架

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   Fastify 2.0.1 和 1.14.3 发布了.Fastify 是一个高度专注于以最少开销和强大的插件架构为开发者提供最佳体验的 We ...

  8. node.js web框架_使用Node.js进行Web爬取的终极指南

    node.js web框架 So what's web scraping anyway? It involves automating away the laborious task of colle ...

  9. Node.js 后端框架排名

    根据 GitHub Star 数量作了个 Node.js 后端框架排名,发布时间以首个版本发布(0.x)为准. 结果如下: 排名 框架名称 star数 语言 首个版本发布时间 查看项目 备注 1 ex ...

最新文章

  1. 为了研究因果关系,原来科学家在这么多方向上都有尝试
  2. node基础学习——操作文件系统fs
  3. PerfLab(直接在服务器上完成)
  4. 技术玩法大升级,网易MCtalk揭秘5G即时通讯技术背后的秘密
  5. http://www.uupoop.com/ps/
  6. uniapp 分享缩略图过大怎么办_经验分享| 反击破转子断裂的应急处理方法
  7. 平面图判连通 蓝桥杯模拟赛题
  8. win10计算机信息更改图,Win10系统怎么修改通知信息的位置【图文】
  9. 智能文档处理、文本识别、OCR产品体验,多场景横向对比,哪家准确率最高
  10. 格式化json的方法
  11. Weblogic 部署问题及解决方法
  12. 业绩梯队:让各层级领导者做出正确的业绩
  13. 分享2个堪称黑科技的Ai一键抠图网站 让你秒变PS抠图大神
  14. 有关聊天机器人的近两年的优秀论文和开源程序
  15. 抽象工厂模式在spring源码中的应用
  16. windows下管理员用户与标准用户切换过程中的坑
  17. 小甲鱼PE详解之资源(PE详解11)
  18. 2018最新Web前端经典面试题与答案
  19. 转型 细分 新篇章——2018锐捷睿易全国合作伙伴大会
  20. 数据类型详解之字符串

热门文章

  1. 主生产计划 操作教程 用友u8_用友财务软件不会操作?超详细操作流程及技巧,收藏...
  2. 漫画:大数据的社交牛逼症是怎么得的?
  3. 英集芯科技通过注册:9个月营收5.7亿 黄洪伟为实控人
  4. 【转】关于羽毛球拍拉线方法的介绍
  5. SICP2——Python中使用函数构建对象
  6. 计算机应用基础教程上机指导及题库,计算机应用基础教程实验指导及习题集
  7. 向Vue的prototype上绑定或.use()时Cannot read properties of undefined (reading ‘prototype‘)
  8. ubuntu使用教程与常用命令
  9. [附源码]计算机毕业设计-Steam游戏平台系统论文Springboot程序
  10. 泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。 有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。