likes
comments
collection
share

第十一章:Node.js 实战入门指南 - 用数据库Sequelize ORM框架来实现CRUD

作者站长头像
站长
· 阅读数 28

本来计划想把mysql都讲完再来讲这个章节的内容,仔细考虑还是要有边界,mysql的内容后面开专题来讲,我们这个系列还是要在node的边界的计划中来,所以mysql的内容暂时先停一下上个章节只要安装成功了,就可以继续这一章的学习

引言: Sequelize是一个强大的Node.js ORM(对象关系映射)库,它提供了与多种关系型数据库的交互能力,其中包括MySQL。本文将带你从安装开始,逐步掌握Sequelize的使用技巧和API,并展示在MySQL操作中常用的能力。

安装和设置

首先,确保你的项目中已经安装了Node.js和npm。然后,通过以下命令安装Sequelize:

npm install sequelize

同时,你还需要安装适用于MySQL数据库的Sequelize驱动程序:

npm install mysql2

安装完成后,你可以通过引入Sequelize模块来开始使用它。

建立数据库连接

使用Sequelize建立与MySQL数据库的连接非常简单。首先,导入Sequelize模块并创建一个Sequelize实例,如下所示:

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

在上述代码中,你需要替换databaseusernamepassword为你自己的数据库信息。还可以根据需要配置主机名和使用的数据库方言。

定义模型

在Sequelize中,模型用于表示数据库中的表。通过定义模型,你可以轻松地进行数据操作。以下是一个简单的模型定义示例:

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

上述代码定义了一个名为User的模型,它有firstNamelastNameage三个字段。你可以根据需要定义其他字段的类型和约束。

数据库操作

接下来,让我们了解一些常见的数据库操作方法。

1. 创建数据

要创建一条新数据,你可以使用模型的create方法。以下是一个示例:

User.create({
  firstName: '张',
  lastName: '三',
  age: 25
})
.then(user => {
  console.log('Created user:', user);
})
.catch(err => {
  console.error('Error creating user:', err);
});

通过调用create方法并传入一个包含属性值的对象,你可以在数据库中创建一条新的用户数据。

2 查询数据

Sequelize提供了多种方法来查询数据库中的数据。以下是一些常见的查询示例:

查询所有数据

要查询表中的所有数据,可以使用模型的findAll方法。示例:

User.findAll()
.then(users => {
  console.log('All users:', users);
})
.catch(err => {
  console.error('Error retrieving users:', err);
});

通过调用findAll方法,你可以检索表中的所有用户数据。

根据条件查询

你可以使用findAll方法的where选项来根据条件进行查询。示例:

User.findAll({
  where: {
    age: {
      [Sequelize.Op.gt]: 18
    }
  }
})
.then(users => {
  console.log('Users over 18:', users);
})
.catch(err => {
  console.error('Error retrieving users:', err);
});

上述代码将返回年龄大于18的所有用户。

3. 更新数据

要更新数据库中的数据,可以使用模型的update方法。示例:

User.update({ age: 30 }, {
  where: {
    firstName: '张'
  }
})
.then(updatedRows => {
  console.log('Updated rows:', updatedRows);
})
.catch(err => {
  console.error('Error updating user:', err);
});

上述代码将把名为"张"的用户的年龄更新为30。

4. 删除数据

要删除数据库中的数据,可以使用模型的destroy方法。示例:

User.destroy({
  where: {
    lastName: 'Doe'
  }
})
.then(deletedRows => {
  console.log('Deleted rows:', deletedRows);
})
.catch(err => {
  console.error('Error deleting user:', err);
});

高级功能

除了基本的数据库操作外,Sequelize还提供了许多高级功能。

当涉及到数据关联、查询过滤和排序、事务管理以及数据验证时,Sequelize提供了丰富的功能和API。以下是每个方面的代码示例:

1. 数据关联

Sequelize允许你在模型之间建立关联关系,例如一对一、一对多和多对多关系。通过定义关联,你可以轻松地在不同的模型之间进行数据查询和关联操作。

// 假设有两个模型:User 和 Post
const User = sequelize.define('user', {
  // 用户模型的属性定义
});

const Post = sequelize.define('post', {
  // 帖子模型的属性定义
});

// 一对一关联示例
User.hasOne(Post);
Post.belongsTo(User);

// 一对多关联示例
User.hasMany(Post);
Post.belongsTo(User);

// 多对多关联示例
User.belongsToMany(Post, { through: 'UserPost' });
Post.belongsToMany(User, { through: 'UserPost' });

2 查询过滤和排序

Sequelize提供了强大的查询过滤和排序功能,使你能够根据条件对查询结果进行过滤和排序,以获取符合特定要求的数据。

// 查询过滤示例
User.findAll({
  where: {
    age: { [Sequelize.Op.gt]: 18 }, // 年龄大于18
    lastName: { [Sequelize.Op.like]: '张%' } // lastName以'张'开头
  }
});

// 查询排序示例
User.findAll({
  order: [['lastName', 'DESC']], // 按lastName降序排序
});

3 事务管理

Sequelize支持事务管理,可以确保一系列数据库操作要么全部成功,要么全部回滚,以保持数据的一致性。

// 事务管理示例
try {
  await sequelize.transaction(async (t) => {
    // 在事务中执行一系列的数据库操作
    await User.create({ firstName: 'John', lastName: 'Doe' }, { transaction: t });
    await Post.create({ title: 'Hello', content: 'World' }, { transaction: t });

    // 提交事务
    await t.commit();
  });
} catch (error) {
  // 处理事务失败的情况
  console.error('Transaction error:', error);
}

4 数据验证

Sequelize允许你定义模型属性的验证规则,以确保数据的完整性和有效性。你可以定义必填字段、数据类型、长度限制等规则。

// 模型属性的验证规则示例
const User = sequelize.define('user', {
  email: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true,
    validate: {
      isEmail: true // 必须为有效的邮箱地址
    }
  },
  password: {
    type: Sequelize.STRING,
    allowNull: false,
    validate: {
      len: [8, 20] // 密码长度必须在8到20之间
    }
  }
});

以上示例提供了Sequelize中数据关联、查询过滤和排序、事务管理以及数据验证的基本用法。根据你的具体需求,你可以进一步探索Sequelize的官方文档和API参考,以获得更多高级用法和功能的详细信息。

总结

本文提供了从Sequelize的安装到基本使用技巧和常用API的介绍。通过掌握这些内容,你可以开始在Node.js应用程序中轻松地使用Sequelize与MySQL数据库进行

转载自:https://juejin.cn/post/7249923343259353144
评论
请登录