Kotlin وPostgreSQL: كتابة الواجهة الخلفية أسرع مما تظن

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

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

ابدأ الدورة

Kotlin وPostgreSQL: ثنائي غير متوقع لواجهتك الخلفية

\n\n

عندما يتعلق الأمر بتطوير الواجهة الخلفية الحديثة، نجد Kotlin وPostgreSQL يظهران معًا في الجملة نفسها بشكل متزايد. وهذا ليس من قبيل الصدفة. يجلب Kotlin إلى عالم JVM الإيجاز والميزات الوظيفية، بينما يظل PostgreSQL معيارًا للموثوقية والمرونة بين قواعد البيانات العلائقية. في هذا الدليل، سنشرح كيفية التوفيق بين هاتين التقنيتين، ونكتب كودًا حقيقيًا، ونستعرض أفضل الممارسات.

\n\n

سواء كنت على دراية بـ Kotlin للواجهة الخلفية أو بدأت للتو - ستمنحك هذه المقالة خطة عمل واضحة. هيا بنا!

\n\n

لماذا Kotlin + PostgreSQL رائعان؟

\n\n

Kotlin هي لغة تجعلك تقع في حبها من أول سطور. إنها متوافقة مع Java، لكنها في الوقت نفسه تتخلص من أطنان من الكود المتكرر. وPostgreSQL ليس مجرد "قاعدة بيانات أخرى". إنها أداة قوية تدعم JSON، والبحث النصي الكامل، والدوال النافذة، والإضافات مثل PostGIS.

\n\n

معًا، يقدمان:

\n
    \n
  • أمان من القيم الخالية على مستوى الأنواع - يحميك Kotlin من أخطاء المؤشر الفارغ (NPE) عند العمل مع نتائج الاستعلامات.
  • \n
  • عدم التزامن خارج الصندوق - تناسب coroutines في Kotlin العمل مع مجمعات الاتصالات بشكل مثالي.
  • \n
  • DSL لـ SQL - تتيح مكتبات مثل Exposed كتابة الاستعلامات كجزء من اللغة.
  • \n
  • الأداء - يوفر JVM مع مشغل JDBC المحسّن سرعة ممتازة.
  • \n
\n\n

تجهيز البيئة: ما يجب تثبيته

\n\n

قبل كتابة الكود، تأكد من أن لديك:

\n
    \n
  • JDK 17+ مثبتًا
  • \n
  • IntelliJ IDEA (النسخة المجتمعية كافية)
  • \n
  • PostgreSQL 14+ (يمكن عبر Docker: docker run --name pg -e POSTGRES_PASSWORD=pass -p 5432:5432 -d postgres)
  • \n
  • فهم أساسي لـ SQL
  • \n
\n\n

أنشئ مشروع Gradle جديدًا في IntelliJ. في ملف build.gradle.kts، أضف التبعيات:

\n\n
dependencies {\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    implementation("org.postgresql:postgresql:42.7.1")\n    implementation("com.zaxxer:HikariCP:5.1.0")\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")\n}
\n\n

الاتصال بـ PostgreSQL عبر HikariCP

\n\n

للعمل مع PostgreSQL في Kotlin، نحتاج إلى مجمع اتصالات. HikariCP هو المعيار الفعلي. إنه سريع وخفيف ويمكن تهيئته ببضعة أسطر.

\n\n

لننشئ كلاس DatabaseFactory:

\n\n
import com.zaxxer.hikari.HikariConfig\nimport com.zaxxer.hikari.HikariDataSource\nimport org.jetbrains.exposed.sql.Database\n\nobject DatabaseFactory {\n    fun init() {\n        val config = HikariConfig().apply {\n            jdbcUrl = "jdbc:postgresql://localhost:5432/yourdb"\n            driverClassName = "org.postgresql.Driver"\n            username = "postgres"\n            password = "pass"\n            maximumPoolSize = 10\n            isAutoCommit = false\n            transactionIsolation = "TRANSACTION_REPEATABLE_READ"\n        }\n\n        val dataSource = HikariDataSource(config)\n        Database.connect(dataSource)\n    }\n}
\n\n

لاحظ: isAutoCommit = false يمنحنا التحكم في المعاملات. هذا مهم لتناسق البيانات.

\n\n

إنشاء الجداول باستخدام Exposed ORM

\n\n

Exposed هو ORM خفيف الوزن لـ Kotlin، لا يفرض قواعده الخاصة. يمكنك العمل مع DSL أو كائنات DAO.

\n\n

لنحدد نموذج المستخدم:

\n\n
import org.jetbrains.exposed.sql.Table\n\nobject Users : Table("users") {\n    val id = integer("id").autoIncrement()\n    val name = varchar("name", 100)\n    val email = varchar("email", 255).uniqueIndex()\n    val                

المدونات

توصيات الكتب