TypeScript के लिए ORM: तुलना और उपयोग के उदाहरण
आधुनिक TypeScript-डेवलपमेंट में, सही ORM (Object-Relational Mapping) का चयन एक मौलिक निर्णय है जो प्रदर्शन, कोड की पठनीयता और विकास की गति को प्रभावित करता है। इस लेख में हम TypeScript के तीन सबसे लोकप्रिय ORM: Prisma, TypeORM और MikroORM की विस्तृत तुलना करेंगे। आप उनकी ताकत और कमजोरियों को जानेंगे, कोड उदाहरण देखेंगे और अपने प्रोजेक्ट के लिए व्यावहारिक सुझाव प्राप्त करेंगे।
1. Prisma — आधुनिक मानक
Prisma एक नई पीढ़ी का ORM है जो अपनी स्वयं की घोषणात्मक स्कीमा भाषा का उपयोग करता है। यह आपके डेटाबेस स्कीमा के आधार पर स्वचालित रूप से एक टाइप-सुरक्षित क्लाइंट उत्पन्न करता है। Prisma PostgreSQL, MySQL, SQLite, SQL Server और MongoDB को सपोर्ट करता है।
लाभ:
- शक्तिशाली टाइप सिस्टम — सभी क्वेरी संकलन चरण में जांची जाती हैं
- अंतर्निहित माइग्रेशन और विज़ुअल एडिटर Prisma Studio
- उत्कृष्ट दस्तावेज़ीकरण और सक्रिय समुदाय
- IDE में ऑटोकम्प्लीट
कमियां:
- क्लाइंट जनरेशन का अतिरिक्त चरण
- जटिल SQL क्वेरी के लिए कम लचीलापन
- अपेक्षाकृत बड़ा पैकेज आकार
कोड उदाहरण:
// schema.prismamodel User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[]}
model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}// app.tsimport { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() { // पोस्ट के साथ उपयोगकर्ता बनाना const user = await prisma.user.create({ data: { email: 'alice@example.com', name: 'Alice', posts: { create: { title: 'Hello World' } } }, include: { posts: true } });
// फ़िल्टर के साथ खोज const users = await prisma.user.findMany({ where: { email: { contains: 'alice' } }, orderBy: { name: 'asc' } });
console.log(users);}
main();2. TypeORM — सिद्ध अनुभवी
TypeORM TypeScript के लिए सबसे पुराने ORM में से एक है, जो Hibernate और Entity Framework से प्रेरित है। यह संस्थाओं को परिभाषित करने के लिए डेकोरेटर का उपयोग करता है और Active Record तथा Data Mapper पैटर्न को सपोर्ट करता है। यह अधिकांश रिलेशनल डेटाबेस के साथ काम करता है।
लाभ:
- लचीली डेकोरेटर प्रणाली
- माइग्रेशन और स्कीमा सिंक्रोनाइज़ेशन का समर्थन
- बड़ी संख्या में एकीकरण और एक्सटेंशन
- परिपक्व और समय-परीक्षित प्रोजेक्ट
कमियां:
- Prisma की तुलना में कम सख्त टाइपिंग
- शुरुआती लोगों के लिए जटिल कॉन्फ़िगरेशन
- हाल ही में धीमा विकास
कोड उदाहरण:
// entity/User.tsimport { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';import { Post } from './Post';
@Entity()export class User { @PrimaryGeneratedColumn() id: number;
@Column({ unique: true }) email: string;
@Column({ nullable: true }) name: string;
@OneToMany(() => Post, (post) => post.author) posts: Post[];}// app.tsimport { createConnection } from 'typeorm';import { User } from './entity/User';
async function main() { const connection = await createConnection(); const userRepo = connection.getRepository(User);
// निर्माण const user = userRepo.create({ email: 'bob@example.com', name: 'Bob' }); await userRepo.save(user);
// खोज const users = await userRepo.find({ where: { name: Like('%Bob%') }, relations: ['posts'] });
console.log(users);}
main();