sequelize参考

sequelize参考快速入门 Sequelize 类 Sequelize 类是引用 sequlize 模块后获取一个顶级对象 我们通过它来创建 sequlize 实例 也可以通过该对象来获取模内其它对象的引用 如 Utils 工具类 Transaction 事务类等 创建实例后 可以通过实例来创建或定义 Model 模型 执行查询 同步数据库结构等操作 注释 mysql 的引擎模块名是 mysql2Model 的定义

  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, // 不允许为null isNull: true, // 是否是null notEmpty: true, // 不允许为空 equals: 'specific value', // 等于某些值 contains: 'foo', // 包含某些字符 notIn: [['foo', 'bar']], // 不在列表中 isIn: [['foo', 'bar']], // 在列表中 notContains: 'bar', // 不包含 len: [2,10], // 长度范围 isUUID: 4, // 是否是合法 uuids isDate: 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` DESC sequelize.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里面最难的部分。 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212979.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:49
下一篇 2026年3月18日 下午6:50


相关推荐

  • fragstats4.2使用

    fragstats4.2使用fragstats 用来计算生态指数 简单方便 1 下载 http www umass edu landeco research fragstats downloads fragstats downloads htmlFragstat 2 软件的安装 1 如果装有 ArcGIS 可以直接使用 2 没有 设置环境变量复制 fragstats bin 所在位置我的电脑 gt 属性 gt 高

    2026年3月19日
    2
  • 刚刚!智谱开源3550亿参数GLM-4.5模型,多项性能或超越Kimi K2成全球第三

    刚刚!智谱开源3550亿参数GLM-4.5模型,多项性能或超越Kimi K2成全球第三

    2026年3月12日
    2
  • Unity Sprite Altas「建议收藏」

    Unity Sprite Altas「建议收藏」SpriteAtlas(精灵图集)SpriteAtlas针对现有的图集打包系统SpritePacker在性能和易用性上的不足,进行了全面改善。除此之外,相比SpritePacker,SpriteAtlas将对精灵更多的控制权交还给用户。由用户来掌控图集的打包过程以及加载时机,更加利于对系统性能的控制。SpriteAtlas的主要有以下三个功能:1.创建、编辑图集以及设定图集参数2.添加图集Variant(变种)3.运行时访问图集下面将通过具体案例来分别展示以上三个功能。创建

    2025年8月7日
    2
  • Python运行环境详细总结

    Python运行环境详细总结1 Python 运行环境概述 2 JupyterNoteb 1 安装 2 2 基本操作 2 3 基本单元 cell2 3 1 命令模式的快捷键 2 3 2 编辑模式下的两种命令 2 4 黑科技操作 3 安装 升级和删除库 3 1pip3 2conda

    2026年3月26日
    2
  • linux 修改文件权限命令_linux给权限命令

    linux 修改文件权限命令_linux给权限命令查看文件权限ls-h命令修改文件权限修改方法1:(参数)命令:chomod语法:chomod[参数][augo][+-=][rwx]文件名例子:1.将文件file1.txt增加可读权限chmodugo+rfile1.txt2.将文件file1.txt设为所有人(all)可读chmoda=rfile1.txt3.为ex1.py文件拥有者取消可执行权限chmodu-xex1.py修改方法2:(数字)命令:chmod语法..

    2025年10月31日
    4
  • 网站管理后台帐号密码暴力激活成功教程方法

    网站管理后台帐号密码暴力激活成功教程方法【导读】对于网站运行的个人站长而言,最担心的是应如何有效且安全的去管理自己的网站,否则自己辛辛苦苦经营的网站就会被不请自来的不速之客给攻破,轻则站点数据被窃取,重则整个网站都被攻陷,导致无法恢复。本文主要从管理后台这个方面来讲解其黑客攻击过程,并通过在虚拟环境中展开实例演示,各读者可以跟着本教程去做实验,通过实验加强对攻击过程的了解,如果你是一名菜鸟站长也可以针对性的去做一下防护方案。…

    2022年10月13日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号