NodeJS?Express使用ORM模型訪問關系型數據庫流程詳解
一、ORM模型
設計思想,主要目的是簡化計算機程序訪問數據庫
1、ORM:對象關系模型(對象關系映射) Object Releastion Model,將程序中的對象和數據庫中關系(表格)進行映射??梢允归_發(fā)者在程序中方便的對數據庫進行操作(用戶在程序操作對對象實際就是操作數據庫的表格)
2、ORM的映射關系:
(1)程序中的模型(即為類) <——>表名
(2)模型的類型(類中定義的屬性)<——> 表的列
(3)由模型創(chuàng)建的對象(類的實例) <——> 表中的行
二、在Node中ORM的實現
1、Sequelize模塊:支持ORM映射的模塊,可以訪問關系型數據庫,可以提高node程序訪問數據庫的開發(fā)效率。
2、Sequelize模塊的使用:
(1)安裝MySQL模塊:npm install mysql2
(2)安裝Sequelize模塊:npm install sequelize
3、Sequelize模塊的使用
(1)創(chuàng)建數據庫的配置文件
導入
創(chuàng)建數據庫的配置對象
//1.導入Sequelize模塊
const Sequelize = require('sequelize');
//2.使用Sequelize模塊配置和數據庫的連接信息
const mysql_Sequelize = new Sequelize('sales','root','syy2589',{
host:'localhost', //數據庫服務器的IP地址或域名
port:'3306', //數據庫使用的端口號,MySQL數據庫默認端口號3306
dialect: 'mysql', //數據庫的類型
pool:{ //數據庫連接池:可以放若干個數據庫的連接對象,提高數據庫訪問效率
max:20, //數據庫連接池中連接對象的最大個數
min:3, //數據庫連接池中連接對象的最少個數
idle:20000 //等待延遲的時間,單位:毫秒
},
define:{
'charset':'utf8' //處理MySQL中中文字符的問題
}
})
// 3.導出數據庫的連接對象
module.exports = mysql_Sequelize;注:new Sequelize(數據庫名,用戶名,密碼,(配置信息))
測試數據庫是否連接成功
const mysqltest = require('./mysqlconfig.js');
mysqltest.authenticate() //用來測試數據庫是否連接成功
.then(()=>{
console.log('數據庫連接成功~')
})
.catch((err)=>{
console.error(err);
})(2)創(chuàng)建模型:實現模型和數據表的映射
模型名 = sequelize.define('數據表名','模型的屬性',{其他配置})
模型名 <——> 數據表名
模型的屬性<——> 數據表列
const Sequelize = require(sequelize);
//1.導入數據庫的配置對象
const mysql_Sequelize = require('../config/mysqlconfig.js');
// 2.創(chuàng)建模型與數據庫中的表實現映射
const Employee = mysql_Sequelize.define('employee',{
'e_id':{
type:Sequelize.STRING,
// type:Sequelize.INTEGER, 表示id的數據類型為int型
autoIncrement:false, //表示id的值在表中是否自增
allowNull:false, //表示id對象的值不能為空
fields:'e_id',//實現模型的屬性名和表的列名之間的映射關系(對應關系)
},
'e_name':{
type:Sequelize.STRING,
autoIncrement:false,
allowNull:false,
fields: 'e_name',
},
'sex':{
type:Sequelize.STRING,
autoIncrement:false,
allowNull:false,
fields: 'sex',
},
'apartment':{
type:Sequelize.STRING,
autoIncrement:false,
allowNull:true,
fields: 'apartment',
},
'phone':{
type:Sequelize.STRING,
autoIncrement:false,
allowNull:true,
fields: 'phone',
},
'address':{
type:Sequelize.STRING,
autoIncrement:false,
allowNull:true,
fields: 'address',
},
},{
freezeTableName:true, //不使用Sequelize給模型自定義的表名(自定義表名的命名規(guī)則:模型名后加s)
timestamps:false //若為true,在獲取數據時會自動添加兩列數據(createTime、updateTime)
});
// 導出模型
module.exports = Employee;(3)創(chuàng)建接口文件:使用模型創(chuàng)建數據表
插入記錄
模型名.create({ }).then((result)=>{}):then表示插入操作完成后的處理,result參數中保存有數據庫返回的信息
// http://localhost:9000/employee/addemp
Emprouter.post('/addemp',(req,res)=>{
console.log(req.body);
Employee.create({
id:req.body.id,
name:req.body.name,
sex:req.body.sex,
apartment:req.body.apartment,
phone:req.body.phone,
address:req.body.address
}).then((result)=>{
if(result){
res.json({
code:1002
})
}
})
})(4)前端頁面:使用jQuery向服務器端發(fā)起ajax請求
表單序列化:表單名.serizlize(),作用是將表單中所有控件的值序列化成字符串


