ORM لـ TypeScript: مقارنة بين Prisma و TypeORM و Drizzle - أمثلة برمجية

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

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

ابدأ الدورة

ORM لـ TypeScript: مقارنة وأمثلة



في تطوير الويب الحديث باستخدام TypeScript، يمكن أن يؤدي اختيار ORM (تعيين الكائنات العلائقية) المناسب إلى تسريع التطوير بشكل كبير وزيادة موثوقية التطبيق. يسمح ORM بالعمل مع قواعد البيانات من خلال نهج كائني التوجه، وتجنب كتابة استعلامات SQL الخام. في هذه المقالة، سنقارن بين ثلاثة من أشهر ORM لـ TypeScript: Prisma و TypeORM و Drizzle، بالإضافة إلى استعراض أمثلة على استخدامها.



1. Prisma - المعيار الحديث



Prisma هو ORM من الجيل الجديد يركز على راحة المطور والأداء. يستخدم لغة وصف مخطط خاصة به (Prisma Schema) ويولد عميلاً مكتوبًا بالكامل بالأنواع.



الميزات الرئيسية:

  • توليد تلقائي لأنواع TypeScript
  • واجهة برمجة تطبيقات بديهية للاستعلامات
  • ترحيل بيانات مدمج (Prisma Migrate)
  • دعم PostgreSQL و MySQL و SQLite و MongoDB وغيرها


مثال برمجي بلغة TypeScript:

// schema.prismamodel User {  id    Int     @id @default(autoincrement())  name  String  email String  @unique  posts Post[]}

model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}

// الاستخدام في الكودimport { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function getUsersWithPosts() { const users = await prisma.user.findMany({ include: { posts: true } }); return users;}


2. TypeORM - الكلاسيكي لـ TypeScript



TypeORM هو ORM ناضج يدعم كلاً من أنماط Active Record و Data Mapper. وهو متكامل بشكل وثيق مع TypeScript ويستخدم المُزينات (decorators) لتعريف النماذج.



الميزات الرئيسية:

  • دعم المُزينات والفئات
  • نهجان: Active Record و Data Mapper
  • ترحيل متقدم واشتراكات للأحداث
  • دعم العديد من أنظمة إدارة قواعد البيانات


مثال برمجي بلغة TypeScript:

import { Entity, PrimaryGeneratedColumn, Column, OneToMany, createConnection } from "typeorm";

@Entity()export class User { @PrimaryGeneratedColumn() id: number;

@Column() name: string;

@Column({ unique: true }) email: string;

@OneToMany(() => Post, post => post.user) posts: Post[];}

@Entity()export class Post { @PrimaryGeneratedColumn() id: number;

@Column() title: string;

@Column({ nullable: true }) content: string;

@ManyToOne(() => User, user => user.posts) user: User;}

// الاستخدامasync function getUsersWithPosts() { const connection = await createConnection(); const userRepository = connection.getRepository(User); return await userRepository.find({ relations: ["posts"] });}


3. Drizzle - خفيف الوزن وعالي الأداء



Drizzle هو ORM جديد نسبيًا يركز على الأداء وصغر حجم الحزمة. يستخدم بناء جملة شبيه بـ SQL ولا يتطلب توليد كود.



الميزات الرئيسية:

  • حجم صغير وسرعة عالية
  • دعم أصلي لـ TypeScript بدون مُزينات
  • واجهة برمجة تطبيقات شبيهة بـ SQL (منشئ استعلامات)
  • التوافق مع قواعد بيانات SQL


مثال برمجي بلغة TypeScript:

import { drizzle } from 'drizzle-orm/better-sqlite3';import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';import Database from 'better-sqlite3';

const sqlite = new Database('test.db');const db = drizzle(sqlite);

// تعريف المخططconst users = sqliteTable('users', { id: integer('id').primaryKey(), name: text('na

توصيات