【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'
相关推荐
小蜜蜂dry2 天前
nestjs实战-权限二:角色模块
前端·后端·nestjs
小蜜蜂dry2 天前
nestjs实战-权限一: 菜单模块
前端·后端·nestjs
妖孽白YoonA4 天前
xlt-token v1.0.0 正式发布:NestJS / Express 一包接入的 Token 鉴权库
后端·node.js·nestjs
晓杰'5 天前
从0到1实现Balatro游戏后端(7):Boss Blind与特殊规则实现
后端·websocket·typescript·node.js·游戏开发·项目实战·nestjs
晓杰'5 天前
从0到1实现Balatro游戏后端(6):Blind关卡状态设计与回合推进实现
后端·websocket·typescript·游戏开发·项目实战·nestjs·状态管理
晓杰'12 天前
从0到1实现Balatro游戏后端(5):得分计算与单局结算流程实现
后端·typescript·node.js·游戏开发·项目实战·nestjs·webscoket
向上的车轮13 天前
NestJS 的优秀替代框架——系统化选型指南(2026视角)
nestjs
晓杰'15 天前
从0到1实现Balatro游戏后端(4):玩家手牌操作(出牌 / 弃牌 / 补牌)与状态流转设计
后端·websocket·typescript·node.js·状态模式·项目实战·nestjs
向上的车轮16 天前
NestJS 十大坑点
nestjs
妖孽白YoonA16 天前
xlt-token 1.1:给 NestJS 补上 Sa-Token 式鉴权能力
typescript·nestjs