Sequelize 是 Node.js 中一个轻量级的 ORM(Object-Relational Mapping)库,它可以映射 Node.js 中的对象和关系型数据库中的表、行、列等对象,使得开发者可以用面向对象编程的方式来操作数据库。
本文将详细介绍 Sequelize 的使用方法和注意事项,以及指导读者如何在实际项目中使用该 ORM 库。本文假设读者已经有一定的 Node.js 编程基础,并对关系型数据库有一定的了解。
安装和配置
使用 Sequelize 前需要进行安装。在终端输入以下命令:
npm install sequelize
安装完成后,还需要安装相应的数据库驱动程序,Sequelize 目前支持以下几种数据库:
- MySQL
- PostgreSQL
- SQLite
- MSSQL
以 MySQL 为例,在终端输入以下命令:
npm install mysql2
安装完成后,就可以在代码中使用 Sequelize 了。在代码中引入 Sequelize:
const Sequelize = require('sequelize');
接着,创建一个 Sequelize 实例:
const sequelize = new Sequelize({ dialect: 'mysql', host: 'localhost', username: 'root', password: '123456', database: 'test' });
其中,dialect
是指定数据库类型,host
是指定数据库服务器的地址,username
和 password
是指定数据库服务器的登录凭证,database
是指定要连接的数据库名称。
模型定义
模型是 Sequelize 中最重要的概念之一,它可以代表数据库中的一个表或多个表的联合。在 Sequelize 中,我们通过定义模型来与数据库进行交互。下面是一个简单的模型定义示例:
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- --------- - --- ----------- -------- -------- ----- ------------ --------- ------- --------- --------- --------- ------ --- ----- ---- - ------------------------ - ---------- - ----- ----------------- ---------- ----- -- --------- - ----- ---------------- -- ------ - ----- ----------------- ---------- ------ ------- ---- - ---
在该示例代码中,我们使用 define
方法定义了一个名为 User
的模型,并定义了三个属性:firstName
、lastName
和 email
。
其中,DataTypes
是 Sequelize 中用于定义数据类型的对象,常见的数据类型包括 STRING
、INTEGER
、BOOLEAN
、DATE
等等。每个属性都需要指定一个数据类型。
除了数据类型以外,还可以定义以下属性:
allowNull
: 指定该属性是否可以为 null。默认值为true
。defaultValue
: 指定该属性的默认值。unique
: 指定该属性是否必须唯一。primaryKey
: 指定该属性是否为主键。autoIncrement
: 指定该属性是否自增。
数据库操作
定义好模型后,就可以通过模型进行数据库操作了。下面是一些常见的数据库操作示例。
创建实例
创建实例的方法有两种。
第一种是通过调用模型的 create
方法:
User.create({ firstName: 'John', lastName: 'Doe', email: 'john.doe@example.com' }).then(user => { console.log(user.toJSON()); });
第二种是通过实例的 save
方法:
-- -------------------- ---- ------- ----- ---- - ------------ ---------- ------- --------- ------ ------ ---------------------- --- --------------------- -- - --------------------------- ---
第一种方法比较简便,但是还需要额外的查询语句来获取新建实例的 ID。如果需要获取实例 ID,可以使用第二种方法。
查询实例
查询实例的方法有多种。
根据 ID 查询:
User.findByPk(1).then(user => { console.log(user.toJSON()); });
根据属性查询:
User.findOne({ where: { firstName: 'John' } }).then(user => { console.log(user.toJSON()); });
查询多个实例:
-- -------------------- ---- ------- -------------- ------ - --------- ----- - ------------- -- - ------------------ -- - --------------------------- --- ---
更新实例
更新实例:
-- -------------------- ---- ------- ------------- ---------- ------ ------ ----------------- -- - ------ - ---------- ------ - -------------- -- - -------------------- ---
删除实例
根据 ID 删除实例:
User.destroy({ where: { id: 1 } }).then(result => { console.log(result); });
根据属性删除实例:
User.destroy({ where: { lastName: 'Doe' } }).then(result => { console.log(result); });
关联模型
在实际开发中,数据库表之间经常会存在关联关系。在 Sequelize 中,我们可以使用 belongsTo
、hasOne
、hasMany
、belongsToMany
等方法来定义模型之间的关系。
下面是一个示例:
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- --------- - --- ----------- -------- -------- ----- ------------ --------- ------- --------- --------- --------- ------ --- ----- ---- - ------------------------ - ---------- - ----- ----------------- ---------- ----- -- --------- - ----- ---------------- -- ------ - ----- ----------------- ---------- ------ ------- ---- - --- ----- ---- - ------------------------ - ------ - ----- ----------------- ---------- ----- -- -------- - ----- ----------------- ---------- ----- - --- ------------------- --------------------- ----- ---- - ------------ ---------- ------- --------- ------ ------ ---------------------- --- ----- ---- - ------------ ------ ------ ----------- -------- ----- -- -- ----- --------- ------ --- --------------------- -- - ------------------- --------------------- -- - --------------------------- --- ---
在该示例代码中,我们定义了两个模型 User
和 Post
,并通过 hasMany
和 belongsTo
方法建立了关联关系。其中,hasMany
方法表示 User
模型拥有多个 Post
实例,而 belongsTo
方法表示 Post
模型属于一个 User
实例。
在创建实例时,我们可以通过 setUser
方法将 Post
实例关联到 User
实例上。
结语
到这里,我们已经初步了解了 Sequelize 的使用方法和注意事项,并通过示例代码演示了一些常见的数据库操作和模型关联。希望读者可以通过本文的介绍,掌握基本的 Sequelize 技能,进一步提升 Node.js 后端开发的能力。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67973a77504e4ea9bde498bb