Implementasi Room Database

Room adalah layer basis data di atas basis data SQLite. Room mempermudah operasi-operasi yang ditangani oleh SQLiteOpenHelper. Hal-hal yang perlu diperhatikan ketika mengimplementasikan basis data room sebagai berikut:

  • Room menggunakan DAO untuk melakukan operasi query ke database

  • Secara default, untuk menghindari performa yang buruk pada UI, Room tidak memperbolehkan operasi database pada main thread. Dengan menggunakan LiveData dapat dilakukan query secara otomatis secara asynchronous.

  • Room melakukan pengecekan secara compile-time pada pernyataan SQLite. Jika terjadi pernyataan yang tidak valid, maka project tidak dapat dibuild.

  • Implementasi room harus merupakan turunan RoomDatabase.

  • Secara umum, hanya dibutuhkan satu buah instance database dalam sebuah aplikasi.

Sebagai referensi untuk mengimplementasikan Room database, silahkan ikuti langkah berikut.

  • Buatlah sebuah abstract class yang merupakan turunan dari RoomDatabase, simpan pada package db dan beri nama dengan AppDatabase.
public abstract class AppDatabase extends RoomDatabase {

}
  • Tambahkan annotation @Database, serta atur entitas yang ada dalam database beserta version schema. Dikarenakan pada entitas membutuhkan operasi konversi khusus, deklarasikan juga @TypeConverters dan set nilainya dengan DateConverter.
@Database(entities = {User.class, Note.class}, version = 1)
@TypeConverters(DateConverter.class)
public abstract class AppDatabase extends RoomDatabase {

}
  • Deklarasikan konstanta untuk nama database.
private static final String DB_NAME = "notes";
  • Room database umumnya dideklarasikan dalam bentuk singleton pattern, untuk mencegah terjadinya instaniasi berulang database pada waktu yang bersamaan. Ikuti langkah berikut untuk mendeklarasikan singleton pattern.
private static volatile  AppDatabase INSTANCE = null;

public static AppDatabase getInstance(final Context context) {
  synchronized (AppDatabase.class) {
    if (INSTANCE == null) {
      INSTANCE = Room
        .databaseBuilder(context.getApplicationContext(), AppDatabase.class, DB_NAME)
        .fallbackToDestructiveMigration()
        .build();
    }
  }

  return INSTANCE;
}
  • Tambahkan sebuah method untuk men-destroy instance
public static void destroyInstance() {
  INSTANCE = null;
}
  • Tambahkan dua buah atribut yang digunakan untuk mengakses implementasi DAO.
  • Atribut userDao() digunakan untuk operasi entitas User serta noteDao() digunakan untuk operasi entitas Note. Room akan meng-generate implementasi operasi CRUD secara otomatis berdasarkan annotation yang didefinisikan.
public abstract UserDao userDao();

public abstract NoteDao noteDao();

results matching ""

    No results matching ""