<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。
通俗的理解就是: 資料庫連線池是程式啟動時建立足夠數量的資料庫連線物件,並將這些連線物件組成一個池,由程式動態的對池中的連線物件進行申請、使用和釋放。
(1)避免應用程式頻繁的連線、斷開資料庫
(2)提供資料庫連線物件的使用頻率。
(1)建立資料庫連線池:
mysql.createPool(config)
host:資料庫伺服器的地址
port: 埠號
user:連線資料庫的使用者名稱
password:連線資料庫的密碼
database:資料庫名
connectionLimit:用於指定連線池中最大的連結數,預設屬性值為10.
multipleStatements :是否允許執行多條sql語句,預設值為false
(2)從連線池中獲取一個連線
連線池名.getConnection(function(err,connection){ 執行的程式碼 }) //引數err:錯誤物件。連線失敗後的錯誤資訊 //引數connection:連線物件。若連線失敗,它就是undefined
(3)釋放連線物件(將連線物件放回連線池): connection.release();
(4)從連線池中移除連線物件: connection.destory();
(5)關閉該連線池: 連線池名.end();
物件關係對映,主要解決物件導向程式設計與關係型資料庫之間不匹配的問題。
ORM的特點
基於promise的關係型資料庫ORM框架,這個庫完全採用JavaScript開發並且能夠用在Node.JS環境中,易於使用,支援多SQL方言(dialect)。它當前支援MySQL、MariaDB、SQLite、PostgreSQL、Sql Server 資料庫。
sequelize的特色
sequelize的使用
資料庫內容:資料庫名稱為spj,資料庫表為 users表;
1、安裝sequelize:npm install sequelize --->必須先安裝mysql的驅動模組(npm install mysql);
2、連線資料庫:建立sequelize的物件;
//匯入mysql模組 const mysql = require('mysql2'); //匯入sequelize模組 const Sequelize = require('sequelize'); //建立sequelize物件,引數分別為:資料庫名稱,資料庫型別,密碼,設定 var MySequelize = new Sequelize('spj','root','929TJ813',{ host:'localhost', port:3306, dialect:'mysql', //資料庫型別 pool:{ //資料庫連線池 max:20, //最大連線物件的個數 min:5, //最小連線物件的個數 idle:1000 //最長等待時間,單位為毫秒 } }) module.exports = MySequelize ; //匯出建立的sequelize物件
3、建立資料模型:資料模型是一個類,對應的是資料庫中一張表;
const Sequelize =require('sequelize') const MySequesize = require('../config/dbconfig'); //匯入建立的sequelize物件 //建立StudentModel模型,該模型對應的表名是student var StudentModel = MySequesize.define('users',{ sid:{ type:Sequelize.INTEGER, //表示屬性的資料型別 field:'s_id', //屬性對應的列名,若不定義field則表中的列名(sid)就是屬性名 primaryKey:true, //表示主鍵 autoIncrement:true //表示主鍵自增 }, sname:{ type:Sequelize.STRING(50), field: 's_name', allowNull:false, //表示當前列是否允許為空,false表示該列不能為空 //unique:true //表示該列的值必須唯一 }, sgender:{ type:Sequelize.STRING(4), field:'s_gender', allowNull: false }, sbirthday:{ type:Sequelize.DATE, field:'s_birthday', allowNull:false }, saddress:{ type:Sequelize.STRING(100), field:'s_address', allowNull:false }, sage:{ type:Sequelize.INTEGER, field:'s_age', allowNull:false } },{ freezeTableName:true, //true表示使用給定的表名,false表示模型名後加s作為表名 timestamps:false //true表示給模型加上時間戳屬性(createAt、updateAt),false表示不帶時間戳屬性 }) //同步資料庫,force的值為false,表若存在則先刪除後建立,force的值為true表示表若存在則不建立 var users = StudentModel.sync({force:false}); module.exports = StudentModel; //匯出模型
4、使用sequelize實現增刪改查 。
const StudentModel = require('../../db/model/StudentModel'); const Sequelize = require('sequelize') //插入資料 StudentModel.create({ sname:'關羽', sgender:'男', sbirthday:'1998-12-28', saddress:'陝西寶雞' }).then(result=>{ console.log("插入成功!",result); }).catch(err=>{ console.log("插入失敗!",err); }) //查詢資料 StudentModel.findAll({ raw:true //查詢出來只有需要的資料,沒有別的內容 }).then(data=>{ console.log(data); }) //刪除記錄 StudentModel.destroy({ where:{ sid:2 } }).then(result=>{ console.log("刪除成功!",result) }).catch(err=>{ console.log("刪除失敗!",err); }) //更新記錄 StudentModel.findOne({ where:{ sid:3 } }).then(users=>{ users.update({ sname:'張飛', sgender:'男' }).then(result=>{ console.log("更新成功!",result) }).catch(err=>{ console.log("更新失敗!",err); }) }).catch(error=>{ console.log("查無此人!",error); }) //查詢部分欄位 StudentModel.findAll({ attributes:['sname','saddress'], raw:true }).then(result=>{ console.log(result); }).catch(err=>{ console.log(err); }) //聚合函數 StudentModel.findAll({ attributes:[[Sequelize.fn('COUNT',Sequelize.col('s_id')),"記錄總數"]], //col裡面必須放的是列名 raw:true }).then(result=>{ console.log(result) })
5、使用sequelize實現模糊查詢等內容。
const StudentModel = require('../../db/model/StudentModel'); const Op = require('sequelize').Op; //引入sequelize模組的Op操作符 //模糊查詢 StudentModel.findAll({ where:{ sname:{ [Op.like]:'張%' } }, raw:true }).then(result=>{ console.log(result); }) //between:查詢年齡在12到18之間的人的資訊 StudentModel.findAll({ where:{ sage:{ [Op.between]:[12,18] } }, raw:true }).then(result=>{ console.log(result); }) //in:查詢地址是'陝西西安‘和'陝西商洛‘的記錄 StudentModel.findAll({ where:{ saddress:{ [Op.in]:['陝西西安','陝西商洛'] } }, order:[ ['sage','desc'] //查詢結果按照sage的降序排列 ], raw:true }).then(result=>{ console.log(result); }) //and和or:查詢性別為'男‘,並且地址是‘陝西寶雞'的記錄 StudentModel.findAll({ where:{ [Op.and]:[ //把and改為or即為或時間 { sgender:{ [Op.eq]:'男' } }, { saddress:{ [Op.eq]:'陝西寶雞' } } ] }, raw:true }).then(result=>{ console.log(result); }) //limit和offset:分頁查詢 StudentModel.findAll({ limit:3, //查詢的記錄數 offset:1, //從索引值為幾的記錄開始查詢(查詢的起始位置),所有資料的索引值從0開始 raw:true }).then(result=>{ console.log(result); })
到此這篇關於資料庫連線池以及sequelize實現增刪改查等操作指南的文章就介紹到這了,更多相關資料庫連線池及sequelize增刪改查內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45