NodeJS?Express使用ORM模型訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)流程詳解
一、ORM模型
設(shè)計(jì)思想,主要目的是簡(jiǎn)化計(jì)算機(jī)程序訪問(wèn)數(shù)據(jù)庫(kù)
1、ORM:對(duì)象關(guān)系模型(對(duì)象關(guān)系映射) Object Releastion Model,將程序中的對(duì)象和數(shù)據(jù)庫(kù)中關(guān)系(表格)進(jìn)行映射??梢允归_發(fā)者在程序中方便的對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作(用戶在程序操作對(duì)對(duì)象實(shí)際就是操作數(shù)據(jù)庫(kù)的表格)
2、ORM的映射關(guān)系:
(1)程序中的模型(即為類) <——>表名
(2)模型的類型(類中定義的屬性)<——> 表的列
(3)由模型創(chuàng)建的對(duì)象(類的實(shí)例) <——> 表中的行
二、在Node中ORM的實(shí)現(xiàn)
1、Sequelize模塊:支持ORM映射的模塊,可以訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù),可以提高node程序訪問(wèn)數(shù)據(jù)庫(kù)的開發(fā)效率。
2、Sequelize模塊的使用:
(1)安裝MySQL模塊:npm install mysql2
(2)安裝Sequelize模塊:npm install sequelize
3、Sequelize模塊的使用
(1)創(chuàng)建數(shù)據(jù)庫(kù)的配置文件
導(dǎo)入
創(chuàng)建數(shù)據(jù)庫(kù)的配置對(duì)象
//1.導(dǎo)入Sequelize模塊 const Sequelize = require('sequelize'); //2.使用Sequelize模塊配置和數(shù)據(jù)庫(kù)的連接信息 const mysql_Sequelize = new Sequelize('sales','root','syy2589',{ host:'localhost', //數(shù)據(jù)庫(kù)服務(wù)器的IP地址或域名 port:'3306', //數(shù)據(jù)庫(kù)使用的端口號(hào),MySQL數(shù)據(jù)庫(kù)默認(rèn)端口號(hào)3306 dialect: 'mysql', //數(shù)據(jù)庫(kù)的類型 pool:{ //數(shù)據(jù)庫(kù)連接池:可以放若干個(gè)數(shù)據(jù)庫(kù)的連接對(duì)象,提高數(shù)據(jù)庫(kù)訪問(wèn)效率 max:20, //數(shù)據(jù)庫(kù)連接池中連接對(duì)象的最大個(gè)數(shù) min:3, //數(shù)據(jù)庫(kù)連接池中連接對(duì)象的最少個(gè)數(shù) idle:20000 //等待延遲的時(shí)間,單位:毫秒 }, define:{ 'charset':'utf8' //處理MySQL中中文字符的問(wèn)題 } }) // 3.導(dǎo)出數(shù)據(jù)庫(kù)的連接對(duì)象 module.exports = mysql_Sequelize;
注:new Sequelize(數(shù)據(jù)庫(kù)名,用戶名,密碼,(配置信息))
測(cè)試數(shù)據(jù)庫(kù)是否連接成功
const mysqltest = require('./mysqlconfig.js'); mysqltest.authenticate() //用來(lái)測(cè)試數(shù)據(jù)庫(kù)是否連接成功 .then(()=>{ console.log('數(shù)據(jù)庫(kù)連接成功~') }) .catch((err)=>{ console.error(err); })
(2)創(chuàng)建模型:實(shí)現(xiàn)模型和數(shù)據(jù)表的映射
模型名 = sequelize.define('數(shù)據(jù)表名','模型的屬性',{其他配置})
模型名 <——> 數(shù)據(jù)表名
模型的屬性<——> 數(shù)據(jù)表列
const Sequelize = require(sequelize); //1.導(dǎo)入數(shù)據(jù)庫(kù)的配置對(duì)象 const mysql_Sequelize = require('../config/mysqlconfig.js'); // 2.創(chuàng)建模型與數(shù)據(jù)庫(kù)中的表實(shí)現(xiàn)映射 const Employee = mysql_Sequelize.define('employee',{ 'e_id':{ type:Sequelize.STRING, // type:Sequelize.INTEGER, 表示id的數(shù)據(jù)類型為int型 autoIncrement:false, //表示id的值在表中是否自增 allowNull:false, //表示id對(duì)象的值不能為空 fields:'e_id',//實(shí)現(xiàn)模型的屬性名和表的列名之間的映射關(guān)系(對(duì)應(yīng)關(guān)系) }, '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,在獲取數(shù)據(jù)時(shí)會(huì)自動(dòng)添加兩列數(shù)據(jù)(createTime、updateTime) }); // 導(dǎo)出模型 module.exports = Employee;
(3)創(chuàng)建接口文件:使用模型創(chuàng)建數(shù)據(jù)表
插入記錄
模型名.create({ }).then((result)=>{}):then表示插入操作完成后的處理,result參數(shù)中保存有數(shù)據(jù)庫(kù)返回的信息
// 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)前端頁(yè)面:使用jQuery向服務(wù)器端發(fā)起ajax請(qǐng)求
表單序列化:表單名.serizlize(),作用是將表單中所有控件的值序列化成字符串
刪除記錄
模型名:destroy({
where:{
列名:值
}
}).then((result)=>{
刪除成功后的回調(diào)
}
更新記錄
模型名.update({修改的列},{where條件}.then((result)={
更新成功后的回調(diào)
}).catch((e)=>{
出現(xiàn)異常的回調(diào)
})
查詢記錄
模型名.findAll().then((result)=>{ //result:是一個(gè)數(shù)組,存放的是從數(shù)據(jù)庫(kù)中查詢的所有記錄
查詢成功后的回調(diào)
}).catch((e)=>{
執(zhí)行查詢出現(xiàn)異常的回調(diào)
}
Emprouter.get('/findemp',(req,res)=>{ if(req.url != './favicon.ico'){ Employee.findAll().then((result)=>{ res.send(JSON.stringify(result)); }) } })
模糊查詢:
在執(zhí)行帶條件查詢時(shí),需要導(dǎo)入Sequelize模塊的Op子模塊,在Op子模塊中存放的是所有條件查詢的關(guān)鍵字。
const Op = require('sequelize').Op;
Emprouter.post('/findlike',(req,res)=>{ // 獲取前端發(fā)送的部門 let apartment = req.body.apartment; // 進(jìn)行模糊查詢 Employee.findAll({ where:{ apartment:{ [Op.like]:apartment+'%' } } }).then((result)=>{ res.json(result); }).catch((e)=>{ console.log(e); res.json('查詢失敗~') }) })
到此這篇關(guān)于NodeJS Express使用ORM模型訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)流程詳解的文章就介紹到這了,更多相關(guān)NodeJS Express訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- node.js+express+mySQL+ejs+bootstrop實(shí)現(xiàn)網(wǎng)站登錄注冊(cè)功能
- node.js平臺(tái)下利用cookie實(shí)現(xiàn)記住密碼登陸(Express+Ejs+Mysql)
- 零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開發(fā)入門
- express框架通過(guò)ejs模板渲染輸出頁(yè)面實(shí)例分析
- Express 框架中使用 EJS 模板引擎并結(jié)合 silly-datetime 庫(kù)進(jìn)行日期格式化的實(shí)現(xiàn)方法
- nodejs中的express-jwt的使用解讀
- NodeJs Express框架操作MongoDB數(shù)據(jù)庫(kù)執(zhí)行方法講解
- NodeJs?Express路由使用流程解析
- NodeJs Express中間件使用流程解析
- express框架+bootstrap美化ejs模板實(shí)例分析
相關(guān)文章
詳解Node使用Puppeteer完成一次復(fù)雜的爬蟲
這篇文章主要介紹了詳解Node使用Puppeteer完成一次復(fù)雜的爬蟲,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04在windows上用nodejs搭建靜態(tài)文件服務(wù)器的簡(jiǎn)單方法
這篇文章主要介紹了在windows上用nodejs搭建靜態(tài)文件服務(wù)器的簡(jiǎn)單方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析
這篇文章主要為大家介紹了Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10利用Node.js制作爬取大眾點(diǎn)評(píng)的爬蟲
相信每位用過(guò)大眾點(diǎn)評(píng)的人都知道,大眾點(diǎn)評(píng)上有很多美食餐館的信息,所以這篇文章給大家分享利用Node.js實(shí)現(xiàn)爬取大眾點(diǎn)評(píng)的爬蟲,正好可以拿來(lái)練練手Node.js。感興趣的可以參考借鑒。2016-09-09npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法
在開發(fā)過(guò)程中經(jīng)常會(huì)使用npm安裝依賴包來(lái)加速開發(fā),但是在執(zhí)行npm install命令時(shí),有時(shí)會(huì)遇到各種錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法,需要的朋友可以參考下2023-05-05Nodejs 搭建簡(jiǎn)單的Web服務(wù)器詳解及實(shí)例
這篇文章主要介紹了Nodejs 搭建簡(jiǎn)單的Web服務(wù)器詳解及實(shí)例的相關(guān)資料,并附實(shí)例代碼和實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-11-11nodejs使用http模塊發(fā)送get與post請(qǐng)求的方法示例
這篇文章主要介紹了nodejs使用http模塊發(fā)送get與post請(qǐng)求的方法,結(jié)合實(shí)例形式分析了nodejs基于http模塊實(shí)現(xiàn)發(fā)送get與post請(qǐng)求具體操作技巧,需要的朋友可以參考下2018-01-01