第十一章:Node.js 实战入门指南 - 用数据库Sequelize ORM框架来实现CRUD
本来计划想把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'
});
在上述代码中,你需要替换database
、username
和password
为你自己的数据库信息。还可以根据需要配置主机名和使用的数据库方言。
定义模型
在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
的模型,它有firstName
、lastName
和age
三个字段。你可以根据需要定义其他字段的类型和约束。
数据库操作
接下来,让我们了解一些常见的数据库操作方法。
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