Sequelize就是Node上的ORM框架 ,相當於java端的Hibernate
是一個基於 promise 的 Node.js ORM, 目前支援 Postgres, MySQL, SQLite 和 Microsoft SQL Server. 它具有強大的事務支援, 關聯關係, 讀取和複製等功能.
首先看一下在node上面使用原生mysql
npm install mysql –save
進入資料庫 create database greet
建立資料庫
/config/defaut
let config = {
port: 3000,
database: {
host: `127.0.0.1`, //根據當前環境填寫
port: 3306,
user: `root`,
password: `000000`,
database: `greet`
}
}
module.exports = config;
Schema/mysql.js
let mysql = require(`mysql`);
let config = require(`../config/defaut`); //這是配置資訊
let connection = mysql.createConnection({ //連結資料庫
host: config.database.host,
port: config.database.port,
user: config.database.user,
password: config.database.password,
database: config.database.database
})
connection.connect(err => { //判斷時候連結資料庫
if (err) {
console.log("mysql is fail" + err);
return;
}
console.log("mysql is success!"); //資料庫連結成功標誌
})
let select = "select * from users"; //檢視時候有user這個表
connection.query(select, (err, done) => {
if (done == undefined) { //建立之前進行判斷 建立使用者表
let createUser = `
create table if not exists users(
user_id INT NOT NULL AUTO_INCREMENT,
user_name VARCHAR(20) NOT NULL,
user_password VARCHAR(20) NOT NULL,
user_PhoneNumber VARCHAR(20) NOT NULL,
PRIMARY KEY(user_id)
)`
connection.query(createUser, (err, result) => { //建立資料庫表
if (err) {
console.error("create is err" + err);
return;
}
console.log(`create is success`, result); //建立成功就返回建立的表
})
} else {
console.log("表已經存在,query程式碼不再載入");
}
})
module.exports = connection;
let addusers = `insert into users (user_id,user_name,user_password,user_PhoneNumber) values (?,?,?,?)`;
let addusersSql = [, `張三`, `000000`, `11111111111`];
connection.query(addusers, addusersSql, (err, done) => {
if (err) {
console.log("[insert into is error]" + err.message);
return;
}
console.log("-------------------------insert-----------------------------");
console.log("Id to", done.insertId);
})
因為是原生的sql語句操作,顯得很麻煩,Sequelize 就出現了
在資料庫的表中,每一行都可以用一個JavaScript物件表示,這就是ORM(Object-Realtional Mapping)技術,把關聯式資料庫的表結構對映到物件上
npm install sequelize –save
npm install mysql2 –save
因為 Sequelize 不能建立資料庫,所以需要手動建立一個資料庫:
create database greet
Schema/mysql.js
let config = require(`../config/defaut`); //資料庫配置
let Sequelize = require(`sequelize`);
// new Sequelize(database, [username=null], [password=null], [options={}])
// class Sequelize 接收 4 個引數,後三個引數是可選的
let sequelize = new Sequelize(config.database.database, config.database.user, config.database.password,{
host: config.database.host,
dialect: `mysql`,
pool: {
max: 3, //連線池最大連結數量
min: 1, //連線池最小連結數量
idle: 10000 //執行緒10秒內沒有被操作就會釋放執行緒
}
})
sequelize.authenticate() //連線測試
.then(()=> {
console.log("mysql is Success");
})
.catch (err=> {
console.log(err);
})
module.exports = sequelize;
下面我們建立表
let mysql = require(`./mysql`); //Sequelize 的資料庫配置
let Sequelize = require(`sequelize`);
let Users = mysql.define(`user`, {
user_name: { //建立表欄位
type: Sequelize.STRING(100), //Sequelize.String型別 引數不清楚什麼 貌似是欄位長度 不寫也行
//type: Sequelize.STRING,
field: `user_name` // 指定儲存在表中的鍵名稱
// 沒有指定 field,表中鍵名稱則與物件鍵名相同,為 user_name
},
user_password: {
type: Sequelize.STRING(50)
},
user_PhoneNumber: {
type: Sequelize.STRING(50)
}
}, {
// 如果為 true 則表的名稱和 model 相同,即 user
// 為 false MySQL 建立的表名稱會是複數 users
// 如果指定的表名稱本就是複數形式則不變
freezeTableName: false
});
// 建立表
// User.sync() 會建立表並且返回一個 Promise 物件
// 如果 force = true 則會把存在的表(如果 users 表已存在)先銷燬再建立表
// 預設情況下 force = false
Users.sync({
force: false
}).then(() => {
console.log("[Users is success]");
})
//新增使用者
Users.create({
user_name: "張三",
user_password: "000000",
user_PhoneNumber: "138138138138"
})
//檢視使用者
let lookUser = async () => {
//return await Users.findAll() //返回一個查詢的promise物件
await Users.findAll().then(res => {
console.log(JSON.parse(JSON.stringify(res))) //檢視資料庫裡面的全部欄位
})
}
module.exports = {
addUSers,
userlogin,
lookUser
}
在專案裡面的具體引用請看我的github