一、什麼是ORM映射
ORM(Object-Relational Mapping,即對象關係映射)將關係數據庫的表結構映射到對象上,通過操作對象來操作數據庫,避免了直接對數據庫進行操作造成的複雜度,提高了程序的可維護性和可讀性。
二、為什麼要使用Sequelize框架
Sequelize是一個基於Node.js的ORM框架,支持MySQL、MariaDB、PostgreSQL、SQLite和Microsoft SQL Server等多種關係型數據庫,並且還支持事務、關聯查詢、預加載等高級查詢功能。
具體來說,使用Sequelize框架可以:
1、提高開發效率:使用ORM可以減少代碼量、提高開發效率;
2、提高可維護性:ORM相對於直接操作數據庫,代碼可讀性與可維護性更高;
3、降低出錯率:ORM自帶的SQL注入檢測和防範等機制可以降低出錯率;
4、支持多數據庫:Sequelize支持多種數據庫,使用起來更靈活方便。
三、如何使用Sequelize框架實現ORM映射
1. 安裝Sequelize
首先需要安裝Sequelize:
npm install --save sequelize
2. 連接數據庫
使用Sequelize連接數據庫需要先定義一個sequelize實例:
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'
});
其中,第一個參數是數據庫名,第二個參數是數據庫用戶名,第三個參數是數據庫密碼,第四個參數是數據庫服務器的地址。
最後一個參數是數據庫使用的方言,Sequelize支持MySQL、MariaDB、PostgreSQL、SQLite和Microsoft SQL Server等多種關係型數據庫。如果使用MySQL,那麼使用mysql作為方言;
3. 定義模型
接下來需要定義模型,模型相當於是實體,Sequelize可以將模型和數據庫中的表進行映射,操作模型就相當於對數據庫進行操作。
定義一個User模型,對應數據庫中的users表:
const { DataTypes } = require('sequelize');
const User = sequelize.define('User', {
// 在此定義模型屬性
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
username: {
type: DataTypes.STRING,
allowNull: false
},
password: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING(100),
allowNull: false,
unique: true
}
}, {
// 模型選項
});
其中,sequelize.define()方法用於定義模型,第一個參數是模型名,第二個參數是模型屬性,對應到數據庫中的字段。
在定義模型屬性時,需要指定數據類型,允許為空、是否是主鍵、是否自增等選項。
4. 同步模型到數據庫
定義完模型之後,需要將模型同步到數據庫,創建對應的表:
async function syncTable() {
try {
await sequelize.authenticate();
await User.sync({ force: true });
console.log('The table for the User model was just (re)created!');
} catch (error) {
console.error('Unable to connect to the database:', error);
}
}
syncTable();
sequelize.authenticate()用於測試數據庫連接是否成功,User.sync()用於同步模型到數據庫中創建表。force:true選項用於每次同步都重新創建表,如果不需要每次都重新創建則可以省略該選項,但需要注意不要對錶結構進行更新。
5. 對數據庫進行操作
使用Sequelize框架進行數據庫操作時,可以直接操作模型進行CRUD操作。
5.1 新增數據
async function addUser() {
try {
const user = await User.create({
username: 'admin',
password: '123456',
email: 'admin@example.com'
});
console.log(user.toJSON());
} catch (error) {
console.error(error);
}
}
addUser();
新增數據使用模型的create()方法,傳入要新增的數據。
5.2 查詢數據
查詢數據使用模型的findAll()方法:
async function getUsers() {
try {
const users = await User.findAll();
console.log(users.map(u => u.toJSON()));
} catch (error) {
console.error(error);
}
}
getUsers();
findAll()方法可以接受一些查詢條件,如where、order等。
5.3 更新數據
更新數據使用模型的update()方法:
async function updateUser() {
try {
const user = await User.findOne({ where: { email: 'admin@example.com' } });
user.username = 'administrator';
await user.save();
console.log(user.toJSON());
} catch (error) {
console.error(error);
}
}
updateUser();
需要先查詢到要更新的數據,然後修改數據屬性,並使用save()方法保存修改。
5.4 刪除數據
刪除數據使用模型的destroy()方法:
async function deleteUser() {
try {
const user = await User.findOne({ where: { email: 'admin@example.com' } });
await user.destroy();
} catch (error) {
console.error(error);
}
}
deleteUser();
使用findOne()方法查詢到要刪除的數據,然後使用destroy()方法將數據刪除。
四、總結
使用Sequelize框架可以方便地進行ORM映射操作,使開發效率更高,代碼可維護性更好,出錯率更低。Sequelize支持多種數據庫,並且提供了高級查詢功能,能滿足大部分需求。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/288520.html