Nest

How to integrate Prisma 5+ with NestJS for type-safe queries?

March 18, 2026

download ready
Thank You
Your submission has been received.
We will be in touch and contact you soon!

NestJS integrates Prisma 5+ through a dedicated PrismaModule that provides a global, lifecycle-managed PrismaClient instance, ensuring type-safe database operations across your application. Extend PrismaService from PrismaClient with OnModuleInit/OnModuleDestroy for automatic connection/disconnection, eliminating boilerplate in services. Import PrismaModule globally or per-feature for relations like findMany({ include: { posts: true } }), preventing N+1 queries natively. Generate client via npx prisma generate after schema.prisma updates; migrations ensure schema sync. This setup delivers full IntelliSense, auto-completion, and compile-time safety for complex queries.​

Code Example :-

Step 1: Install Dependencies

Code

npm i @prisma/client @nestjs/prisma prisma
npx prisma init
      

Step 2: PrismaService (Extends PrismaClient)

Code

// prisma/prisma.service.ts
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

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

Step 3: PrismaModule (Global Provider)

Code

// prisma/prisma.module.ts
import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

@Global()
@Module({ providers: [PrismaService], exports: [PrismaService] })
export class PrismaModule {}
      

Step 4: Use in Service (Relations, No N+1)

Code

// user/user.service.ts
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';

@Injectable()
export class UserService {
  constructor(private prisma: PrismaService) {}
  
  async findAll() {
    return this.prisma.user.findMany({ include: { posts: true } });
  }
}
      

Step 5: Import in AppModule

Code

// app.module.ts
@Module({
  imports: [PrismaModule],
  providers: [UserService],
})
export class AppModule {}
      

Step 6: Generate & Migrate

Code

npx prisma generate
npx prisma db push  # or migrate dev
      
Hire Now!

Need Help with Nest Development ?

Work with our skilled nest developers to accelerate your project and boost its performance.
**Hire now**Hire Now**Hire Now**Hire now**Hire now

How to integrate Prisma 5+ with NestJS for type-safe queries?

NestJS integrates Prisma 5+ through a dedicated PrismaModule that provides a global, lifecycle-managed PrismaClient instance, ensuring type-safe database operations across your application. Extend PrismaService from PrismaClient with OnModuleInit/OnModuleDestroy for automatic connection/disconnection, eliminating boilerplate in services. Import PrismaModule globally or per-feature for relations like findMany({ include: { posts: true } }), preventing N+1 queries natively. Generate client via npx prisma generate after schema.prisma updates; migrations ensure schema sync. This setup delivers full IntelliSense, auto-completion, and compile-time safety for complex queries.​

Code Example :-

Step 1: Install Dependencies

Code

npm i @prisma/client @nestjs/prisma prisma
npx prisma init
      

Step 2: PrismaService (Extends PrismaClient)

Code

// prisma/prisma.service.ts
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

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

Step 3: PrismaModule (Global Provider)

Code

// prisma/prisma.module.ts
import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

@Global()
@Module({ providers: [PrismaService], exports: [PrismaService] })
export class PrismaModule {}
      

Step 4: Use in Service (Relations, No N+1)

Code

// user/user.service.ts
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';

@Injectable()
export class UserService {
  constructor(private prisma: PrismaService) {}
  
  async findAll() {
    return this.prisma.user.findMany({ include: { posts: true } });
  }
}
      

Step 5: Import in AppModule

Code

// app.module.ts
@Module({
  imports: [PrismaModule],
  providers: [UserService],
})
export class AppModule {}
      

Step 6: Generate & Migrate

Code

npx prisma generate
npx prisma db push  # or migrate dev