刪除記錄
模型名:destroy({
where:{
列名:值
}
}).then((result)=>{
刪除成功后的回調
}
更新記錄
模型名.update({修改的列},{where條件}.then((result)={
更新成功后的回調
}).catch((e)=>{
出現異常的回調
})
查詢記錄
模型名.findAll().then((result)=>{ //result:是一個數組,存放的是從數據庫中查詢的所有記錄
查詢成功后的回調
}).catch((e)=>{
執(zhí)行查詢出現異常的回調
}
Emprouter.get('/findemp',(req,res)=>{
if(req.url != './favicon.ico'){
Employee.findAll().then((result)=>{
res.send(JSON.stringify(result));
})
}
})模糊查詢:
在執(zhí)行帶條件查詢時,需要導入Sequelize模塊的Op子模塊,在Op子模塊中存放的是所有條件查詢的關鍵字。
const Op = require('sequelize').Op;Emprouter.post('/findlike',(req,res)=>{
// 獲取前端發(fā)送的部門
let apartment = req.body.apartment;
// 進行模糊查詢
Employee.findAll({
where:{
apartment:{
[Op.like]:apartment+'%'
}
}
}).then((result)=>{
res.json(result);
}).catch((e)=>{
console.log(e);
res.json('查詢失敗~')
})
})到此這篇關于NodeJS Express使用ORM模型訪問關系型數據庫流程詳解的文章就介紹到這了,更多相關NodeJS Express訪問關系型數據庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- node.js+express+mySQL+ejs+bootstrop實現網站登錄注冊功能
- node.js平臺下利用cookie實現記住密碼登陸(Express+Ejs+Mysql)
- 零基礎搭建Node.js、Express、Ejs、Mongodb服務器及應用開發(fā)入門
- express框架通過ejs模板渲染輸出頁面實例分析
- Express 框架中使用 EJS 模板引擎并結合 silly-datetime 庫進行日期格式化的實現方法
- nodejs中的express-jwt的使用解讀
- NodeJs Express框架操作MongoDB數據庫執(zhí)行方法講解
- NodeJs?Express路由使用流程解析
- NodeJs Express中間件使用流程解析
- express框架+bootstrap美化ejs模板實例分析
相關文章
從Node.js事件觸發(fā)器到Vue自定義事件的深入講解
這篇文章主要給大家介紹了關于從Node.js事件觸發(fā)器到Vue自定義事件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2020-06-06
express搭建的nodejs項目使用webpack進行壓縮打包
對于打包這個問題它并不是難點,但是對于我們這種初學者來說,根本就不知道應該怎么做,下面這篇文章主要給大家介紹了關于express搭建的nodejs項目使用webpack進行壓縮打包的相關資料,需要的朋友可以參考下2022-12-12
Node.js基礎入門之path模塊,url模塊,http模塊使用詳解
這篇文章主要為大家介紹了Node.js中的三個模塊(path、url、http)的使用詳解,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2022-03-03
Node.js多文件Stream合并,串行和并發(fā)兩種模式的實現方式
這篇文章主要介紹了Node.js多文件Stream合并,串行和并發(fā)兩種模式的實現方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10

