روم در اندروید – آشنایی و کار با کتابخانه Room در اندروید

روم در اندروید - آشنایی و کار با کتابخانه Room در اندروید

اگر خواسته باشید در اندروید با دیتابیس کار کنید، قطعا با کتابخانه Room مواحه شده اید و حداقل از نوع کاربرد این کتابخانه اطلاع دارید، در این مقاله از نوری آکادمی قصد دارم در مورد روم در اندروید مطالب و نکات کامل و کاربردی را در اختیار شما قرار دهم، تا انتهای این مقاله با من همراه باشید.

روم در اندروید

دیتابیس Room یک کتابخانه قدرتمند در Android Jetpack است که فرآیند کار با پایگاه های داده SQLite را ساده می کند، کتابخانه روم کار با پایگاه داده در اندروید را بسیار ساده تر کرده است و کاری کرده است که به جای گرفتار شدن و صرف زمان برای پیاده سازی بیس پایگاه داده، تمرکز توسعه دهنده بر روی منطق برنامه باشد و از هدر رفتن وقت جلوگیری شود؛ در این مقاله به بررسی این موضوع می پردازیم که روم چیست، چرا مفید است و چگونه از آن در Kotlin استفاده کنیم، با من همراه باشید.

روم در اندروید

SQLite چیست؟

قبل از این که به سراغ اصل مطلب برویم، قصد دارم توضیح کامل و مختصری در مورد SQLite در اندروید ارائه بدهم، در ادامه توضیحات مربوط به این مورد را داریم.

SQLite یک سیستم مدیریت پایگاه داده رابطه‌ ای منبع باز محبوب (RDBMS) است که به طور گسترده در برنامه‌ های مختلف از جمله برنامه‌ های موبایل و دسکتاپ استفاده می‌ شود، SQLite یک موتور پایگاه داده مستقل، بدون سرور و تراکنشی است که نیازی به پیکربندی یا مدیریت ندارد.

یکی از مزایای کلیدی SQLite سادگی و سهولت استفاده از آن است، داده ها را در یک فایل ذخیره می کند و اشتراک گذاری، بکاپ گیری و کپی را آسان می کند، همچنین حافظه و منابع CPU بسیار کمی مصرف می کند، که همین چیز ها آن را به گزینه ای ایده آل برای استفاده در دستگاه های تلفن همراه و سایر سیستم های با منابع محدود تبدیل می کند.

SQLite همچنین بسیار کارآمد است و طیف وسیعی از ویژگی‌ ها را ارائه می‌ کند، این سیستم از SQL، زبان محبوبی که برای مدیریت پایگاه های داده رابطه ای استفاده می شود، پشتیبانی می کند و با انواع زبان های برنامه نویسی سازگار است که یکی از این زبان ها، زبان برنامه نویسی کاتلین است.

علاوه بر این، SQLite پشتیبانی داخلی برای رمز گذاری و سایر ویژگی‌ های امنیتی ارائه می‌ کند و آن را به انتخابی امن برای برنامه‌ هایی که به سطوح بالایی از امنیت نیاز دارند تبدیل می‌کند.

به طور کلی، SQLite یک انتخاب محبوب و قدرتمند برای توسعه دهندگانی است که نیاز به یک پایگاه داده که استفاده آسان و کارآمد داشته باشد دارند.

SQLite چیست

کتابخانه Room چیست؟

کتابخانه روم یک کتابخانه ی Object-Relational Mapping (ORM) است که در واقع یک لایه انتزاعی را بر روی SQLite که یکی از رایج ترین پایگاه داده های مورد استفاده در دستگاه های تلفن همراه است ارائه می دهد، مجموعه ای از انوتیشن ها و ابزار هایی را فراهم می کند که این ابزار ها می توانند به توسعه دهندگان کمک کنند تا به روشی راحت تر و ساده تر با پایگاه داده SQLite کار کنند و از آن استفاده کنند.

همچنین شایان ذکر است که کتابخانه روم در اندروید می تواند زمان کامپایل SQL ها و احتمال خطا های SQL در زمان اجرای برنامه را کاهش دهد.

پس تا به اینجای مقاله روم در اندروید متوجه این شدیم که روم یک کتابخانه در اندروید است که با کمک آن می توانیم راحت تر و ساده تر با پایگاه داده SQLite کار کنیم و از هدر رفتن وقت برای پیاده سازی بیس پایگاه داده نجات پیدا کنیم و تنها فقط بر روی منطق و هدف برنامه تمرکز کنیم.

چرا از روم در اندروید استفاده کنیم؟

کار با SQLite می تواند پیچیده و خسته کننده باشد، به خصوص زمانی که با کوئری های پیچیده و مجموعه دیتا های بزرگ سروکار داریم، کتابخانه Room با ارائه یک API بصری و انعطاف پذیر که بسیاری از جزئیات پیاده سازی را انتزاعی می کند، فرآیند کار با پایگاه داده SQLite را ساده می کند، کتابخانه روم در اندروید همچنین امکان Type-Safe Queries را فراهم می‌کند، به این معنی که می‌توانید از به وجود آمدن خطاهای SQL در زمان اجرا جلوگیری کنید و اطمینان حاصل کنید که درخواست‌ های شما در زمان کامپایل درست هستند و اگر مشکلی باشد قبل از اجرا حل شده است.

