【NestJs】集成Prisma数据库配置

1.安装Prisma

使用npm install prisma @prisma/client安装prisma 和 prisma client

再输入 npx prsimanpx prisma init进行prisma的初始化

打开prisma目录中的schema.prisma文件 在schema.prisma文件中设置好连接的数据库和创建对应的表之后

输入npx prisma gengrate命令根据对应的表生成对应的TypeScript类型和prisma client

输入npx prisma migrate dev --name init命令完成第一次迁移文件的生成

输入npx prisma db push将修改和添加后的表结构同步更新到数据库中

2.Prisma单库连接与使用

nest g mo database/prisma --no-spec创建prismaModule
nest g s database/prisma --no-spec创建prismaService

scala 复制代码
import { Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit{
  async onModuleInit() {
    await this.$connect();
  }
}

完成后在需要用到prisma的模块中进行improt导入prismaModule(在prismaModule中还需export导出prismaService)

再在对应服务中注入PrismaService即可使用

kotlin 复制代码
@Inject(PrismaService)
private readonly prisma: PrismaService;//得到prisma实例
constres = await this.prisma.user.findMany();//从user表中查找数据

3.Prsima多数据库Client生成

我们生成PrismaClient通常使用命令npx prisma generate生成对应SQL的Client

如果遇到多个不同类型的数据库postgres或mysql呢?

这里我们分别在prisma目录创建postgres.prisma和mysql.prisma文件

js 复制代码
//postgres.prisma
generator client {
  provider = "prisma-client-js"
  output   = "./clients/postgresql"
}

datasource db {
  provider = "postgresql"
  url      = "postgres://root:123456@localhost:5432/testdb?"
}

model User {
  id       Int    @id @default(autoincrement())
  username String @unique
  password String

  @@map("users") //映射表名为users
}
js 复制代码
mysql.prisma
generator client {
  provider = "prisma-client-js"
  output   = "./clients/mysql"
}

datasource db {
  provider = "mysql"
  url      = "mysql://root:123456@localhost:3306/testdb?"
}

model User {
  id       Int    @id @default(autoincrement())
  username String @unique
  password String

  @@map("users") //映射表名为users
}

修改generator中的output位置并指定在prisma/clients目录下生成client

执行命令npx prisma generate --shcema=./prisma/postgres.prisma生成postgres的prismaClient

执行命令npx prisma generate --shcema=./prisma/mysql.prisma生成mysql的prismaClient

我们会在prsima/clients目录下得到postgres和mysql的prismaClient,那么我们该如何在项目中正确的引用对应的client呢?

通过查看其中mysql的目录文件,可以发现生成出来的client是一个完整的package,我们可以通过命令npm install prisma-mysql@file:./prisma/clients/mysql将生成的这个client作为依赖安装到项目中的package.json中去方便后续在项目中引用(prisma-mysql为本地安装的包名,./prisma/clients/mysql为包的路径)。 生成了对应Client之后我们在服务中只需按以下方式导入即可

js 复制代码
import {PrismaClient as MySQLPrismaClient} from 'prisma-mysql'
import {PrismaClient as PostgresPrismaClient } from 'prisma-postgresql'
相关推荐
爱丶不疚5 天前
Electron:Module 与 Service 的职责边界与加载时序编排
前端·electron·nestjs
沐沐师14 天前
Nest.js 微服务入门教程
微服务·nestjs
沐沐师14 天前
Redis 入门教程
redis·nestjs
谷无姜14 天前
QuizForge:在不停踩坑后的技术决策复盘
前端·nestjs
Flynt16 天前
NestJS 12升级踩坑:从Webpack到Rspack,我折腾了一整个周末
typescript·node.js·nestjs
张洪权17 天前
nest.js websocket 群聊----私聊功能
前端·nestjs
用户712828968446718 天前
NestJS 发布v12版本,看一下有哪些改动
nestjs
YIAN23 天前
NestJS 入门核心梳理:模块化架构、装饰器与依赖注入
后端·nestjs
半个落月24 天前
NestJS 入门实战:从工厂模式到 Todo CRUD,讲透模块化、依赖注入与测试
后端·nestjs
浮生望25 天前
NestJS MVC 实战:模块化架构、CRUD 全流程与标准化错误处理
nestjs