العمل مع قواعد البيانات في Kotlin: PostgreSQL و MongoDB للمبتدئين

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

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

ابدأ الدورة

مقدمة في العمل مع قواعد البيانات في Kotlin

\n\n

Kotlin هي لغة حديثة ثابتة الأنواع تعمل على JVM، وتكتسب شعبية سريعة بفضل إيجازها وأمانها. من المهارات الأساسية لأي مطور هي القدرة على التفاعل مع قواعد البيانات. في هذه المقالة، سنستعرض كيفية الاتصال وتنفيذ العمليات الأساسية (CRUD) مع أشهر نوعين من قواعد البيانات: PostgreSQL العلائقية و MongoDB الموجهة للمستندات.

\n\n

سنستخدم مكتبات حديثة، مكيفة بشكل كبير مع Kotlin الاصطلاحي:

\n
    \n
  • Exposed — إطار عمل ORM من JetBrains لقواعد بيانات SQL (PostgreSQL, MySQL وغيرها).
  • \n
  • KMongo — عميل ODM تفاعلي لـ MongoDB، مبني على coroutines.
  • \n
\n\n

المقالة موجهة للمبتدئين: سنشرح إعداد المشروع، الاتصال بقاعدة البيانات وأمثلة بسيطة لإدراج وقراءة وتحديث وحذف البيانات.

\n\n

1. إعداد المشروع وإضافة التبعيات

\n\n

للبدء، قم بإنشاء مشروع Kotlin جديد (على سبيل المثال، عبر IntelliJ IDEA مع Gradle أو Maven). أضف التبعيات اللازمة في ملف build.gradle.kts.

\n\n

تبعيات Gradle لـ PostgreSQL (Exposed)

\n
dependencies {\n    // Exposed\n    implementation("org.jetbrains.exposed:exposed-core:0.44.1")\n    implementation("org.jetbrains.exposed:exposed-dao:0.44.1")\n    implementation("org.jetbrains.exposed:exposed-jdbc:0.44.1")\n\n    // برنامج تشغيل PostgreSQL\n    implementation("org.postgresql:postgresql:42.7.1")\n\n    // تجمع الاتصالات (HikariCP)\n    implementation("com.zaxxer:HikariCP:5.1.0")\n}
\n\n

تبعيات Gradle لـ MongoDB (KMongo)

\n
dependencies {\n    // KMongo (مع coroutines)\n    implementation("org.litote.kmongo:kmongo-coroutine:4.11.0")\n\n    // عميل Ktor (إذا كان برنامج التشغيل التفاعلي مطلوبًا)\n    implementation("org.litote.kmongo:kmongo-async:4.11.0")\n}
\n\n

بعد مزامنة المشروع، يمكنك البدء في الاتصال.

\n\n

2. العمل مع PostgreSQL عبر Exposed

\n\n

يوفر Exposed طريقتين: DSL (استعلامات SQL آمنة من حيث النوع) و DAO (تعيين كائن-علائقي). سنستخدم DAO - فهو أكثر بديهية للمبتدئين.

\n\n

الاتصال بقاعدة البيانات

\n
import org.jetbrains.exposed.sql.Database\nimport org.jetbrains.exposed.sql.transactions.transaction\nimport com.zaxxer.hikari.HikariConfig\nimport com.zaxxer.hikari.HikariDataSource\n\nfun connectToPostgres() {\n    val config = HikariConfig().apply {\n        jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"\n        driverClassName = "org.postgresql.Driver"\n        username = "user"\n        password = "password"\n        maximumPoolSize = 10\n    }\n    val dataSource = HikariDataSource(config)\n    Database.connect(dataSource)\n    println("تم الاتصال بـ PostgreSQL!")\n}
\n\n

تعريف الجدول والكيان

\n
import org.jetbrains.exposed.dao.id.IntIdTable\nimport org.jetbrains.exposed.dao.IntEntity\nimport org.jetbrains.exposed.dao.IntEntityClass\n\n// تعريف الجدول\nobject UsersTable : IntIdTable("users") {\n    val name = varchar("name", 100)\n    val email = varchar("email", 255).uniqueIndex()\n    val age = integer("age").default(18)\n}\n\n// تعريف الكيان (DAO)\nclass UserEntity(id: EntityID<Int>) : IntEntity(id) {\n    companion object : IntEntityClass<UserEntity>(UsersTable)\n\n    var name by UsersTable.name\n    var email by UsersTable.email\n    var age by UsersTable.age\n}
\n\n

عمليات CRUD

\n
fun performCRUD() {\n    transaction {\n        // إنشاء الجدول (إذا لم يكن موجودًا)\n        SchemaUtils.create(UsersTable)\n\n        // INSERT\n        val newUser = UserEntity.new {\n            name = "إيفان بيتروف"\n            email = "ivan@example.com"\n            age = 25\n        }\n        println("تم إنشاء المستخدم")                

المدونات

توصيات الكتب