Sequelize 中的 Model 定义和使用技巧

在 Node.js 的 Web 开发中,使用 ORM(Object-Relational Mapping)框架可以方便地操作数据库。Sequelize 是 Node.js 中最流行的 ORM 框架之一,它支持多种数据库类型(如 MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server),可以轻松地进行数据库操作。

本文将介绍 Sequelize 中的 Model 定义和使用技巧,帮助读者更好地理解 Sequelize 的基本概念和使用方法。

Model 定义

在 Sequelize 中,Model 是对数据库表的抽象。每个 Model 都对应着数据库中的一张表,通过 Model 可以对表进行增删改查等操作。

定义 Model

定义 Model 的方式非常简单,只需要通过 Sequelize 实例的 define 方法即可。下面是一个简单的例子:

const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'
});

const User = sequelize.define('User', {
  firstName: {
    type: Sequelize.STRING,
    allowNull: false
  },
  lastName: {
    type: Sequelize.STRING
  },
  age: {
    type: Sequelize.INTEGER,
    defaultValue: 0
  }
});

上面的代码中,我们定义了一个名为 User 的 Model,它对应着数据库中的一张名为 users 的表。User Model 中定义了三个字段:firstName、lastName 和 age,它们分别对应着数据库表中的三个列。

字段类型

在 Model 中定义字段时,需要指定字段的类型。Sequelize 支持多种数据类型,如下表所示:

数据类型 描述
STRING 可变长度的字符串
CHAR 固定长度的字符串
TEXT 可变长度的长文本
INTEGER 整数
BIGINT 长整数
FLOAT 浮点数
DOUBLE 双精度浮点数
DECIMAL 十进制数
BOOLEAN 布尔值
DATE 日期
DATEONLY 仅日期,不包含时间
TIME 时间
UUID UUID
ENUM 枚举
JSON JSON 数据
JSONB 带有二进制数据的 JSON 数据
BLOB 二进制数据

字段选项

在定义 Model 字段时,可以设置多种选项,如下表所示:

选项 描述
type 字段类型
allowNull 是否允许为空
primaryKey 是否为主键
autoIncrement 是否自动递增
unique 是否唯一
defaultValue 默认值
validate 验证器

关联关系

在 Sequelize 中,Model 之间可以建立关联关系。关联关系分为一对一、一对多和多对多三种。

下面是一个简单的例子,展示了如何在两个 Model 之间建立一对多的关系:

const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'
});

const User = sequelize.define('User', {
  firstName: {
    type: Sequelize.STRING,
    allowNull: false
  },
  lastName: {
    type: Sequelize.STRING
  },
  age: {
    type: Sequelize.INTEGER,
    defaultValue: 0
  }
});

const Post = sequelize.define('Post', {
  title: {
    type: Sequelize.STRING,
    allowNull: false
  },
  content: {
    type: Sequelize.TEXT
  }
});

User.hasMany(Post, { as: 'posts' });
Post.belongsTo(User, { as: 'author' });

上面的代码中,我们定义了两个 Model:User 和 Post。User Model 表示用户,Post Model 表示文章。我们通过 User.hasMany(Post) 和 Post.belongsTo(User) 建立了一对多的关系,即一个用户可以拥有多篇文章,一篇文章只能有一个作者。

Model 使用

定义好 Model 之后,我们就可以使用它进行数据库操作了。下面是一些常用的 Model 方法:

创建数据

const user = await User.create({
  firstName: 'John',
  lastName: 'Doe',
  age: 30
});

上面的代码中,我们使用 User.create 方法创建了一个名为 John Doe、年龄为 30 的用户。

查询数据

const users = await User.findAll();

上面的代码中,我们使用 User.findAll 方法查询了所有用户。

const user = await User.findOne({ where: { firstName: 'John' } });

上面的代码中,我们使用 User.findOne 方法查询了名为 John 的用户。

更新数据

await user.update({ age: 31 });

上面的代码中,我们使用 user.update 方法将用户的年龄从 30 更新为 31。

删除数据

await user.destroy();

上面的代码中,我们使用 user.destroy 方法删除了用户。

总结

本文介绍了 Sequelize 中的 Model 定义和使用技巧,包括 Model 的定义、字段类型、字段选项、关联关系以及常用的 Model 方法。希望本文可以帮助读者更好地理解 Sequelize 的基本概念和使用方法,从而更加高效地进行 Web 开发。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65be82fdadd4f0e0ff80a8ac