Pernah gak kalian membuka aplikasi Instagram trus koneksi internetnya terputus?, kamu tutup aplikasinya dan kamu buka lagi dalam keadaan tetap tidak terkoneksi ke internet. Postingannya masih tampil di aplikasi instagramnya kan?. Yap itu karena datanya di simpan di database lokal aplikasi tersebut.
advertisement
Pada postingan kali ini kita akan belajar bagaimana membuat database lokal dengan memanfaatkan Library Room Persistence dari google sendiri. Room membantu menjembatani akses SQLite dengan melakukan pendekatan terhadap fungsi-fungsi Sqlite secara optimal. Room sangat cocok untuk digunakan untuk aplikasi android frontend karena akan sangat memudahkan dalam membangun sistem cache pada aplikasi. Oke kita langsung saja ke tutorialnya.
Instalasi
Buka app build.gradle pada project android kalian dan di bagian dependency silahkan masukan code berikut.
dependencies {
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:$room_version"
// optional - RxJava support for Room
implementation "androidx.room:room-rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:$room_version"
// Test helpers
testImplementation "androidx.room:room-testing:$room_version"
}
Kemudian tinggal kalian sinkronisasi untuk mendownload packagenya.
Implementasi
Untuk membangun database menggunakan room ada tiga komponen utama yang harus kalian buat.
- Entity adalah class model yang mereresantikan table database, contoh codenya sebagai berikut
@Entity data class User( @PrimaryKey val uid: Int, @ColumnInfo(name = "first_name") val firstName: String?, @ColumnInfo(name = "last_name") val lastName: String? )
Jika tablenya berelasi kalian bisa membuat class entitynya seperti ini
data class Address( val street: String?, val state: String?, val city: String?, @ColumnInfo(name = "post_code") val postCode: Int ) @Entity data class User( @PrimaryKey val id: Int, val firstName: String?, @Embedded val address: Address? )
Penjelasan
1. @Entity adalah anotasi untuk menandakan bahwa class tersebut adalah class entity.
2. @PrimaryKey adalah anotiasi untuk menandakan bahwa variable dibawahnya adalah primary key.
3. @ColumnInfo adalah anotasi opsional, jika tidak di tulis maka secara otomatis nama kolom dari table database sesuai dengan nama variable di bawahnya. - Dao adalah class interface yang digunakan untuk mengimplementasikan query, contoh codenya sebagai berikut
@Dao interface UserDao { @Query("SELECT * FROM user") fun getAll(): List<User> @Query("SELECT * FROM user WHERE uid IN (:userIds)") fun loadAllByIds(userIds: IntArray): List<User> @Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1") fun findByName(first: String, last: String): User @Insert fun insertAll(vararg users: User) @Delete fun delete(user: User) }
Penjelasan
1. @Dao adalah anotasi yang menandakan bahwa class interface tersebut adalah komponen Dao.
2. @Query adalah anotasi yang digunakan untuk membuat sebuah query dan diimlementasikan pada methode yang ada dibawahnya
3. @Insert adalah anotasi yang menandakan bahwa methode yang ada dibawahnya berfungsi untuk menginsert data
4. @Delete adalah anotasi yang menandakan bahwa methode yang berada dibawahnya berfungsi untuk mendelete data - Database adalah class abstract yang berfungsi untuk menghubungkan antara aplikasi dengan database Sqlitenya. Contoh codenya sebagai berikut.
@Database(entities = arrayOf(User::class), version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }
Penjelasan
Didalam anotasi @Database kita harus menyertakan entity-entity dari class entity yang sudah kita buat. Kemudian kita buat methode abstract dengan return type yaitu class interface Dao nya.
Jika tiga komponen diatas sudah kalian buat sekarang kita tinggal kita gunakan dengan membuat intace databsenya. Code sebagai berikut.val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ).build()
Mungkin itu saja yang bisa saya bagikan kepada sobat sekalian tentang dasar dasar menyimpan data menggunakan Room. Untuk lebih jelasnya kalian bisa langsung mempelajarinya di sini.
advertisement
Sekian dulu tutorial kali ini, terimakasih sudah mampir. Jangan lupa di share jika kalian merasa artikel ini bermanfaat, kalau ada pertanyaan silahkan tulis di kolom komentar. Good Luck!
Silahkan berkomentar dengan baik dan bijak!