Membuat Aplikasi CRUD Sederhana dengan Room Persistence Library

Sebagian besar teman-teman mungkin sudah pernah membuat aplikasi Android yang memanfaatkan database lokal dengan menggunakan SQLite. Cukup ribet bukan? Untuk menggunakan SQLite, kita perlu menyediakan kelas contract dan helper yang kode-nya bisa sangat panjang dan bikin pusing 😂. Nah, disini kita menggunakan cara yang lebih simpel yaitu dengan memanfaatkan Room Persistence Library.

Apa itu Room Persistence Library?

Dikutip dari situs Android Developers, Room Persistence Library adalah sebuah library yang merupakan bagian dari Android Jetpack yang menyediakan abstraction layer diatas SQLite yang memungkinkan pengaksesan database dengan lebih mudah namun tetap memanfaatkan full power dari SQLite.

Yaa intinya sih, dengan menggunakan Room, kita dapat mengakses database lokal dengan lebih mudah namun tetap powerful.

Terdapat 3 komponen utama pada Room Persistence Library, diantaranya :

  • Database : kelas yang merepresentasikan objek database, pada kelas ini didefinisikan tabel (entity) yang akan dibuat serta versi database.
  • Entity : kelas yang merepresentasikan tabel dalam database.
  • DAO (Data Access Object) : kelas yang berisi kumpulan method untuk mengakses database.

Ilustrasinya seperti gambar di bawah ini.

Room architecture diagram

Udah paham kan? Kalau gitu, yuk kita langsung hajar ngoding!

Let’s Code!

Jadi, kita akan bikin aplikasi notes sederhana yang tentunya menggunakan Room untuk penyimpanannya. Hasilnya nanti akan seperti ini.

Note app.

Disini saya menggunakan bahasa Kotlin dan library AndroidX.

Oke, pertama-tama, tambahkan plugin kapt Kotlin dan dependency yang dibutuhkan untuk menggunakan Room pada file build.gradle (module: app).

Selanjutnya buat kelas Entity, yaitu berupa data class dengan nama Note.

terdapat beberapa annotation yang digunakan pada kelas entity, yaitu :

@Entity mengindikasikan bahwa kelas tersebut merupakan entity, didalamnya kita juga dapat memberi nama tabel.

@ColumnInfo untuk memberikan nama kolom.

@PrimaryKey mengindikasikan bahwa kolom tersebut adalah primary key.

Berikutnya kita buat kelas Database-nya dengan nama NoteRoomDatabase.

annotation @Database mengindikasikan bahwa kelas tersebut merupakan kelas Room Database, serta mendefinisikan entity, versi database. Disini exportSchema bernilai false karena pada projek ini kita tidak akan melakukan mekanisme export schema jika ada pembaharuan versi database, oleh karena itu, pada databaseBuilder ditambahkan .fallbackToDestructiveMigration yang berfungsi untuk memugkinkan Room membuat tabel baru jika migration dari schema database versi sebelumnya tidak ditemukan. Kemudian .allowMainThreadQueries berfungsi untuk memungkinkan proses dijalankan di main thread, karena secara default, Room menjalankan tugasnya di thread tersendiri agar tidak mengganggu main thread, untuk itu perlu menggunakan coroutine. Namun, demi menjaga tutorial ini agar tetap singkat dan teman-teman tidak bosan membacanya, maka kita gunakan main thread saja, oke?😜

EHEHE

Oke, lanjut! Langkah selanjutnya adalah membuat kelas Dao yaitu berupa interface dengan nama NoteDao.

serupa dengan kelas-kelas sebelumnya, pada interface ini Room juga menggunakan annotation untuk mengindikasikan jenis kelasnya, yaitu dengan @Dao. Untuk fungsi insert, update, dan delete telah disediakan annotation @insert, @update, dan @delete, sedangkan untuk fungsi read, kita dapat menggunakan @Query dengan disertakan query SQLite-nya pada parameter.

Nah, sampai sini, kita sudah menyelesaikan seluruh komponen yang dibutuhkan untuk pengaksesan database lokal. Gimana? Room asik banget kan?👌

Selanjutnya tinggal diimplementasikan di activity. Untuk activity, teman-teman bebas berkreasi sendiri. Sebagai contoh, disini saya menggunakan dua activity yaitu MainActivity yang menampilkan list daftar note dengan recycler view, serta EditActivity untuk membuat note baru ataupun meng-edit note.

--

--