前言:本文主要介绍如何在 Express 框架中使用 Sequelize ORM,以及一些 Sequelize 使用技巧,旨在帮助前端开发者更好地理解和使用 Sequelize ORM。
什么是 Sequelize?
Sequelize 是一个基于 Node.js 的 ORM(Object Relational Mapping)库,用于调用关系型数据库的 API。Sequelize 可以使用 ES6 的 Promise 和 async/await 语法使得代码易于理解和维护。同时,Sequelize 还提供了强大的 SQL 查询功能,这意味着你可以使用纯 SQL 或 Sequelize 查询语言来查询数据。
Sequelize 支持连接 MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server 等多种数据库。在此基础上,Sequelize 同时支持主从和读写分离、事务等高级特性,旨在为开发者提供更多选择,方便他们根据业务需求使用不同的数据库。
sequelize-cli
Sequelize 提供了官方的 sequelize-cli 命令行工具,通过使用 sequelize-cli 工具,我们可以快速方便地创建 Sequelize 项目的文件结构,包括 models、migrations、seeders 等。
首先,我们需要全局安装 sequelize-cli:
npm install -g sequelize-cli
接下来,在项目根目录下输入以下命令:
sequelize init
通过上述命令,Sequelize 会自动为我们在项目的根目录下创建一个名为 sequelize 的文件夹,其中包括了一些默认的文件和文件夹,包括:
- config:存放配置文件
- migrations:存放迁移脚本
- models:存放模型定义文件
- seeders:存放种子数据文件
创建 Sequelize 模型
Sequelize 模型用于定义和管理数据库中的表和对应的数据结构,我们可以使用 Sequelize 模型将表的定义转化为 JavaScript 对象,并对其进行添加、查询、更新和删除等操作。
以下是一个简单的 Sequelize 模型例子:
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- --------- - ---------------- -- --------- ----- ---- - ------------------------ - --------------- ----- - ----- ----------------- ---- ---------- ------ ------ -- ---- - ----- ------------------ ---- -- ------ - ----- ----------------- ---- ---------- ------ ------ ------- ----- ------ -- --------- - ----- ------------------ ------ ------------- ------ ---- ----- -- --- -------------- - -----
上面代码中,我们首先导入 sequelize 和 DataTypes 两个对象,然后通过 sequelize.define() 方法定义了一个 User 模型。
其中,sequelize.define() 的第一个参数为模型的名称,第二个参数为包含表的各个字段的对象。再具体解释一下包含的字段:
- name: 姓名,类型为字符串,并不能为空
- age: 年龄,类型为整数
- email: 邮箱,类型为字符串,并不能为空,必须唯一
- isActive: 是否激活,类型为布尔值,初始值为 false。
定义完模型后,我们需要通过 sync()方法将模型同步到数据库中:
-- -------------------- ---- ------- ----- ---- - ------------------ ----- --------- - --- ---------------------------------------------------------------- ------ -- -- - --- - -- --------- ------ ---- -- --------------------------------- --------------------------------------------------- -------- ------------ -- ----- ---------------- ------ ---- --- ------------------------ - ----- ------- - ----------------------- ------- - -----
上述代码中,我们通过 require() 方法引入了 User 模型,然后创建了 Sequelize 实例,并配置数据库连接信息。最后通过 async/await 语法调用 sequelize.sync() 方法将模型同步到数据库中,并在命令行中打印创建数据表成功的提示信息。
在 Express 中使用 Sequelize
在 Express 中使用 Sequelize 可以帮助我们快速方便地实现模型的增删改查等基本操作。下面我们介绍如何在 Express 中使用 Sequelize 实现增删改查功能。
首先安装 express 和 sequelize,使用 Sequelize ORM 需要同时安装 sequelize 和 sequelize-cli 第三方模块:
npm install express sequelize sequelize-cli --save
注意:当 sequelize 安装成功后,需要在 models 目录下创建一个 index.js 文件:
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------- - --- ---------------------------------------------------------------- ----- ---- - ------------------------------ ----- ------ - -------------------------------- -------------- - - ---------- ----- ------- --
在 index.js 文件中引入 sequelize,并同时引入 User 和 Course 模型,并且导出所有的模型。这样,在我们应用中可以通过 require('./models') 引入 sequelize 和初始化后的所有模型。
接下来,我们可以实现如下增删改查的 API
创建记录
-- -------------------- ---- ------- ---------------------- ----- ----- ---- -- - ----- ------ ------ ---- --------- - --------- --- - --- ---- - ----- -------------------- ----- ----- ------ ------ ---- ---- --------- -------- --- --------------------------- -- --- -------------- - ----- ----- - ------------------- ------------------------------ ----------------- - ---
在上述代码中,我们使用了 models.User.create() 方法会自动创建新的记录,并将其保存到数据库中。由于我们已经将模型导入到一个 models 对象中了,所有可以访问 User 模型,models.User.create() 方法接收 JSON 格式的数据。
获取记录
-- -------------------- ---- ------- --------------------- ----- ----- ---- -- - --- - ----- ----- - ----- ---------------------- ---------------------------- -- --- ----------- - ----- ----- - ------------------- ------------------------------ ------------------- - --- ------------------------- ----- ----- ---- -- - ----- ------ - -------------- --- - ----- ---- - ----- --------------------- ------ - --- ------ -- --- -- ----- --- ----- - -------------------------- -- --- ----------- - ---- - ---------------------- -------- --------- -- -- --- ------------ - - ----- ----- - ------------------- ------------------------------ ----------------- - ---
在上述代码中,我们首先使用了 models.User.findAll() 方法获取所有记录,并将它们以 JSON 格式返回。在 /api/users/:id 路由中,我们根据传递的 id 参数,使用 models.User.findOne() 方法来查找对应的记录,并返回。
创建记录
-- -------------------- ---- ------- ---------------------- ----- ----- ---- -- - ----- ------ ------ ---- --------- - --------- --- - --- ---- - ----- -------------------- ----- ----- ------ ------ ---- ---- --------- -------- --- --------------------------- -- --- -------------- - ----- ----- - ------------------- ------------------------------ ----------------- - ---
在上述代码中,我们使用了 models.User.create() 方法会自动创建新的记录,并将其保存到数据库中。由于我们已经将模型导入到一个 models 对象中了,所有可以访问 User 模型,models.User.create() 方法接收 JSON 格式的数据。
更新记录
-- -------------------- ---- ------- ------------------------- ----- ----- ---- -- - ----- ------ - -------------- ----- - ----- - ----- ------ ---- -------- - - - ---- --- - --- ---- - ----- ------------------- - ----- ----- ------ ------ ---- ---- --------- -------- -- - ------ - --- ------ - - -- --- ----------- - ----- ----------------------------- --------------------------------- -- --- ------------- - ----- ----- - ------------------- ------------------------------ ----------------- - ---
在上述代码中,我们使用了 models.User.update() 方法会更新一条已存在的记录,并通过 models.User.findByPk() 来获取已更新的记录,并以 JSON 格式返回。
删除记录
-- -------------------- ---- ------- ---------------------------- ----- ----- ---- -- - ----- ------ - -------------- --- - --- ---- - ----- --------------------- ------ ---- ------- --- -------- - ----------------------- ------ - - ----- ----- - ------------------- ------------------------------ ----------------- - ---
在上述代码中,我们使用了 models.User.destroy() 方法来删除记录,并返回状态码 status 204,代表删除成功。
Sequelize 中的高级查询
Sequelize ORM 对于关系型数据库的查询支持是非常强大的,并且 Sequelize 的查询 API 简单易用。
使用 where 对数据进行筛选
在 Sequelize 中,我们可以使用 where 参数来对数据进行筛选。下面是一个使用 where 参数的示例:
const user = await models.User.findOne({ where: { email: 'hello@world.com' } })
在上述代码中,我们使用了 models.User.findOne() 方法查找数据库中 email 属性为 'hello@world.com' 的第一条记录。
使用 order 对数据进行排序
在 Sequelize 中,我们可以使用 order 参数来进行数据排序。下面是一个使用 order 参数的示例:
const users = await models.User.findAll({ order: [['createdAt', 'DESC']], })
在上述代码中,我们使用了 models.User.findAll() 方法返回按照 createdTime 倒序排列的所有用户。
使用 limit 和 offset 实现数据分页
在 Sequelize 中,我们可以使用 limit 和 offset 参数实现数据分页。下面是一个使用 limit 和 offset 参数的示例:
const users = await models.User.findAll({ limit: 10, // 返回 10 条数据 offset: 10, // 从第 11 条开始返回(即跳过前 10 条数据) })
在上述代码中,我们使用了 models.User.findAll() 方法返回从 11 条数据开始的 10 条数据。
使用 include 实现数据连接查询
在 Sequelize 中,我们可以使用 include 参数实现数据连接查询。下面是一个使用 include 参数的示例:
const users = await models.User.findAll({ include: [{ model: models.Course, attributes: ['title'] }], })
在上述代码中,我们使用了 models.User.findAll() 方法返回所有用户,同时返回每个用户的所有课程的标题(title)。在这里,我们使用了 include 参数来实现数据连接查询。其中第一个参数是一个对象,包含了我们希望跨表查询的属性,第二个参数是用于限制要获取的属性。
使用 filter 实现复杂的数据筛选操作
在 Sequelize 中,我们可以使用 filter 功能实现复杂的数据筛选操作。下面是一个使用 filter 的示例:
-- -------------------- ---- ------- ----- - -- - - ---------- ----- ---- - ----- --------------------- ------ - --------- - - ---- - -------- -- - -- - ---- - -------- -- - -- -- -- ---
在上述代码中,我们使用 Op 对象实现复杂的数据筛选操作,并返回所有年龄在 20 到 30 岁之间的用户。
总结
本文介绍了如何在 Express 中使用 Sequelize ORM,并提供了一些 Sequelize 的高级查询技巧。Sequelize ORM 功能强大、易于使用,帮助开发者快速方便地创建和管理数据表,并帮助他们更好地理解和使用 Sequelize 框架。当你深入理解 Sequelize 框架后,相信你会在开发中大放异彩。最后,我们一起祝愿大家在使用 Sequelize 框架时获得成功。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/654e039e7d4982a6eb758b8a