Node使用MySQL
一、認(rèn)識mysql2
如何可以在Node的代碼中執(zhí)行SQL語句來,這里我們可以借助于兩個庫:
- 更快/更好的性能;
- Prepared Statement(預(yù)編譯語句):
提高性能:將創(chuàng)建的語句模塊發(fā)送給MySQL,然后MySQL編譯(解析、優(yōu)化、轉(zhuǎn)換)語句模塊,并且存儲它但是不執(zhí)行,之后我們在真正執(zhí)行時會給?提供實(shí)際的參數(shù)才會執(zhí)行;就算多次執(zhí)行,也只會編譯一次,所以性能是更高的;
防止SQL注入:之后傳入的值不會像模塊引擎那樣就編譯,那么一些SQL注入的內(nèi)容不會被執(zhí)行;or 1 = 1不會被執(zhí)行;
- 支持Promise,所以我們可以使用async和await語法
所以后續(xù)的學(xué)習(xí)中會選擇mysql2在node中操作數(shù)據(jù)。
二、使用mysql2
第一步:創(chuàng)建連接(通過createConnection),并且獲取連接對象;
第二步:執(zhí)行SQL語句即可(通過query);
三、Prepared Statement
Prepared Statement(預(yù)編譯語句):
它但是不執(zhí)行,之后我們在真正執(zhí)行時會給?提供實(shí)際的參數(shù)才會執(zhí)行;就算多次執(zhí)行,也只會編譯一次,所
以性能是更高的;
會被執(zhí)行;
強(qiáng)調(diào):如果再次執(zhí)行該語句,它將會從LRU(Least Recently Used) Cache中獲取獲取,省略了編譯statement的時間來提高性能。
四、Connection Pools
前面我們是創(chuàng)建了一個連接(connection),但是如果我們有多個請求的話,該連接很有可能正在被占用,那么我們是否需要每次一個請求都去創(chuàng)建一個新的連接呢?
五、Promise方式
目前在JavaScript開發(fā)中我們更習(xí)慣Promise和await、async的方式,mysql2同樣是支持的:
六、認(rèn)識ORM
對象關(guān)系映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序設(shè)計(jì)的方案:
- 從效果上來講,它提供了一個可在編程語言中,使用 虛擬對象數(shù)據(jù)庫 的效果;
- 比如在Java開發(fā)中經(jīng)常使用的ORM包括:Hibernate、MyBatis;
Node當(dāng)中的ORM我們通常使用的是 sequelize;
- Sequelize是用于Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server的基于Node.js 的 ORM;
- 它支持非常多的功能;
如果我們希望將Sequelize和MySQL一起使用,那么我們需要先安裝兩個東西:
- mysql2:sequelize在操作mysql時使用的是mysql2;
- sequelize:使用它來讓對象映射到表中;
npm install sequelize mysql2
七、Sequelize的使用
Sequelize的連接數(shù)據(jù)庫:
八、Sequelize映射關(guān)系表
九、Sequelize 一對多關(guān)系
十、Sequelize多對多關(guān)系
總結(jié)
以上是生活随笔為你收集整理的Node使用MySQL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bootstrap table 分页_J
- 下一篇: LeetCode MySQL 1587.