前言
在前后端分离的项目中,ORM 工具的使用变得越来越重要。Sequelize 是一个 Node.js ORM 工具,目前它是最受欢迎的 ORM 之一。但是它的使用文档还是有一定的门槛,并且在一些场景下,Sequelize 的调用方式可能让人头疼。这时,Sequelize 的扩展库 sequelize-next 就派上用场了!
本文旨在为大家介绍 sequelize-next 的基本使用,包括其 API 的使用方法,以及它在使用 Sequelize 中的应用。
安装
你可以通过 npm 安装 sequelize-next:
npm install sequelize-next
这会安装最新版本的 sequelize-next 依赖包到您的项目中。
基本用法
总体来说,sequelize-next 的 API 与 Sequelize 的原生 API 非常相似。但是,sequelize-next 着重于通过使用可组合的函数来保持代码简洁和高效。
const { Model, DataTypes } = require('sequelize-next'); const sequelize = new Sequelize('sqlite::memory:'); class User extends Model {} User.init({ username: DataTypes.STRING, birthday: DataTypes.DATE }, { sequelize, modelName: 'User' });
在上面的例子中,我们使用了 sequelize-next 的模型定义方法来创建一个名为 User 的模型(model)。与原生 Sequelize API 不同,我们没有使用 sequelize.define
方法来创建模型。这是因为 sequelize-next 的模型定义方法本质上是一个可组合的函数,它使用了类式的继承机制使得这些函数可以被链接在一起。
定义好模型之后,我们可以用通常的方式来查询数据:
const users = await User.findAll();
模型定义
sequelize-next 中定义模型的方法与 Sequelize 中的定义非常类似。例如,在 Sequelize 中我们可以这样定义一个名为 User 的模型:
const sequelize = new Sequelize('sqlite::memory:'); const User = sequelize.define('User', { username: Sequelize.STRING, birthday: Sequelize.DATE });
但是,我们随时可以使用 sequelize-next 提供的功能去扩展模型对象,例如添加静态方法或者实例方法,这对于我们实际使用模型时会非常方便。
-- -------------------- ---- ------- ----- ---- ------- ----- - ------ ----- ---------------- - ------ -------------- ------ - --------- ---- - --- - -
sequelize-next 允许我们在模型定义中使用类式继承,它使得我们可以轻松地添加静态方法和实例方法。在上面的例子中,我们添加了一个 findByName
方法,可以便捷地通过用户名来查找用户。
查询
sequelize-next 支持所有 Sequelize 支持的查询方式,包括 where 条件、排序和限制等。与 Sequelize 相比,sequelize-next 给我们的代码添加了更多的可组合性。
const users = await User.findAll({ attributes: ['id', 'username'], where: { username: 'john' }, limit: 10, order: [['createdAt', 'DESC']] });
更新
sequelize-next 允许我们使用 update 和 updateAll 方法来更新数据库的记录。与 Sequelize 的区别在于,sequelize-next 在每次运行时会创建一个新的查询,因此它返回的是一个 Promise 对象。
await User.updateAll( { password: 'new_password' }, { username: 'john' } );
删除
sequelize-next 中的删除操作与原生 Sequelize 没有太大的区别。我们只需要使用 delete 或者 deleteAll 方法来删除一条或多条记录。
await User.delete({ where: { id: 1 } }); // 删除 id 为 1 的用户 await User.deleteAll({ where: { age: { [Op.lt]: 18 } } }); // 删除年龄小于 18 岁的所有用户记录
关联查询
sequelize-next 中的关联查询方法与 Sequelize 中的类似。我们可以使用 belongsTo
、hasOne
、hasMany
这些方法来定义模型之间的关联关系,并在查询时使用 include
属性来定义 Join。
-- -------------------- ---- ------- ----- ------- ------- ----- -- -------------- ----- ----------------- ------------ -------------- -- - --------- --- ----- ---- ------- ----- -- ----------- ----- ----------------- ------------ -------------- -- - --------- --- ------------------------ ----------------------
在上面的例子中,我们在模型中定义了 Task 与 Project 的关系,Task 属于 Project,且 Project 下有多个 Task。然后,我们可以使用 include
属性来进行关联查询。
const task = await Task.findOne({ where: { id: 1 }, include: [{ model: Project }] });
在上面的例子中,我们查询了一个 id 为 1 的 Task,同时将它的 Project 对象包含在结果中返回。
总结
sequelize-next 是一个优秀的 Sequelize 扩展,它使用了可组合的函数来保持代码简洁和高效。与原生 Sequelize 相比,sequelize-next 给我们带来了更多的可组合性,使得我们可以更灵活地处理数据库操作。通过本文的学习,相信大家已经掌握了 sequelize-next 的基本使用方法,我们可以利用这个工具来构建高效的数据库应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056d1381e8991b448e6da4