الكيانات وDAOs
حدّد الجداول وكائنات الوصول إلى البيانات
الكيانات وDAOs درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
ما هو Room؟
إن Room مكتبة لاستمرارية البيانات توفر طبقة تجريد فوق SQLite. وتتيح لك التعامل مع صفوف قاعدة البيانات ككائنات Kotlin مع استعلامات يتم التحقق منها وقت الترجمة.
لبنات Room الأساسية الثلاث
- Entity — جدول تمثّله فئة بيانات.
- DAO — كائن الوصول إلى البيانات، ويعرّف الاستعلامات.
- Database — يربط الكيانات وDAOs معًا (في الدرس التالي).
تعريف Entity
ضع التعليق التوضيحي @Entity على فئة بيانات. وتصبح كل خاصية عمودًا.
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val email: String
)المفاتيح الأساسية
يحتاج كل Entity إلى @PrimaryKey. وللسماح لـ Room بإنشاء المعرّفات تلقائيًا، استخدم autoGenerate.
@Entity
data class Note(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
val text: String
)تخصيص الأعمدة
استخدم @ColumnInfo لإعادة تسمية عمود أو تعيين نوع توافقه.
import androidx.room.ColumnInfo
@Entity
data class User(
@PrimaryKey val id: Int,
@ColumnInfo(name = "full_name")
val name: String
)ما هو DAO؟
إن DAO واجهة موضوعة عليها التعليمة التوضيحية @Dao. وتعلن عن الطرق التي يستخدمها تطبيقك لقراءة البيانات وكتابتها. تنشئ Room التطبيق نيابةً عنك.
الإدراج والتحديث والحذف
توفر Room تعليقات توضيحية ملائمة للعمليات الأساسية.
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User)
@Update
suspend fun update(user: User)
@Delete
suspend fun delete(user: User)
}استراتيجيات التعارض
عند إدراج صف موجود مسبقًا، اختر استراتيجية باستخدام onConflict.
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(user: User)استعلامات مخصصة باستخدام @Query
يتيح لك التعليق التوضيحي @Query كتابة SQL. وتقوم Room بالتحقق منه وقت الترجمة مقابل مخطط قاعدة البيانات.
@Query("SELECT * FROM users WHERE id = :id")
suspend fun getById(id: Int): User?لماذا نستخدم suspend Functions؟
يجب ألا تُنفّذ عمليات إدخال وإخراج قاعدة البيانات في الخيط الرئيسي. ويتيح تمييز طرق DAO بـ suspend لـ Room تشغيلها خارج الخيط الرئيسي عند استدعائها من coroutine، مما يمنع تقطّع واجهة المستخدم.
الأمان وقت الترجمة
من أهم فوائد Room: إذا أخطأت في كتابة اسم عمود داخل @Query، يفشل البناء. وهكذا تكتشف الأخطاء مبكرًا بدلًا من اكتشافها وقت التشغيل.
تحقق سريع
اختبر مدى فهمك للكيانات وDAOs.
مراجعة
لقد تعلّمت ما يلي:
- يعرّف
@Entityجدولًا باعتباره فئة بيانات تحتوي على@PrimaryKey. - يعلن
@Daoعن طرق الاستعلام والإدراج والتحديث والحذف. - يتم التحقق من SQL في
@Queryوقت الترجمة. - ينبغي أن تكون طرق DAO من النوع
suspendلتنفيذ عمليات الإدخال والإخراج خارج الخيط الرئيسي.
الأسئلة الشائعة
هل درس «الكيانات وDAOs» مجاني؟
نعم — نص درس «الكيانات وDAOs» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «الكيانات وDAOs»؟
حدّد الجداول وكائنات الوصول إلى البيانات تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «الكيانات وDAOs»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.