一、Sequelize.js 简介
Sequelize.js是一个基于Node.js的ORM模块,用于操作关系型数据库,支持MySQL、PostgreSQL、SQLite和MariaDB等多个数据库系统。Sequelize.js可以轻松实现数据库操作的同步与异步、数据迁移、查询构建、实体关系映射等多种功能,是Node.js开发中常用的数据库操作模块之一。
二、定义数据模型
在Sequelize.js中,定义数据模型是最重要的步骤之一。Sequelize.js使用定义好的数据模型,自动生成数据库表和相关字段的信息,并提供各种查询操作的接口。在Sequelize.js中,用一个Model对象表示一个数据表,通过定义Model对象的属性,可以关联数据表中的字段和数据类型,如下所示:
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- --------- - --- --------------------- ----------- ----------- - ----- ------------ -------- ------- --- ----- ---- - ------------------------ - --------- - ----- ----------------- ---------- ----- -- ------ - ----- ----------------- ---------- ----- -- --------- - ----- ----------------- ---------- ----- - ---
在上面的代码中,我们定义了一个名称为User的数据模型,包含了username、email和password三个字段,分别表示用户名、邮箱和密码。这三个字段的数据类型均为STRING,且不允许为空。在定义Model对象时,可以针对每个属性设置不同的数据类型、限制条件、默认值等属性,以满足各种需求。在定义好Model对象之后,可以使用.sync方法来同步数据模型和数据库表结构。
sequelize.sync({ force: false }).then(() => { console.log('数据模型同步成功'); }).catch(err => { console.error('数据模型同步失败:', err); });
当force为true时,Sequelize.js会强制重新创建表,即清空原表数据,再创建新的表结构。这个方法有时用来调试很有用,但是建议不要在生产环境中使用。
三、Sequelize.js 中常用的数据类型及其属性
Sequelize.js中定义数据模型时,可以使用不同的数据类型来表示字段的数据类型。下面列举一些常用的数据类型及其属性:
1、STRING:字符串类型
默认长度为255个字符,可以通过在第二个参数对象中添加len属性指定长度,例如:
const User = sequelize.define('User', { username: { type: DataTypes.STRING, allowNull: false, len: [3,20] // 长度为3-20个字符 } });
2、INTEGER:整数类型
可以通过属性autoIncrement指定该属性为自增长,例如:
const Article = sequelize.define('Article', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true } });
3、REAL:浮点数类型
可以通过属性decimal指定小数点位数和精度,例如:
-- -------------------- ---- ------- ----- ------- - --------------------------- - ------ - ----- --------------- ---------- ------ ------------- ---- -------- -- ---------- - - ---
4、BOOLEAN:布尔类型
表示一个布尔值,可以通过属性defaultValue指定默认值,例如:
const User = sequelize.define('User', { isAdmin: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false } });
5、DATE:日期类型
表示一个日期,可以通过属性defaultValue指定默认值,例如:
const Order = sequelize.define('Order', { orderTime: { type: DataTypes.DATE, allowNull: false, defaultValue: Sequelize.NOW } });
四、定义数据表间的关系
在Sequelize.js中,数据表之间的关系很重要,这决定了表之间的联接方式和数据的取出方式。Sequelize.js支持包括一对一、一对多、多对多等多种关系,开发者可以根据需要来选择使用不同的关系类型。
1、一对一关系
一对一关系通常用于两个表之间的关系映射。比如User表和Profile表,一个User对应一个Profile,一个Profile对应一个User。在Sequelize.js中,我们可以通过hasOne、belongsTo等方法来定义一对一关系,如下所示:
-- -------------------- ---- ------- ----- ---- - ------------------------ - --------- - ----- ----------------- ---------- ----- - --- ----- ------- - --------------------------- - ---------- - ----- ----------------- ---------- ----- -- --------- - ----- ----------------- ---------- ----- - --- --------------------- ------------------------
在上面的代码中,我们定义了User表和Profile表之间的一对一关系,通过User.hasOne(Profile)和Profile.belongsTo(User)方法创建关系。这样我们就可以通过User模型来查询与之关联的Profile模型,反之也是一样。
2、一对多关系
一对多关系通常用于两个表之间的父子关系映射。比如User表和Order表,一个User对应多个Order,一个Order对应一个User。在Sequelize.js中,我们可以通过hasMany、belongsTo等方法来定义一对多关系,如下所示:
-- -------------------- ---- ------- ----- ---- - ------------------------ - --------- - ----- ----------------- ---------- ----- - --- ----- ----- - ------------------------- - ------- - ----- --------------- ---------- ----- - --- -------------------- ----------------------
在上面的代码中,我们定义了User表和Order表之间的一对多关系,通过User.hasMany(Order)和Order.belongsTo(User)方法创建关系。这样我们就可以通过User模型来查询与之相关的所有Order模型,反之也是一样。
3、多对多关系
多对多关系通常用于两个表之间的关系,比如学生表和课程表,一个学生可以选多门课程,一门课程可以被多个学生选。在Sequelize.js中,我们可以通过belongsToMany方法来定义多对多关系,如下所示:
-- -------------------- ---- ------- ----- ------ - -------------------------- - ----- - ----- ----------------- ---------- ----- - --- ----- ------- - --------------------------- - ----- - ----- ----------------- ---------- ----- - --- ----------------------------- - -------- --------------- --- ----------------------------- - -------- --------------- ---
在上面的代码中,我们定义了Course表和Student表之间的多对多关系,通过belongsToMany方法创建关系,并指定关联表名CourseStudent。这样我们就可以通过Course模型来查询与之相关的所有Student模型,反之也是一样。
五、总结
Sequelize.js是一个功能强大的ORM模块,可以帮助开发者轻松地操作关系型数据库,实现数据增删改查等多种功能。定义数据模型和数据表之间的关系是Sequelize.js中最重要的两个步骤,开发者需要熟悉不同的数据类型和关联方式,以便更好地应对各种需求。希望这篇文章能对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6487cf6248841e989465b81d