ORM لـ Kotlin: Exposed مقابل Ktor مقابل Ktorm — مقارنة وأمثلة

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

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

ابدأ الدورة

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



Kotlin هي لغة حديثة تُستخدم بنشاط لتطوير تطبيقات الواجهة الخلفية (backend)، وتطبيقات Android، وحتى المشاريع عبر المنصات. للعمل مع قواعد البيانات، غالبًا ما يختار المطورون ORM (تعيين الكائنات العلائقية) لتجنب كتابة استعلامات SQL الخام وتسريع التطوير. في هذه المقالة، سنستعرض ثلاث أدوات ORM شائعة لـ Kotlin: Exposed و Ktor (بالاقتران مع Exposed) و Ktorm. سنقارن بين صياغتها وأدائها وسهولة استخدامها من خلال أمثلة عملية.



1. Exposed — ORM الرسمي من JetBrains



Exposed هي مكتبة ORM تم تطويرها بواسطة شركة JetBrains خصيصًا لـ Kotlin. وهي تدعم نهجين: DSL (لغة خاصة بالمجال) و DAO (كائنات الوصول إلى البيانات). تتكامل Exposed بشكل مثالي مع إطار العمل Ktor، ولكن يمكن استخدامها أيضًا بشكل منفصل.



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

  • صياغة DSL خفيفة وبديهية.
  • دعم المعاملات (transactions)، والترحيل (migrations)، والاتصالات (connections).
  • العمل مع PostgreSQL، MySQL، H2، SQLite وقواعد بيانات أخرى.
  • مجتمع نشط ووثائق رسمية.


مثال على الكود (نهج DSL):

import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction

// تعريف الجدولobject Users : Table() { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age")

override val primaryKey = PrimaryKey(id)}

// مثال على استعلامfun main() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

transaction { SchemaUtils.create(Users)

// إدراج Users.insert { it[name] = "Alice" it[age] = 30 }

// استعلام val result = Users.selectAll().where { Users.age greater 25 } result.forEach { println("${it[Users.name]}: ${it[Users.age]}") } }}


2. Ktor + Exposed — تركيبة لتطبيقات الويب



Ktor هو إطار عمل ويب غير متزامن (asynchronous) لـ Kotlin. على الرغم من أن Ktor نفسه لا يوفر ORM مدمجًا، إلا أنه يعمل بشكل ممتاز مع Exposed. تتيح هذه التركيبة إنشاء REST API بأقل قدر من الكود.



مثال على دمج Ktor مع Exposed:

import io.ktor.server.application.*import io.ktor.server.routing.*import io.ktor.server.response.*import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction

fun Application.module() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

routing { get("/users") { val users = transaction { Users.selectAll().map { mapOf("name" to it[Users.name], "age" to it[Users.age]) } } call.respond(users) } }}


هذا النهج مناسب للخدمات المصغرة (microservices) والمشاريع الصغيرة حيث تكون البساطة وسرعة التطوير مهمة.



3. Ktorm — ORM خفيف وعالي الأداء



Ktorm هو ORM شائع آخر لـ Kotlin، يركز على الأداء والبساطة. يستخدم البرمجة الوظيفية ويدعم كلاً من DSL والصياغة الشبيهة بـ SQL.



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

  • أداء عالٍ بسبب عدم استخدام الانعكاس (reflection).
  • دعم الإضافات (مثل حقول JSON).
  • تكوين بسيط وتبعيات قليلة.
  • العمل مع معظم أنظمة إدارة قواعد البيانات الشائعة.


مثال على كود Ktorm:

import me.liuwj.ktorm.database.Databaseimport me.liuwj.ktorm.dsl.*import me.liuwj.ktorm.entity.*

// تعريف الكيانinterface User : Entity { compan

توصيات