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

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

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

ابدأ الدورة

مقدمة: لماذا Kotlin هو خيار ممتاز للعمل مع قواعد البيانات

Kotlin، كونه لغة برمجة حديثة وموجزة، يوفر للمطورين أدوات قوية للتفاعل مع قواعد البيانات المختلفة. بفضل التوافق الكامل مع Java والنظام البيئي الخاص للمكتبات، يسمح Kotlin بكتابة كود آمن ومعبّر وفعال للعمل مع كل من قواعد البيانات العلائقية (SQL) وقواعد البيانات الموجهة للمستندات (NoSQL).

في هذه المقالة، سنشرح عمليًا كيفية توصيل وتنفيذ عمليات CRUD (إنشاء، قراءة، تحديث، حذف) لنظامين شائعين لإدارة قواعد البيانات: PostgreSQL (علائقية) و MongoDB (مستندية). ستتعلم كيفية إعداد المشروع، واستخدام المكتبات الحديثة (Exposed لـ SQL و KMongo لـ MongoDB) وكتابة كود نظيف مع مراعاة ميزات Kotlin.



1. العمل مع PostgreSQL في Kotlin: استخدام مكتبة Exposed

للعمل مع قواعد البيانات العلائقية في Kotlin، هناك عدة طرق. سننظر في مكتبة Exposed - وهي غلاف ORM خفيف الوزن مكتوب بلغة Kotlin، يوفر DSL (لغة خاصة بالمجال) آمنة من حيث الأنواع لصياغة استعلامات SQL.



1.1. توصيل التبعيات

أضف التبعيات التالية إلى ملف build.gradle.kts:

dependencies {    implementation("org.jetbrains.exposed:exposed-core:0.41.1")    implementation("org.jetbrains.exposed:exposed-dao:0.41.1")    implementation("org.jetbrains.exposed:exposed-jdbc:0.41.1")    implementation("org.postgresql:postgresql:42.6.0")    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")}


1.2. إنشاء جدول والاتصال بقاعدة البيانات

لنحدد كيان "المستخدم" والجدول المقابل في الكود:

import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transactionimport org.jetbrains.exposed.sql.SqlExpressionBuilder.eq

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

override val primaryKey = PrimaryKey(id)}

// Data class للمستخدمdata class User(val id: Int, val name: String, val email: String)

fun main() { // الاتصال بقاعدة البيانات Database.connect( url = "jdbc:postgresql://localhost:5432/mydb", driver = "org.postgresql.Driver", user = "postgres", password = "password" )

// إنشاء الجدول (إذا لم يكن موجودًا) transaction { SchemaUtils.create(Users) }}


1.3. عمليات CRUD

الآن سنقوم بتنفيذ العمليات الأساسية لإنشاء وقراءة وتحديث وحذف السجلات:

fun createUser(name: String, email: String): User {    return transaction {        val insertId = Users.insert {            it[Users.name] = name            it[Users.email] = email        } get Users.id

User( id = insertId, name = name, email = email ) }}

fun readUserById(id: Int): User? { return transaction { Users.selectAll().where { Users.id eq id } .singleOrNull() ?.let { row -> User( id = row[Users.id], name = row[Users.name], email = row[Users.email] ) } }}

fun updateUserEmail(id: Int, newEmail: String) { transaction { Users.update({ Users.id eq id }) { it[email] = newEmail } }}

fun deleteUser(id: Int) { transaction { Users.deleteWhere { Users.id eq id } }}

بفضل Exposed، يصبح كود Kotlin موجزًا وآمنًا من حيث الأنواع. يتم اكتشاف الأخطاء في أسماء الأعمدة أو الجداول في وقت الترجمة، مما يقلل من الأخطاء في وقت التشغيل.

المدونات

توصيات الكتب