【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 天前
你认为Vonajs提供的这些特性会比Nestjs更好用吗?
nodejs·nestjs
前端卧龙人6 天前
你的nest项目不要再使用console.log
nestjs
plusone7 天前
【Nest指北系列-源码】(四)NestContainer
nestjs
zhuyasen9 天前
从Node.js到Go:如何从NestJS丝滑切换并拥抱Sponge框架
node.js·nestjs
前端杂货铺14 天前
NestJS——重构日志、数据库、配置
数据库·重构·nestjs
前端杂货铺22 天前
NestJS——日志、NestJS-logger、pino、winston、全局异常过滤器
nestjs·日志
林太白1 个月前
NestJS用户模块CRUD和分页实现
前端·javascript·nestjs
plusone1 个月前
【Nest指北系列-源码】(一)目录结构
nestjs
前端笨鸟2 个月前
NestJS+MongoDB高效CRUD接口开发全景指南
前端·mongodb·nestjs