【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'
相关推荐
Eric_见嘉1 天前
NestJS 🧑‍🍳 厨子必修课(九):API 文档 Swagger
前端·后端·nestjs
XiaoYu200210 天前
第3章 Nest.js拦截器
前端·ai编程·nestjs
XiaoYu200211 天前
第2章 Nest.js入门
前端·ai编程·nestjs
实习生小黄12 天前
NestJS 调试方案
后端·nestjs
当时只道寻常15 天前
NestJS 如何配置环境变量
nestjs
濮水大叔1 个月前
VonaJS是如何做到文件级别精确HMR(热更新)的?
typescript·node.js·nestjs
ovensi1 个月前
告别笨重的 ELK,拥抱轻量级 PLG:NestJS 日志监控实战指南
nestjs
ovensi1 个月前
Docker+NestJS+ELK:从零搭建全链路日志监控系统
后端·nestjs
Gogo8161 个月前
nestjs 的项目启动
nestjs