詳解如何使用Node.js連接數(shù)據(jù)庫(kù)ORM
ORM
在上文中我們講了如何使用node.js mysql2連接數(shù)據(jù)庫(kù),接下來講講ORM
下面摘一段百科對(duì)ORM的介紹
對(duì)象關(guān)系映射(英語(yǔ):Object Relational Mapping,簡(jiǎn)稱ORM,或O/RM,或O/R mapping),是一種程序設(shè)計(jì)技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。從效果上說,它其實(shí)是創(chuàng)建了一個(gè)可在編程語(yǔ)言里使用的“虛擬對(duì)象數(shù)據(jù)庫(kù)”。
講人話就是,在常用面向?qū)ο蟮恼Z(yǔ)言中,我們用class(不一定要class)來映射數(shù)據(jù)庫(kù)中的表,用實(shí)例化對(duì)象來映射表中的每一條數(shù)據(jù),每一欄用對(duì)象屬性表示
比如下面這個(gè)類可以映射為數(shù)據(jù)庫(kù)中的表,有兩列數(shù)據(jù),分別是name和age
class User {
name: string
age: string
}

下載量
目前在nodejs中常用的ORM有prisma,sequlize,typeorm等等
下面是他們的下載量對(duì)比

typeorm
接下來我們就來嘗試一下如何用typeorm來連接數(shù)據(jù)庫(kù), typeorm提供了一些裝飾器讓我們來描述一張表的結(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í)行,這樣就可以專注于業(yè)務(wù)而無需過多關(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
接下來我們就來嘗試一下如何用sequlize來連接數(shù)據(jù)庫(kù), sequlize提供了define讓我們來定義一張表的結(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();
// 查詢所有用戶
const users = await User.findAll();
...
const u = await User.findOne({ where: { name: 'jym' } });
u.name = 'test'
u.save()
u.destroy()
prisma
prisma也是差不多的方式,只不過prisma提供了另一套 Prisma schema語(yǔ)法來描述自己的應(yīng)用模型,相比上面兩個(gè),它的語(yǔ)法更簡(jiǎn)潔,描述能力也不比class語(yǔ)法差,其實(shí)定義一套這樣的語(yǔ)法也滿足依賴倒置的原則,這樣在以后要擴(kuò)展其他語(yǔ)言比如GO,JAVA之類的也很方便。
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',
},
})
接下來會(huì)進(jìn)一步講解如何用node.js開發(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學(xué)習(xí)記錄之搭建web服務(wù)器教程
本篇文章主要介紹了詳解node學(xué)習(xí)記錄——搭建web服務(wù)器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
Nodejs 發(fā)送Post請(qǐng)求功能(發(fā)短信驗(yàn)證碼例子)
這篇文章主要介紹了Nodejs 發(fā)送Post請(qǐng)求功能(發(fā)短信驗(yàn)證碼例子),需要的朋友可以參考下2017-02-02
基于node搭建服務(wù)器,寫接口,調(diào)接口,跨域的實(shí)例
今天小編就為大家分享一篇基于node搭建服務(wù)器,寫接口,調(diào)接口,跨域的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
在Node.js中實(shí)現(xiàn)視頻列表的分頁(yè)展示功能
在Web應(yīng)用開發(fā)中,展示大量數(shù)據(jù)時(shí)經(jīng)常會(huì)用到分頁(yè)功能,以提升用戶體驗(yàn)和頁(yè)面加載性能,本篇博客將介紹如何在使用Node.js和MongoDB的項(xiàng)目中實(shí)現(xiàn)視頻列表的分頁(yè)展示,文中有相關(guān)的代碼示例,需要的朋友可以參考下2024-04-04
socket.io斷線重連的幾種場(chǎng)景及處理方法
Socket.IO是一個(gè)庫(kù),可用于在瀏覽器和服務(wù)器之間進(jìn)行實(shí)時(shí),雙向和基于事件的通信,下面這篇文章主要給大家介紹了關(guān)于socket.io斷線重連的幾種場(chǎng)景及處理方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
node.js express中app.param的用法詳解
express.js是nodejs的一個(gè)MVC開發(fā)框架,并且支持jade等多種模板。下面這篇文章主要給大家介紹了關(guān)于node.js express中app.param用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
如何使用nvm實(shí)現(xiàn)nodejs版本管理(版本刪除,版本切換及版本添加)
這篇文章主要給大家介紹了關(guān)于如何使用nvm實(shí)現(xiàn)nodejs版本管理(版本刪除,版本切換及版本添加)的相關(guān)資料,nvm是一個(gè)node版本管理工具,通過它可以安裝多種node版本并且可以快速、簡(jiǎn)單的切換node版本,需要的朋友可以參考下2023-10-10
詳解node如何讓一個(gè)端口同時(shí)支持https與http
眾所周知node是一個(gè)高性能的web服務(wù)器,使用它可以很簡(jiǎn)單的創(chuàng)建一個(gè)http或https的服務(wù)器。這篇文章主要介紹了詳解node如何讓一個(gè)端口同時(shí)支持https與http2017-07-07

