آموزش دیتابیس Room

دسته بندی: آموزش پایگاه داده

در این صفحه می‌خوانیم:

دیتابیس Room چیست؟

Room یک لایه پایگاه ‌داده در بالای پایگاه‌ داده SQLite است. Room تسک‌های تکراری را که برای مدیریت با SQLiteOpenHelper استفاده می شود را کنترل می کند. Room  از DAO برای انتشار کوئری‌ها به پایگاه داده خود استفاده می‌کند.

دیتابیس Room یک روش جدید برای ایجاد پایگاه داده در اپلیکیشن های اندروید است که بسیار شبیه OrmLite عمل می‌کند.

در حقیقت، Room یک کتابخانه پایدار است که بخشی از کامپوننت‌های Android Architecture می‌باشد. این کتابخانه کار با آبجکت های SQLiteDatabase را در اپلیکیشن ساده‌تر می‌سازد، میزان کد boilerplate را کاهش می‌دهد و کوئری‌های SQL را در زمان کامپایل تایید می‌کند.

دیتابیس Room بخشی از Android Jetpack است. برای کسانی که نمی‌دانند Android Jetpack چیست باید گفت که Android Jetpack مجموعه‌ای از کامپوننت‌های  نرم افزاری اندروید است که توسعه اپلیکیشن‌های اندرویدی را آسان‌تر می‌کند. آنها به شما کمک خواهند کرد تا:

  • بهترین شیوه‌ها را دنبال کنید.
  • شما را از نوشتن کد boilerplate راحت می‌سازد.
  • تسک‌های پیچیده را ساده می‌کند تا بتوانید بر روی کدهای مهم‌تر تمرکز کنید.

کاربرد دیتابیس Room

  • تایید کوئری‌های SQL در زمان کامپایل. هر @Query و @Entity در زمان کامپایل بررسی می‌شوند که از اپلیکیشن شما در زمان اجرا در برابر خرابی ها محافظت می کند و نه تنها سینتکس ها بلکه جداول از دست رفته را نیز بررسی می‌کند. 
  • کد Boilerplate
  • به راحتی با سایر کامپوننت های معماری (مانند LiveData) ادغام می گردد.

مقایسه Room و SQLite

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

تفاوت بین SQLite و کتابخانه پایدار Room:

  • در مورد SQLite، هیچ تاییدی در زمان کامپایل از کوئری های SQLite خام وجود ندارد. اما در Room، تایید SQL در زمان کامپایل وجود دارد.
  • شما نیاز به مقدار زیادی از کد های boilerplate برای تبدیل کوئری های SQL به آبجکت های جاوا دارید. اما Room آبجکت های پایگاه داده را به آبجکت جاوا تبدیل می کند بدون اینکه از کد های boilerplate استفاده کند.
  • همانطور که طرح شما تغییر می کند باید کوئری های SQL را نیز به صورت دستی آپدیت کنید ولی Room این مشکل را نیز حل کرده است.
  • Room طراحی شده است تا با LiveData و RxJava برای مشاهده داده کار کند ولی SQLite این چنین نیست.

کامپوننت های Room DB

Room دارای 3 کامپوننت اصلی است:

  • Entity
  • Dao
  • Database

کامپوننت Entity

یک جدول در پایگاه داده را نشان می‌دهد. Room یک جدول برای هر کلاس ایجاد می کند که حاوی حاشیه‌نویسی @Entity است. فیلدها در کلاس مربوط به ستون‌ها در جدول است. بنابراین، کلاس های Entity، کلاس‌های مدل کوچک هستند که منطقی ندارند.

کامپوننت Dao

DAO ها مسئول تعریف متد هایی هستند که به پایگاه داده دسترسی دارند. در SQLite اولیه، از آبجکت‌های Cursor استفاده می‌کنیم. با Room، ما به همه کد مربوط به Cursor نیاز نداریم و می توانیم به سادگی با استفاده از حاشیه نویسی در کلاس Dao، کوئری‌های خود را تعریف کنیم.

کامپوننت Database

این شامل نگهدارنده پایگاه داده است و به عنوان نقطه دسترسی اصلی برای اتصال به داده های پایدار و رابطه ای اپلیکیشن شما عمل می کند. برای ایجاد یک پایگاه داده ما باید یک کلاس انتزاعی را که RoomDatabase را گسترش می دهد تعریف کنیم. این کلاس با @Database حاشیه نویسی شده است، Entity های موجود در پایگاه داده  و DAO هایی که به آنها دسترسی دارند را فهرست می کند.

پیاده سازی Room

  • ایجاد Entity
  • ایجاد DAO
  • ایجاد Room Database
  • راه اندازی پایگاه داده
  • وارد کردن داده
  • بازیابی داده

نمونه کدنویسی ذخیره داده با Room

در یک پروژه:

کاربردهای بسیار اساسی و تنظیم پایگاه داده Room از طریق مثال کاربر نشان داده شده است.

ایجاد پایگاه داده - AppDatabase 

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

appDatabase = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "database-name").build();

UserDao - رابط کاربری

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

فعال سازی سرویس در جایکه می خواهید از این پایگاه داده استفاده کنید:

private UserServiceImpl userService;
userService = new UserServiceImpl(LoginActivity.this);

ذخیره آبجکت ها در پایگاه داده

            User user = new User();
            user.setUid(new Random().nextInt());
            user.setEmail(mEmail);
            user.setPassword(mPassword);
            user.setFirstName("First Name");
            user.setLastName("Last Name");
            userService.insertAll(user);
            users = userService.getAll();

متد ساده برای دریافت پایگاه داده در background thread و نمایش داده در UI

private void getUsersFromDB() {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                users = userService.getAll();
                return null;
            }
            @Override
            protected void onPostExecute(Void agentsCount) {
                usersTextView.setText("Users \n\n " + users);
            }
        }.execute();

 

آیا این نوشته را دوست داشتید؟
pluralsight-android-room-fundamentals

آموزش اصول و مبانی Android Room


در این دوره آموزشی با یکی از پایگاه داده های اندروید به نام Room آشنا می شوید که به کمک آن می توانید به اپلیکیشن های android خود ذخیره سازی محلی اضافه...

1398/01/30 5438 بازدید