【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'
相关推荐
zhennann19 小时前
VonaJS多租户同时支持共享模式和独立模式
数据库·typescript·node.js·nestjs
濮水大叔2 天前
VonaJS多租户🔥居然可以同时支持共享模式和独立模式,太牛了🚀
typescript·node.js·nestjs
濮水大叔2 天前
VonaJS多租户同时支持共享模式和独立模式
typescript·nodejs·nestjs
前端小书生3 天前
MongoDB、NestJS 集成 @nestjs/mongoose
mongodb·nestjs
前端小书生3 天前
NestJs
前端·nestjs
濮水大叔3 天前
Vona ORM分表全攻略
typescript·node.js·nestjs
濮水大叔4 天前
在Vona ORM中实现多数据库/多数据源
typescript·nodejs·nestjs
无双_Joney10 天前
[更新迭代 - 1] Nestjs 在24年底更新了啥?(功能篇)
前端·后端·nestjs
麻辣小蜗牛12 天前
以 NestJS 为原型看懂 Node.js 框架设计:Module
nestjs