ORM لـ TypeScript: مقارنة بين Prisma وTypeORM وMikroORM

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ORM لـ TypeScript: مقارنة وأمثلة استخدام



في تطوير TypeScript الحديث، يعد اختيار ORM (تعيين الكائنات العلائقية) المناسب قرارًا أساسيًا يؤثر على الأداء، وقابلية قراءة الكود، وسرعة التطوير. في هذه المقالة، سنقارن بالتفصيل أشهر ثلاثة ORM لـ TypeScript: 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 هو أحد أقدم ORM لـ TypeScript، مستوحى من Hibernate وEntity Framework. يستخدم المُزَيِّنات (decorators) لتعريف الكيانات ويدعم نمطي 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();


3

توصيات