یکی دیگر از مزایای استفاده از روم در اندروید این است که به طور خودکار کد های لازم را برای مدیریت دیتابیس تولید می کند که باعث صرفه جویی در زمان و تلاش توسعه دهندگان می شود، کتابخانه روم همچنین ویژگی های قدرتمندی مثل Reactive Queries و پشتیبانی از LiveData را ارائه می دهد که ساخت اپلیکیشن های واکنش گرا را آسان می کند.

 

نحوه استفاده از روم در اندروید

برای بکارگیری کتابخانه روم در کاتلین، ابتدا باید وابستگی های لازم (Dependencies) را به پروژه خود اضافه کنید، این کار را می توان با افزودن خطوط زیر به فایل build.gradle در اپلیکیشن انجام داد:

dependencies {
    def room_version = "2.5.1"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
}

همچنین می توانید با مراجعه به سایت رسمی اندروید در بخش روم، به اطلاعات بیشتری در زمینه ی اضافه کردن نیازمندی های روم در اندروید دسترسی داشته باشید.

پس از این که نیازمندی مربوط به کتابخانه روم در اندروید را به پروژه خودتان اضافه کردید، می بایست به سراغ تعریف پایگاه داده در پروژه بروید، در ادامه طریقه تعریف و کار با آن را داریم.

1- ابتدا یک entity میسازیم، entity درواقع نقش همان table را دارد که دیتا را در خودش ذخیره و نگهداری میکند.
برای این کار یک data class می سازیم و با کمک انوتیشن @Entity تعیین می کنیم که کلاس مورد نظر یک entity است.

@Entity(tableName = "نام دلخواه")
data class User(
    @PrimaryKey val id: Int,
    val firstName: String,
    val lastName: String
)

در مثال بالا به خوبی مشاهده می کنید که بعد از نوشتن @Entity باید در () نام entity را بنویسیم و سپس در ادامه سطر های جدول را می سازیم.

  • با استفاده از انوتیشن @PrimaryKey می توانیم تعیین کنیم که سطر مورد نظر مقادیر یونیک داشته باشد ( اگر قصد داشته باشیم تا مقادیر بصورت خودکار ساخته شود می توانیم به شکل زیر عمل کنیم )
    @Entity(tableName = "نام دلخواه")
    data class User(
        @PrimaryKey(autoGenerate = true) val id: Int,
        val firstName: String,
        val lastName: String
    )
  • اگر به شکل بالا سطر ها ساخته شوند، نام هر سطر، نام همان متغیر خواهد بود، اما اگر بخواهیم بصورت مجزا نام تعریف کنیم، می بایست از انوتیشن @SerializedName() استفاده کنیم.

2- بعد از ساخت entity باید به سراغ ساخت Dao برویم، این برای انجام عملیات ها و کوئری ها به کار می آید، یک interface می سازیم و از آن به عنوان Dao استفاده می کنیم.

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): List<User>
}

در مثال بالا با کوئری select توانستیم دیتای کاربرانی که در کلاس User قرار داشتند را دریافت کنیم.

3- پس از این که مراحل بالا به درستی طی شد، به سراغ ساخت کلاس دیتابیس می رویم، برای ساخت این کلاس باید از انوتیشن @Database استفاده کنیم که به شکل زیر انجام می شود.

@Database(entities = [User::class], version = 1)
abstract class MyAppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

توجه داشته باشید که کلاس دیتابیس باید abstract class باشد، بعد از نوشتن انوتیشن Database می بایست در اولین ورودی این انوتیشن، جداول مربوطه را در داخل [] تعیین کنیم و در ورودی دوم هم می بایست ورژن تعیین کنیم که از جنس Int است.

نکته مهم: مقدار این ورودی، بعد از هر تغییر کوچک در entity می بایست شامل افزایش یک عدد شود.

در بدنه ی کلاس، Dao را تعریف می کنیم که نحوه تعریف آن را هم می توانید در مثال بالا مشاهده کنید.

بعد از انجام همه ی این کار ها، نوبت به تعریف نهایی دیتابیس می رسد، برای این کار می توانید مانند زیر عمل کنید:

Room.databaseBuilder(this, UserDatabase::class.java, "UserDb")
    .build()

به دلیل گستردگی و نیاز به توضیحات بیشتر و کامل تر، امکان این که تمامی مطالب به صورت کامل و دقیق در این مقاله آموزش داده شوند نیست، اما پیشنهاد می کنم اگر دوست دارید در مورد روم در اندروید و بسیاری از مفاهیم مهم و کاربردی کاتلین بیشتر یاد بگیرید، به دوره نخبگان معماری اندروید نوری آکادمی مراجعه کنید.

از این که تا به این جای مقاله روم در اندروید با من همراه بودید از شما سپاس گزارم❤.

دیدگاه‌ها ۰
ارسال دیدگاه جدید