🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》
Sequelize 是一个基于 Node.js 的强大的 ORM(Object-Relational Mapping,对象关系映射)框架,支持 PostgreSQL、MySQL、SQLite 和 MSSQL 等多种数据库。
一、主要特点
- 支持多种数据库:提供了统一的 API,方便在不同数据库之间切换。
- 模型定义:可以通过定义模型来描述数据库表结构。
- 关联关系:支持一对一、一对多、多对多等关联关系的定义和管理。
- 事务支持:提供完整的事务支持,确保数据的一致性和完整性。
- 迁移功能:支持数据库迁移,方便在不同环境之间同步数据库结构。
- 查询构建器:提供了强大的查询构建器,可以方便地构建复杂的查询。
二、基本用法
安装
npm install sequelize sequelize-cli mysql2
初始化
npx sequelize-cli init
定义模型
// models/user.js
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
username: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true
}
});
return User;
};
同步模型
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'
});
const User = require('./models/user')(sequelize, Sequelize.DataTypes);
(async () => {
await sequelize.sync({ force: true });
console.log('Database & tables created!');
})();
查询数据
(async () => {
const users = await User.findAll();
console.log(users);
})();
三、关联关系示例
假设有 User
和 Post
两个模型,一个用户可以有多篇文章。
定义模型
// models/user.js
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
username: DataTypes.STRING
});
User.associate = function(models) {
User.hasMany(models.Post);
};
return User;
};
// models/post.js
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define('Post', {
title: DataTypes.STRING,
content: DataTypes.TEXT
});
Post.associate = function(models) {
Post.belongsTo(models.User);
};
return Post;
};
查询关联数据
(async () => {
const user = await User.findOne({
where: { username: 'john' },
include: [Post]
});
console.log(user.posts);
})();
四、总结
Sequelize 是一个功能强大的 ORM 框架,通过使用 Sequelize,开发者可以更加方便地进行数据库操作,提高开发效率。同时,Sequelize 提供了丰富的功能和灵活的配置选项,可以满足不同项目的需求。