詳解如何使用Node.js連接數(shù)據(jù)庫(kù)ORM
ORM
在上文中我們講了如何使用node.js mysql2連接數(shù)據(jù)庫(kù),接下來(lái)講講ORM
下面摘一段百科對(duì)ORM的介紹
對(duì)象關(guān)系映射(英語(yǔ):Object Relational Mapping,簡(jiǎn)稱(chēng)ORM,或O/RM,或O/R mapping),是一種程序設(shè)計(jì)技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類(lèi)型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。從效果上說(shuō),它其實(shí)是創(chuàng)建了一個(gè)可在編程語(yǔ)言里使用的“虛擬對(duì)象數(shù)據(jù)庫(kù)”。
講人話(huà)就是,在常用面向?qū)ο蟮恼Z(yǔ)言中,我們用class(不一定要class)來(lái)映射數(shù)據(jù)庫(kù)中的表,用實(shí)例化對(duì)象來(lái)映射表中的每一條數(shù)據(jù),每一欄用對(duì)象屬性表示
比如下面這個(gè)類(lèi)可以映射為數(shù)據(jù)庫(kù)中的表,有兩列數(shù)據(jù),分別是name和age
class User { name: string age: string }
下載量
目前在nodejs中常用的ORM有prisma,sequlize,typeorm等等
下面是他們的下載量對(duì)比
typeorm
接下來(lái)我們就來(lái)嘗試一下如何用typeorm來(lái)連接數(shù)據(jù)庫(kù), typeorm提供了一些裝飾器讓我們來(lái)描述一張表的結(jié)構(gòu)
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"; @Entity() export class User { @Column() name: string; @Column() age: string; }
CRUD的時(shí)候只要像操作一個(gè)對(duì)象那樣操作即可,框架會(huì)自動(dòng)幫你生成sql語(yǔ)句執(zhí)行,這樣就可以專(zhuān)注于業(yè)務(wù)而無(wú)需過(guò)多關(guān)注數(shù)據(jù)庫(kù)的細(xì)節(jié)了
const user = new User(); user.name = "jym"; user.age = 18; await repository.save(user); const allUsers = await repository.find(); const u = await repository.findOne({ name: "jym" }); await repository.remove(u);
sequlize
接下來(lái)我們就來(lái)嘗試一下如何用sequlize來(lái)連接數(shù)據(jù)庫(kù), sequlize提供了define讓我們來(lái)定義一張表的結(jié)構(gòu)
const { Sequelize, DataTypes } = require('sequelize'); const sequelize = new Sequelize('jym', 'root', 'password', { host: 'localhost', dialect: 'mysql' }); const User = sequelize.define('User', { // 在這里定義模型屬性 name: { type: DataTypes.STRING, }, age: { type: DataTypes.STRING } });
同樣,對(duì)一行數(shù)據(jù)的CRUD可以映射為對(duì)象實(shí)例的操作
const u = await User.create({ name: "jym" }); console.log(u.name); // "jym" await u.save(); // 查詢(xún)所有用戶(hù) const users = await User.findAll(); ... const u = await User.findOne({ where: { name: 'jym' } }); u.name = 'test' u.save() u.destroy()
prisma
prisma也是差不多的方式,只不過(guò)prisma提供了另一套 Prisma schema語(yǔ)法來(lái)描述自己的應(yīng)用模型,相比上面兩個(gè),它的語(yǔ)法更簡(jiǎn)潔,描述能力也不比class語(yǔ)法差,其實(shí)定義一套這樣的語(yǔ)法也滿(mǎn)足依賴(lài)倒置的原則,這樣在以后要擴(kuò)展其他語(yǔ)言比如GO,JAVA之類(lèi)的也很方便。
model User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[] }
import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() const user = await prisma.user.findUnique({ where: { name: 'jym', }, })
接下來(lái)會(huì)進(jìn)一步講解如何用node.js開(kāi)發(fā)一個(gè)應(yīng)用,感興趣的朋友記得關(guān)注一波,謝謝支持
以上就是詳解如何使用Node.js連接數(shù)據(jù)庫(kù)ORM的詳細(xì)內(nèi)容,更多關(guān)于Node.js連接數(shù)據(jù)庫(kù)ORM的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js數(shù)據(jù)庫(kù)操作之連接MySQL數(shù)據(jù)庫(kù)(一)
前一陣在做項(xiàng)目的時(shí)候,需要通過(guò)nodejs連接到MySQL數(shù)據(jù)庫(kù),于是簡(jiǎn)單地學(xué)習(xí)了一下MySQL這個(gè)庫(kù),分享一些學(xué)習(xí)心得給大家,希望對(duì)大家有幫助。下面這篇文章主要介紹了Node.js數(shù)據(jù)庫(kù)操作之連接MySQL數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下。2017-03-03nodejs讀寫(xiě)json文件的簡(jiǎn)單方法(必看)
下面小編就為大家?guī)?lái)一篇nodejs讀寫(xiě)json文件的簡(jiǎn)單方法(必看)。2017-03-03jQuery+koa2實(shí)現(xiàn)簡(jiǎn)單的Ajax請(qǐng)求的示例
這篇文章主要介紹了jQuery+koa2實(shí)現(xiàn)簡(jiǎn)單的Ajax請(qǐng)求的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Nodejs極簡(jiǎn)入門(mén)教程(三):進(jìn)程
這篇文章主要介紹了Nodejs極簡(jiǎn)入門(mén)教程(三):進(jìn)程,本文講解了Node 進(jìn)程間通信、cluster 模塊等內(nèi)容,需要的朋友可以參考下2014-10-10nodejs 提示‘xxx’ 不是內(nèi)部或外部命令解決方法
本文介紹了node.js包管理工具npm安裝模塊后,無(wú)法通過(guò)命令行執(zhí)行命令,提示‘xxx’ 不是內(nèi)部或外部命令的解決方法,給需要的小伙伴參考下。2014-11-11nodejs簡(jiǎn)單實(shí)現(xiàn)TCP服務(wù)器端和客戶(hù)端的聊天功能示例
這篇文章主要介紹了nodejs簡(jiǎn)單實(shí)現(xiàn)TCP服務(wù)器端和客戶(hù)端的聊天功能,結(jié)合實(shí)例形式分析了nodejs基于TCP協(xié)議實(shí)現(xiàn)的聊天程序客戶(hù)端與服務(wù)器端具體步驟與相關(guān)操作技巧,代碼備有較為詳盡的注釋便于理解,需要的朋友可以參考下2018-01-01node.js + socket.io 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)隨機(jī)匹配聊天
這篇文章主要介紹了node.js + socket.io 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)隨機(jī)匹配聊天,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06