1. 快速入门、Sequelize类

Sequelize类是引用sequlize模块后获取一个顶级对象,我们通过它来创建sequlize实例,也可以通过该对象来获取模内其它对象的引用,如:Utils工具类、Transaction事务类等。创建实例后,可以通过实例来创建或定义Model(模型)、执行查询、同步数据库结构等操作。

注释:mysql的引擎模块名是: mysql2

  1. Model 的定义、使用与Model类的API

Model相当于数据库中表,有时它也会被称为“模型”或“工厂”。Model不能通过构造函数创建,而只能通过sequlize.define方法来定义或通过sequlize.import导入。通过define定义一个Model,就相当于定义了一种模型与数据表之间的映射关系,通过模型可以实现对表记录的增、删、改、查等操作。

  1. 模型(表)之间的关系/关联

模型(Model)之间存在各种各样的关系,如:一对一(One-To-One )、一对多(One-To-Many)等。模型间的关系本质上是对其代表的数据库中表之间的关系描述,通过这些关系可以实现数据库中表之间主/外键约束的创建。查询时也可以基于这些关系,生成在数据库中执行的连接查询或复合查询SQL语句。

  1. 查询与原始查询

Sequelize中有两种查询:使用Model(模型)中的方法查询和使用sequelize.query()进行基于SQL语句的原始查询。

  1. 实例的使用、Instance类介绍

Instance类表示数据库中的一行记录,该类不能直接实例化,而应该由Model对象创建。Instance实例有两种,由Model.build方法创建的非持久化实例,和由Model.create方法创建的持久化实例。应该注意,Instance翻译后也叫做“实例”,但它在Sequelize 中是一个类,它的实例应该叫做“实例”类的实例。

  1. 事务的使用与Transaction类

Transaction是Sequelize中用于实现事务功能的子类,通过调用Sequelize.transaction()方法可以创建一个该类的实例。在Sequelize中,支持自动提交/回滚,也可以支持用户手动提交/回滚

  1. Scopes 作用域的使用

.Scopes - 作用域,表示一个限制范围,它最终会生成SQL查询中的where子句。它在模型定义方法sequelize.define的option参数,或通过Model.scope()方法指定。

  1. 钩子函数的使用、Hooks相关API

Hooks(钩子)是指会在模型生命周期的特殊时刻被调用的函数,如:模型实例被创建前会调用beforeCreate函数,而在模型实例创建后又会调用afterCreate函数。通过这些钩子函数,使用我们具有在生命周期的特殊时刻访问或操作模型数据的能力。

  1. 数据类型类 DataTypes 及其API

在使用sequelize.define方法定义模型时,我们一般会为模型属性(列)指定类型type,它表示数据类型,Sequelize会按指定的类型在数据库中创建字段。这些类型被定义到了sequelize模块的DataTypes类中,它是一个静态类可以直接引用其属性或方法。

  1. Migrations 数据迁移与QueryInterface对象

Sequelize 2.0.0引入了一个新的CLI(命令行工具),其基于gulp并结合sequelize-cli和gulp-sequelize,CLI用于支持数据迁移和项目引导。通过迁移,可以将现有数据库迁移到另一个状态,反之亦然:这些迁移文件会被保存在迁移文件中,迁移文件描述了怎样到达新状态以及如何恢复更改以返回到迁移前的旧状态。

  1. 在Sequelize中使用group by分组聚合查询

在SQL查询中,分组查询是较常用的一种查询方式。分组查询是指通过GROUP BY关键字,将查询结果按照一个或多个字段进行分组,分组时字段值相同的会被分为一组。在Node.js基于Sequelize的ORM框架中,同样支持分组查询,使用非常简单方便。

  1. Sequelize 字段自增、自减及批量自增、自减更新

Sequelize 可以实现针对单个实例的一或多个字段的自增、自减操作,也可以对符合条件的数据进行批量的自增、自减操作。单个实例字段的自增、自减可以利用Instance的相应方法实现,而批量自增、自减则需要借助sequelize提供的字面量方法实现。

  1. Sequelize belongsToMany关系的使用及 is not associated with 问题的处理

belongsToMany用于表示模型间N:M(多对多)的关系,N:M关系通过一个“关系表”建立两个模型间的关联关系。用于建立关联关系的“关系表”可以手工创建,也可以由Sequelize自动创建。

  1. Node.js Sequelize 实现数据库读写分离

在构建高并发的Web应用时,除了应用层要采取负载均衡方案外,数据库也要支持高可用和高并发性。使用较多的数据库优化方案是:通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力。在Node.js中,使用 Sequelize操作数据库时,同样支持读写分离。

  1. Sequelize 多数据库操作

