NestJs MySQL Query Builder Examples


NestJS में MySQL के साथ Query Builder का use आपको TypeORM के through complex SQL queries को लिखने का flexible और powerful तरीका देता है।

जब आपको advanced queries (like joins, filtering, pagination, aggregation) perform करनी हो और raw SQL query लिखना avoid करना हो, तब Query Builder एक perfect solution होता है।

Query Builder आपको TypeORM entities के साथ object-oriented तरीके से complex SQL queries लिखने कि flexibility provide करता है।

इस topic में हम Query Builder का detailed overview देखेंगे, उसके common methods और उनके examples को समझेंगे, जो NestJS के MySQL integration के साथ काम आते हैं।

What is Query Builder ?

Query Builder एक feature है जो TypeORM आपको देता है ताकि आप object-oriented तरीके से complex SQL queries लिख सकें। आपको raw SQL query लिखने कि need नहीं पड़ती, और आप multiple clauses (like SELECT, WHERE, JOIN, etc.) को easily chain कर सकते हैं।

Query Builder को use करने का main advantage यह है कि आप TypeScript के typing के साथ सारी SQL queries को लिख सकते हैं और अपने code को clean और maintainable बना सकते हैं।

NestJs MySQL Query Builder Methods

Query Builder में कुछ important methods होते हैं जो आपको SQL queries build करने में help करते हैं। ये methods आपको SELECT, WHERE, JOIN, ORDER BY, और LIMIT जैसे clauses को easily implement करने कि सुविधा देते हैं।

  • createQueryBuilder() : यह method query builder create करने के लिए use होता है।

  • select() : Table के specific columns को select करने के लिए use होता है।

  • where() : Filtering conditions लगाने के लिए।

  • innerJoinAndSelect() / leftJoinAndSelect() : Tables के बीच joins बनाने के लिए।

  • orderBy() : Sorting के लिए use होता है।

  • limit() और offset() : Pagination implement करने के लिए।

चलिए इन methods को detail में समझते हैं और examples के साथ देखते हैं।

Create an entity

पहले एक User entity बनाते हैं जो MySQL table को represent करेगी।

File : src/user/user.entity.ts

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() email: string; @Column() age: number; }

NestJs MySQL Select Example

सबसे basic query जो हम perform करते हैं वो है select query. select() method का use करते hue हम specific columns को select कर सकते हैं।

हम UserService में Query Builder का use करके एक basic SELECT query लिखते हैं।

File : src/user/user.service.ts

import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from './user.entity'; @Injectable() export class UserService { constructor( @InjectRepository(User) private userRepository: Repository<User>, ) {} async findAllUsers(): Promise<User[]> { return this.userRepository .createQueryBuilder('user') .select(['user.id', 'user.name', 'user.email']) .getMany(); // Yeh query sabhi users ko select karegi } }

यहां

  • createQueryBuilder('user') method का use करके query builder create किया गया है और 'user' table को alias दिया गया है।

  • select() method का use करके हम specific columns (id, name, email) को select कर रहे हैं।

  • getMany() method का use कर के सभी matching records को retrieve किया गया है।

NestJs MySQL Where Clause

अब अगर हमें specific conditions के साथ records को filter करना हो, तो हम where() method का use करते हैं। यह method SQL के WHERE clause को represent करता है।

File : src/user/user.service.ts

async findUsersByAge(minAge: number): Promise<User[]> { return this.userRepository .createQueryBuilder('user') .where('user.age > :minAge', { minAge }) // Age filter apply kiya gaya hai .getMany(); }

Example में :minAge इस a placeholder, जो parameters object से value लेता है।

NestJs MySQL Join Query Builder

अगर आपको multiple tables को join करना हो, तो innerJoinAndSelect() या leftJoinAndSelect() का use करके आप SQL JOIN queries लिख सकते हैं।

यहां हम User और Profile tables को join करेंगे। पहले Profile entity बनाते हैं और User के साथ relationship define करते हैं।

File : src/profile/profile.entity.ts

import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn } from 'typeorm'; import { User } from '../user/user.entity'; @Entity() export class Profile { @PrimaryGeneratedColumn() id: number; @Column() bio: string; @OneToOne(() => User) @JoinColumn() user: User; }
Join User and Profile Tables

File : src/user/user.service.ts

async findUsersWithProfile(): Promise<User[]> { return this.userRepository .createQueryBuilder('user') .innerJoinAndSelect('user.profile', 'profile') // Join profile with user .getMany(); }

example में innerJoinAndSelect() का use करके हम user और profile tables को join कर रहे हैं और उनके corresponding records को select कर रहे हैं।

NestJs MySQL Sorting Example

Sorting के लिए orderBy() method का use किया जाता है। इससे आप records को ascending या descending order में arrange कर सकते हैं।

File : src/user/user.service.ts

async findAllUsersSorted(): Promise<User[]> { return this.userRepository .createQueryBuilder('user') .orderBy('user.name', 'ASC') // Name ke hisaab se sorting ASC order mein .getMany(); }

NestJs MySQL Pagination

अगर आपको large datasets handle करने हैं, तो pagination का use करके आप queries को efficient बना सकते हैं। इसमें limit() और offset() का use होता है जो SQL queries में LIMIT और OFFSET को represent करता है।

File : src/user/user.service.ts

async findUsersWithPagination(limit: number, offset: number): Promise<User[]> { return this.userRepository .createQueryBuilder('user') .limit(limit) // Limit kitne records fetch karne hain .offset(offset) // Offset starting point define karta hai .getMany(); }

NestJs MySQL Aggregation Functions

SQL aggregation functions जैसे COUNT(), SUM(), या AVG() को भी आप Query Builder के through implement कर सकते हैं।

File : src/user/user.service.ts

async countUsers(): Promise<number> { return this.userRepository .createQueryBuilder('user') .select('COUNT(user.id)', 'count') // COUNT() function ka use .getRawOne() .then(result => result.count); }

यहां

  • select('COUNT(user.id)', 'count') का use करके हम user records count कर रहे हैं।

  • getRawOne() method का use करके raw result को fetch किया गया है।

NestJs MySQL Best Practices

  • Use Query Builder for Complex Queries : Query Builder का use तब करें जब आपको complex joins, filtering, या aggregation करना हो। Basic CRUD operations के लिए repositories को directly use करना better होता है।

  • Handle SQL Injection : Query Builder में parameterized queries का use करें ताकि SQL injection से बचा जा सके।

  • Use DTOs for Data Validation : जब आप client से input ले रहे हैं, तो data validation के लिए DTOs का use करें। इससे input data sanitized रहेगा।

  • Pagination for Large Datasets : Large datasets के लिए pagination implement करना performance और efficiency के लिए जरूरी होता है।

  • Avoid Overuse of Query Builder : हमेशा Query Builder का use न करें। अगर query simple है, तो repository methods like find(), findOne() का use करें।


Hey ! I'm Rahul founder of learnhindituts.com. Working in IT industry more than 4.5 years. I love to talk about programming as well as writing technical tutorials and blogs that can help to others .... keep learning :)

Get connected with me - LinkedIn Twitter Instagram Facebook