Node.js ORM_Sequelize學習
阿新 • • 發佈:2018-12-29
Node.js ORM_Sequelize 學習記錄1
說明
只是單純的記錄學習過程
##Sequelize
是一個基於 promise 的 Node.js ORM, 目前支援 Postgres, MySQL, SQLite 和 Microsoft SQL Server. 它具有強大的事務支援, 關聯關係, 讀取和複製等功能
官方中文文件
環境說明
本次學習使用的:
mysql5.6
Node.js 8.9.3
npm 5.5.1
安裝sequelize模組及MySQL2
$ npm init
$ npm install --save sequelize
$ npm install --save mysql2
建立連線
我們首先建立一個db.js
建立類的目的:更好的分層
db負責和資料庫互動
實體類負責和db互動
service負責呼叫實體類的方法來處理邏輯
./db.js
/*我們首先引入sequelize模組*/
const Sequelize = require('sequelize');
class Db {
sequelize(){
/* 引數 database username password */
let sequelize = new Sequelize('orm','root','123456',{
host: 'localhost', //資料庫地址
dialect: 'mysql', //指定資料庫
//operatorsAliases:false,
pool: {
max: 5, //連線池最大連線數量
min: 0, //連線池最小連線數量
idle: 1000 //如果一個執行緒 10 秒內沒有使用則釋放該執行緒
}
});
return sequelize
}
/*可以呼叫該方法測試是否能連線成功*/
connectionTest(){
this.sequelize()
.authenticate()
.then(()=>{
console.log('連線測試成功')
})
.catch((err)=>{
console.log('連接出錯啦')
});
}
}
module.exports = Db;
建立實體類user.js
./user.js
const Sequelize = require('sequelize');
const db = require('./db'); //我們首先引入之前寫好的db類
const dbs = new db; //例項化
const sequelize = dbs.sequelize(); //呼叫該連線方法
dbs.connectionTest(); //呼叫該連線測試方法
class User {
Users(){
//首先我們來建立一張表模型 model
let User = sequelize.define('user',{
userName: {
type: Sequelize.STRING,
field: 'user_name'
},
email: {
type: Sequelize.STRING
}
},{
/*
* 如果為true 則表名和model相同。即user
* 如果為false Mysql建立的表名稱會是複數users
* 如果指定的表名稱本來就是複數形式則不變*/
freezeTableName: false
});
return User
}
/* 接下來我們我建立一張 user 表
* 建立表方法
* User.sync() 會建立表並且返回一個promise物件
* 如果force = true 則會把存在表的先銷燬在建立表
* 預設情況下 forse = false*/
createTable(Users){
Users.sync({force: false}).then(()=>{
console.log(`建立表成功`)
});
}
/*新增使用者*/
async addUser(Users,userName,email){
return Users.create({
userName: userName,
email:email
})
}
/*第一個查詢*/
async findAll(Users){
let result = await Users.findAll();
return result
}
}
module.exports = User;
建立service 實現邏輯
./service.js
const User = require('./user'); //引入實體類User
let Users = new User(); //例項化
/*首先我們根據模型來建立一張表*/
let userModule = Users.Users();
Users.createTable(userModule); //呼叫該方法 就會發現會自動幫我建立一張表
連線測試成功
Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `user_name` VARCHAR(255), `email` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `users`
建立表成功
之後我們將該方法註釋 在測試其他兩個方法
./service.js
const User = require('./user'); //引入實體類User
let Users = new User(); //例項化
/*首先我們根據模型來建立一張表*/
let userModule = Users.Users();
//Users.createTable(userModule); //呼叫該方法 就會發現會自動幫我建立一張表
/*新增資料*/
async function addUser(name,email){
try {
let result = await Users.addUser(userModule,name,email);
console.log('新增資料成功')
}catch (err){
console.log(err)
}
}
addUser('test','[email protected]')
Executing (default): SELECT 1+1 AS result
連線測試成功
Executing (default): INSERT INTO `users` (`id`,`user_name`,`email`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'test','[email protected]','2018-12-18 06:12:12','2018-12-18 06:12:12');
新增資料成功
成功啦
同理我們來試一下查詢的方法
./service.js
const User = require('./user'); //引入實體類User
let Users = new User(); //例項化
/*首先我們根據模型來建立一張表*/
let userModule = Users.Users();
//Users.createTable(userModule); //呼叫該方法 就會發現會自動幫我建立一張表
/*新增資料*/
async function addUser(name,email){
try {
let result = await Users.addUser(userModule,name,email);
console.log('新增資料成功')
}catch (err){
console.log(err)
}
}
//addUser('test','[email protected]')
/*第一個查詢*/
async function findAll(){
try {
let result = await Users.findAll(userModule);
console.log(result[0].dataValues);
}catch (err){
console.log(err)
}
}
findAll()
連線測試成功
Executing (default): SELECT `id`, `user_name` AS `userName`, `email`, `createdAt`, `updatedAt` FROM `users` AS `user`;
{ id: 1,
userName: 'test',
email: '[email protected]',
createdAt: 2018-12-18T06:12:12.000Z,
updatedAt: 2018-12-18T06:12:12.000Z }
成功啦 ~~~~