Sequelize 基于数据库实例定义模型,可以方便的进行数据的增、删、改、查操作,并可以基于模型关系实现连接查询、事务等操作。但这些操作都是基于一个数据库实例,即:一个sequelize实例,除读写分离外,Sequelize也并不支持多数据库操作。如果你的项目中需要对多个数据库进行操作,就不那么方便。本文将针对Sequelize操作多数据库的情况做一些整理

  1. Sequelize 连接查询时include中model与association的区别

在使用Sequelize进行关系模型(表)间连接查询时,我们会通过model/as来指定已存在关联关系的连接查询模型,或是通过association来直接指定连接查询模型关系。那么,两者各应该在什么场景下使用呢?

参考:
中文文档
官方文档
参考文档
查询缓存
var ValidateMe = sequelize.define('foo', {foo: {type: Sequelize.STRING,validate: {is: ["^[a-z]+$",'i'],     // 全匹配字母is: /^[a-z]+$/i,          // 全匹配字母,用规则表达式写法not: ["[a-z]",'i'],       // 不能包含字母isEmail: true,            // 检查邮件格式isUrl: true,              // 是否是合法网址isIP: true,               // 是否是合法IP地址isIPv4: true,             // 是否是合法IPv4地址isIPv6: true,             // 是否是合法IPv6地址isAlpha: true,            // 是否是字母isAlphanumeric: true,     // 是否是数字和字母isNumeric: true,          // 只允许数字isInt: true,              // 只允许整数isFloat: true,            // 是否是浮点数isDecimal: true,          // 是否是十进制书isLowercase: true,        // 是否是小写isUppercase: true,        // 是否大写notNull: true,            // 不允许为nullisNull: true,             // 是否是nullnotEmpty: true,           // 不允许为空equals: 'specific value', // 等于某些值contains: 'foo',          // 包含某些字符notIn: [['foo', 'bar']],  // 不在列表中isIn: [['foo', 'bar']],   // 在列表中notContains: 'bar',       // 不包含len: [2,10],              // 长度范围isUUID: 4,                // 是否是合法 uuidsisDate: true,             // 是否是有效日期isAfter: "2011-11-05",    // 是否晚于某个日期isBefore: "2011-11-05",   // 是否早于某个日期max: 23,                  // 最大值min: 23,                  // 最小值isArray: true,            // 是否是数组isCreditCard: true,       // 是否是有效信用卡号// 自定义规则isEven: function(value) {if(parseInt(value) % 2 != 0) {throw new Error('请输入偶数!')}}}}
});Project.findAll({//复杂过滤,可嵌套where: {id: {$and: {a: 5}           // AND (a = 5)$or: [{a: 5}, {a: 6}]  // (a = 5 OR a = 6)$gt: 6,                // id > 6$gte: 6,               // id >= 6$lt: 10,               // id < 10$lte: 10,              // id <= 10$ne: 20,               // id != 20$between: [6, 10],     // BETWEEN 6 AND 10$notBetween: [11, 15], // NOT BETWEEN 11 AND 15$in: [1, 2],           // IN [1, 2]$notIn: [1, 2],        // NOT IN [1, 2]$like: '%hat',         // LIKE '%hat'$notLike: '%hat'       // NOT LIKE '%hat'$iLike: '%hat'         // ILIKE '%hat' (case insensitive)  (PG only)$notILike: '%hat'      // NOT ILIKE '%hat'  (PG only)$overlap: [1, 2]       // && [1, 2] (PG array overlap operator)$contains: [1, 2]      // @> [1, 2] (PG array contains operator)$contained: [1, 2]     // <@ [1, 2] (PG array contained by operator)$any: [2,3]            // ANY ARRAY[2, 3]::INTEGER (PG only)},status: {$not: false,           // status NOT FALSE}}
})
Project.all()
Project.findById
Project.findByOne
Project.findOrCreate
Project.findAndCountAll
Project.count()
Project.max()
//CRUD
Project.create()
Project.save()
Project.update()
Project.destroy()
//批量
User.bulkCreate([])
//排序
something.findOne({order: ['name',// 返回 `name`'username DESC',// 返回 `username DESC`['username', 'DESC'],// 返回 `username` DESCsequelize.fn('max', sequelize.col('age')),// 返回 max(`age`)[sequelize.fn('max', sequelize.col('age')), 'DESC'],// 返回 max(`age`) DESC[sequelize.fn('otherfunction', sequelize.col('col1'), 12, 'lalala'), 'DESC'],// 返回 otherfunction(`col1`, 12, 'lalala') DESC[sequelize.fn('otherfunction', sequelize.fn('awesomefunction', sequelize.col('col'))), 'DESC']// 返回 otherfunction(awesomefunction(`col`)) DESC, 有可能是无限循环[{ raw: 'otherfunction(awesomefunction(`col`))' }, 'DESC']// 也可以这样写]
})
// 分页查询
Project.findAll({ limit: 10 })
Project.findAll({ offset: 8 })
Project.findAll({ offset: 5, limit: 5 })
//关联查询 include 支持嵌套,这可能是ORM里面最难的部分。

sequelize参考相关推荐

  1. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...

  2. egg mysql 项目实战,egg.js创建项目,目录介绍,简单使用,sequelize mysql使用

    1.egg项目的创建 创建项目 npm init egg --type=simple 安装依赖 npm i 依赖安装完成后运行命令 npm run dev 即可运行项目 参考官方文档 https:// ...

  3. node本地连接服务器的数据库_基于Node.jsORM框架Sequelize的数据库迁移一

    开课吧Web前端教程 前言 在日常的后端项目开发中,我们经常需要和数据库打交道.在这个过程中,我们需要创建数据库.表还有一些测试数据.许多时候,因为业务需求的变更导致的数据库结构的变化,需要修改数据库 ...

  4. sequelize模型关联_Node.js Sequelize 模型(表)之间的关联及关系模型的操作

    Sequelize模型之间存在关联关系,这些关系代表了数据库中对应表之间的主/外键关系.基于模型关系可以实现关联表之间的连接查询.更新.删除等操作.本文将通过一个示例,介绍模型的定义,创建模型关联关系 ...

  5. 记录nodejs使用express搭建一个api服务器程序(5)-nodejs操作SQL数据库,Sequelize和Knex

    此文章是我自己用来记录如何搭建一个以express为基础的api服务器框架的过程,并不是什么新手教程,并不会每一步都写得非常详细,如果您要阅读此文,需要一点nodejs和编写代码的基础知识 文接上篇 ...

  6. sequelize多条件_Sequelize 和 MySQL 对照

    如果你觉得Sequelize的文档有点多.杂,不方便看,可以看看这篇. 在使用NodeJS来关系型操作数据库时,为了方便,通常都会选择一个合适的ORM(Object Relationship Mode ...

  7. Sequelize 中文API文档

    Sequelize 中文API文档-1. 快速入门.Sequelize类 2016年05月20日     35766     声明 Sequelize类是引用sequlize模块后获取一个顶级对象,我 ...

  8. Node项目使用Sequelize操作数据库(一)(包括模型,增,删、改等)

    Sequelize 是一个基于 Promise 的 Node.js ORM,目前支持 Postgres.MySQL.SQLite 和 Microsoft SQL Server.它具有强大的事务支持,关 ...

  9. nodejs+sequelize实现sqlite3开启密码认证

    nodejs+sequelize实现sqlite3开启密码认证 背景:最近项目中使用了sqlite3,但是免费版sqlite3是不支持账户密码登录的,数据库文件就很危险,任何人都可以轻易的查看数据库内 ...

最新文章

  1. C语言运算符优先级-----从没像现在这样深刻体会
  2. RedHat6.5-Linux安装telnet服务
  3. 线性代数之矩阵导数微分
  4. android studio 连不上设备,Android Studio-设备已连接但“脱机”
  5. “约见”面试官系列之常见面试题第一篇说说promise(建议收藏)
  6. ASP.NET小收集:Word的编码是Unicode
  7. 致openGauss社区用户的一封信
  8. 华为广域网帧中继(背靠背)配置
  9. 第二季-专题14-串口来做控制台
  10. 各类免费的的机器人仿真软件优缺点汇总
  11. CAD学习笔记中级课【模板样式】
  12. codeblocks编译器报错Id returned 1 exit status
  13. C++ Source Flowchart 自动生成C++程序流程图
  14. idea插件开发icon设计
  15. Unity Shader 常规光照模型代码整理
  16. 全屏状态下的ESC键监听处理
  17. charles入门使用
  18. CentOs服务器nginx重启
  19. Word删除关键字所在行
  20. java学习日记-接口

热门文章

  1. linux中通过date命令获取昨天或明天时间的方法
  2. flutter 使用 定时器和延时器
  3. 百度地图开发者平台普通IP定位功能详解
  4. Latex algorithm
  5. linux安卓busybox命令,busybox
  6. 比较DVI端口和VGA端口
  7. 环境质量pm2.5各城市各站点历史数据14年至今
  8. 多项式除法Java实现
  9. 莆田Java开发_莆田学java编程,莆田java编程学习学校,莆田java编程学习一般能拿多少工资...
  10. 克服焦虑症的6个方法