概述
Sequelize 是一款 Node.js ORM 框架,它支持 MySQL、PostgreSQL、SQLite 和 MSSQL 等多种关系型数据库。Sequelize 统一了数据库访问 API,提供丰富的操作方法,并可支持以 Promise 和 async/await 的方式进行异步操作,极大地简化了开发者的编码工作。
本文将对 Sequelize 中文文档进行翻译,并向读者展示 Sequelize 的各种用法和特性,以及如何在实际项目开发中使用 Sequelize。
安装和配置
安装 Sequelize 非常简单,只需要执行一条 npm 命令:
npm install sequelize
Sequelize 还依赖于相应数据库的 Node.js 驱动程序,以 MySQL 为例,需要执行以下命令:
npm install mysql2
在使用 Sequelize 之前,还需要进行一些配置工作,比如:
- 初始化 Sequelize 实例,并指定要使用的数据库类型、数据库名称、用户名和密码等信息。
- 定义模型(Model),即数据库表的数据结构和约束条件。
- 实现数据表的关联(Association),即在不同的表之间建立关系,便于数据的查询和更新。
下面分别介绍这些步骤。
初始化 Sequelize
在使用 Sequelize 之前,需要先初始化 Sequelize 实例。Sequelize 提供了一种 config 方式来进行配置,config 实例可以方便地进行全局设置和访问。
const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql', host: 'localhost' }); module.exports = sequelize;
在上面的代码中,我们使用 Sequelize 的构造函数创建了一个 sequelize 实例,指定了使用 MySQL 数据库,以及连接的数据库名称、用户名和密码。
定义模型
在 Sequelize 中,我们需要先定义模型,才能进行数据的增删改查操作。模型定义了数据库表的名称、数据类型、索引、约束等信息,可以直接映射到数据库表。
创建模型
创建模型的方法是使用 Sequelize.define() 方法,该方法接收两个参数:模型名称和属性,其中属性是一个对象字面量,用于指定每个字段的类型、长度、约束等信息。
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------- - ----------------------- ----- ---- - ------------------------ - -- ---- --- ------------------ -------------- ----- ----------- ----- ---------- ----- --- - ----- ------------------ -------------- ----- ----------- ----- ---------- ----- -- ----- - ----- ----------------- ---------- ----- -- ---- - ----- ------------------ ---------- ----- - -- - -- ---------------- ---- -- ----- ---------------- ----- ----- - --------- ------- ------- ------- - --- -------------- - -----
在上面的代码中,我们定义了一个名为 User 的模型,它有三个字段:id、name 和 age。其中,id 是一个自增的整型字段,作为主键;name 是一个字符串类型的字段,不能为空;age 是一个整型字段,不能为空。
另外,我们还通过 freezeTableName 和 name 对模型名称进行了单数形式化处理,使其在生成 SQL 语句时的表名为 users,而不是 sequelize 中定义的 user,方便后续操作。
同步模型到数据库
定义完模型后,需要使用 sequelize.sync() 方法将其同步到数据库中。该方法会检查数据库是否存在对应的表结构,如果不存在,则会创建出表结构;如果已存在,则会刷新表结构,以保证与定义的模型一致。
-- -------------------- ---- ------- ----- ---- - ------------------ ----- --------- - ----------------------- ---------------- -------- -- - ---------------- ------ ---- ------------ ---------------- -- -------------- -- - -------------------- --------------- ------- ----------- ---
在上面的代码中,我们使用 sequelize.sync() 方法将所有定义的模型同步到数据库中,并通过 then/catch 方法处理相关的结果。
实现数据表的关联
在 Sequelize 中,数据表的关联(Association)是一个重要的概念,它指的是在不同表之间建立关系,以便实现数据的联合查询、更新和删除等操作。在 Sequelize 中,数据表的关联包括以下几种:
- 一对一关联
- 一对多关联
- 多对多关联
接下来我们分别介绍这几种关联方式的实现方法。
一对一关联
一对一关联是指两个实体之间只存在一种关联关系,这种关系最常见的应用场景是在数据分析系统中,对于同一个实体可能存在不同的维度信息,需要把这些信息拆分到不同的表中,并通过一对一关联进行查询。
在 Sequelize 中,一对一关联的实现方式很简单,只需要在其中一个模型中使用 hasOne() 方法,另一个模型中使用 belongsTo() 方法即可。
-- -------------------- ---- ------- -- ------- ----- --------- - --------------------- ----- --------- - ----------------------- ----- ---- - ------------------------ - --- - ----- ------------------ -------------- ----- ----------- ----- ---------- ----- -- ----- - ----- ----------------- ---------- ----- -- ---- - ----- ------------------ ---------- ----- - -- - ---------------- ----- ----- - --------- ------- ------- ------- - --- -------------- - ----- -- --------- ----- --------- - --------------------- ----- --------- - ----------------------- ----- ---- - ------------------ ----- ------ - -------------------------- - --- - ----- ------------------ -------------- ----- ----------- ----- ---------- ----- -- ------ - ----- ----------------- ---------- ----- - -- - ---------------- ----- ----- - --------- --------- ------- --------- - --- ---------------------- - ----------- --------- ---------- ---- --- ------------------- - ----------- --------- ---------- ---- --- -------------- - -------
在上面的示例代码中,我们定义了两个模型:User 和 Member。其中,Member 模型是一个一对一关联表,它与 User 模型之间建立了一对一的关联关系。这里需要注意的是,在 Member 模型中需要使用 belongsTo() 方法指定关联的目标模型,并通过 foreignKey 和 targetKey 指定关联的外键和目标键。
一对多关联
一对多关联是指一个实体与多个实体之间的关联关系,例如一个学院院长管理多个专业的情况。
在 Sequelize 中,一对多关联的实现方式与一对一关联类似,只需要在目标模型上使用 hasMany() 方法,另一个模型使用 belongsTo() 方法即可。
-- -------------------- ---- ------- -- ---------- ----- --------- - --------------------- ----- --------- - ----------------------- ----- ------- - --------------------------- - --- - ----- ------------------ -------------- ----- ----------- ----- ---------- ----- -- ----- - ----- ----------------- ---------- ----- - -- - ---------------- ----- ----- - --------- ---------- ------- ---------- - --- -------------- - -------- -- -------- ----- --------- - --------------------- ----- --------- - ----------------------- ----- ------- - --------------------- ----- ----- - ------------------------- - --- - ----- ------------------ -------------- ----- ----------- ----- ---------- ----- -- ----- - ----- ----------------- ---------- ----- - -- - ---------------- ----- ----- - --------- -------- ------- -------- - --- ------------------------ - ----------- ------------ ---------- ---- --- ---------------------- - ----------- ------------ ---------- ---- --- -------------- - ------
在上面的示例代码中,我们定义了两个模型:College 和 Major。其中,Major 模型相对于 College 模型是一个一对多关联表,它与 College 模型之间建立了一对多的关联关系。需要注意的是,在 Major 模型中使用 belongsTo() 方法指定关联的目标模型,并通过 foreignKey 和 targetKey 指定关联的外键和目标键。
多对多关联
多对多关联适用于两个实体之间的关联关系不是单向的,而是相互关联的情况,例如学生和课程之间的关联。在这种情况下,我们不仅要建立关联表,还要指定两个实体之间建立关联的键。
在 Sequelize 中,多对多关联的实现方式非常简单,只需要在两个模型之间分别使用 belongsToMany() 方法定义关联即可。
-- -------------------- ---- ------- -- ---------- ----- --------- - --------------------- ----- --------- - ----------------------- ----- ------- - --------------------------- - --- - ----- ------------------ -------------- ----- ----------- ----- ---------- ----- -- ----- - ----- ----------------- ---------- ----- - -- - ---------------- ----- ----- - --------- ---------- ------- ---------- - --- -------------- - -------- -- --------- ----- --------- - --------------------- ----- --------- - ----------------------- ----- ------- - --------------------- ----- ------ - -------------------------- - --- - ----- ------------------ -------------- ----- ----------- ----- ---------- ----- -- ----- - ----- ----------------- ---------- ----- - -- - ---------------- ----- ----- - --------- --------- ------- --------- - --- ----------------------------- - -------- ---------------- ----------- ----------- --------- ----------- --- ----------------------------- - -------- ---------------- ----------- ------------ --------- ---------- --- -------------- - -------
在上面的示例代码中,我们定义了两个模型:Student 和 Course。其中,Student 模型和 Course 模型之间相互关联,是一个多对多关联表。需要注意的是,在关联映射时需要指定通过哪个中间关系表进行映射,以及定义关联的外键和目标键。
数据查询和更新操作
在 Sequelize 中,我们可以使用模型对象来进行数据查询和更新操作。以下是一些常用的操作:
查找一条数据
-- -------------------- ---- ------- ----- ---- - ------------------ -------------- ------ - ----- ---- - -- ------------ -- - ---------------------- ------ ---- ---- -- -------------- -- - --------------------- -- ---- ----- ----------- ---
查找多条数据
-- -------------------- ---- ------- ----- ---- - ------------------ -------------- ------------- -- - -------------------- -- - ---------------------- ------ ---- ---- --- -- -------------- -- - --------------------- -- ---- ------ ----------- ---
删除一条数据
-- -------------------- ---- ------- ----- ---- - ------------------ -------------- ------ - --- - - -- -------- -- - ----------------- ------- ---------------- -- -------------- -- - --------------------- -- ------ ----- ----------- ---
更新一条数据
-- -------------------- ---- ------- ----- ---- - ------------------ ------------- ---- -- -- - ------ - ----- ---- - -- -------- -- - ----------------- ------- ---------------- -- -------------- -- - --------------------- -- ------ ----- ----------- ---
总结
本文介绍了 Sequelize 的相关内容,包括初始化 Sequelize、定义模型、实现关联关系以及数据查询和更新操作等方面。Sequelize 是一款功能强大且易于使用的 ORM 框架,可以极大地简化开发者的编码工作,并提供了丰富的 API 和操作方法,适合用于开发中大型、高并发的 Web 应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648f9e5c48841e9894dcd077