Apakah nama annotation yang digunakan untuk memberi nama kolom pada entity?

Written By muliamaulana Monday, April 19, 2021


Jika teman - teman sebelumnya sudah pernah membuat aplikasi android yang memanfaatkan database lokal, pasti kalian udah ngga asing lagi dengan yang namanya SQLite. Lumayan ribet kan? kalian harus membuat kelas contract dan helper yang kodenya sendiri lumayan panjang dan sering bikin pusing.

Nah, kalian harus kenalan sama yang namanya Room Persistence Library.

Room Persistence Library adalah sebuah libary yang termasuk dalam Andoid Jetpack, yang memberikan abstraction layer pada SQLite untuk memungkinkan akses database yang lebih stabil sambil memanfaatkan kemampuan penuh SQLite. Library ini membantu membuat cache data aplikasi pada perangkat yang menjalanakan aplikasi. Cache ini berfungsi sebagai satu satunya sumber ketepatan aplikasi, memungkinkan pengguna melihat salinan informasi yang konsisten pada aplikasi, terlepas apakah pengguna terhubung internet atau tidak.

Ada 3 komponen utama pada Room:

  1. Database Class, merupakan class yang merepresentasikan object database. Pada kelas ini lah di definisikan entity (tabel) yang akan dibuat dan juga versi dari database itu sendiri.
  2. Data entities, merupakan data class yang merepresentasikan tabel ke dalam database
  3. Data Access Objects (DAOs), merupakan interface class yang berisi kumpulan method untuk mengkases database.

Aplikasi menggunakan Room database untuk mendapatkan DAO yang terkait dengan database tersebut. Kemudian aplikasi menggunakan methode yang terdapat di dalam DAO untuk mendapatkan entity dari database dan menyimpan kembali perubahan yang dibuat pada entity tersebut ke database. Terakhir, aplikasi akan menggunakan entity tersebut untuk mendapatkan dan menetapkan nilai yang terkaih dengan kolom tabel dalam database.

Sebagai ilustrasi, ketiga hubungan komponen tersebut bisa dilihat pada gambar 1.

Gambar 1. Diagram Arsitektur Room Database

Nah, Bagaimana cara menggunakan Room Database pada aplikasi android?

Untuk lebih memahami cara menggunakan Room Database, sebagai contoh kita akan membuat aplikasi Pencatat Utang, supaya kalian ngga lupa nagih ataupun bayar utang, gimana kalau kita namai aplikasinya TangUtang? Hahaha.

Penampakannnya akan seperti ini pada Gambar 2.

Gambar 2. Tampilan aplikasi


Disini aku menggunakan Kotlin, libarry AndroidX, Android Studio versi 4.1.3

Pertama-tama, plugin kotlin-kapt, dan dependency yang dibutuhkan untuk menggunakan Room pada file build.gradle (module: app)

Selanjutnya buat class entitiy, berupa data class dengan nama Debt.

Beberapa annotation yang terdapat pada class entitiy, antara lain:

  • @Entity, yang menyatakan bahwa class tersebut merupakan sebuah entity, di dalamnya kita bisa memberikan nama tabel.
  • @PrimaryKey, yang menyatakan kolom tersebut merupakan primary key.
  • @ColumnInfo, yang menyatakan nama kolom dan tipe data kolom tersebut.

Selanjutnya buat class databasenya dengan nama DebtRoomDatabase.

antotation @Database yang menyatakan bahwa class tersebut merupakan class room database, di dalamnya kita bisa memberikan enitity apa saja yang terdapat pada database tersebut, versi datase dan export schema. Apabila exportSchema bernilai false, maka database tersbut tidak akan melakukan mekanisme export schema apabila ada pembaruan versi databse. Oleh karena itu, pada databaseBuilder, kita perlu menambahkan fallbackToDestructiveMigration yang berfungsi untuk memungkinkan Room membuat tabel baru jika migration dari schema database versi sebelumnya tidak ditemukan. Kemudian, allowMainThreadQueries memungkinkan proses dijalankan di main thread. Karena secara default, Room menjalankan proses di thread tersendiri agar tidak mengganggu main thread.

Selanjutnya buat class inteface Dao dengan nama DebtDao.

Annotation @Dao menyatakan bahwa class tersebut merupakan class Dao. Kemudian anotation @Insert, @Update, @Delete, menyatakan fungsi insert, update dan delete. Sedangkan untuk membaca data, bisa menggunakan annotation @Query dengan paramater berupa query SQLite-nya untuk mendapatkan data yang kita inginkan.

Nah, kita sudah punya 3 komponen utama yang butuhkan untuk menggunakan lokal database. Selanjutnya, kita implementasikan ke activity. Disini kita hanya akan membuat dua activity, yaitu MainActivity berisi list daftar utang-piutang, dan CreateUpdateActivity untuk membuat atau pun mengubah data utang-piutang tesebut.

Kita juga bisa melihat database yang telah kita buat menggunakan Database Inspector pad Android Studio, seperti terlihat pada Gambar 3.

Gambar 3. Database Inspector Android Studio

Untuk code lengkapnya, bisa liat di halaman githubku berikut.

Tags Android

Melanjutkan series tutorial tentang membuat aplikasi database CRUD sederhana menggunakan Room library di Android dengan Android Studio. Setelah sebelumnya kita sudah belajar tentang bagaimana cara mengimport Room library di Android Studio project. Maka kali ini kita akan belajar membuat Entity, DAO dan Database menggunakan Room Persistence Library.

Entity, DAO dan Database pada Room

Oke walaupun pada postingan sebelumnya sudah dijelaskan, tapi di sini saya akan mengulang kembali definisi dari Entity, DAO dan Database pada Room.

Entity adalah ibaratnya sebuah tabel yang merepresentasikan object di dunia nyata. Pada tutorial CRUD ini kita akan memakai entity berupa sebuah barang.

DAO / Database Access Object, adalah sebuah kelas yang berisi methods yang digunakan untuk mengakses database.

Database adalah class yang berisi daftar DAO yang bisa dipakai, kelas ini juga berisi versi dari database yang kita gunakan pada aplikasi.

Sebelum kita lanjut, ada baiknya kalian membaca postingan-postingan di bawah ini terlebih dahulu :

Pre-Requisites :

Membuat Entity pada Room Database Android

Apabila kalian sudah selesai mempraktekkan postingan di atas, maka buka project Android Studio baru kalian. Pertama-tama kita akan membuat class Entity nya terlebih dahulu. Karena pada aplikasi CRUD inventaris sederhana ini object yang ingin kita simpan adalah barang, maka kita akan membuat tabel dari object barang tersebut. Dengan atribut-atributnya antara lain, id barang (primary key), nama barang, merk barang dan harga barang.

Maka buat class Barang.java sebagai entity, dan isikan kode berikut :

Barang.java

package co.twoh.roomtutorial.model; import android.arch.persistence.room.ColumnInfo; import android.arch.persistence.room.Entity; import android.arch.persistence.room.PrimaryKey; import java.io.Serializable; /** * Created by Herdi_WORK on 21.01.18. */ @Entity(tableName = "tbarang") public class Barang implements Serializable{ @PrimaryKey(autoGenerate = true) public int barangId; @ColumnInfo(name = "nama_barang") public String namaBarang; @ColumnInfo(name = "merk_barang") public String merkBarang; @ColumnInfo(name = "harga_barang") public String hargaBarang; public int getBarangId() { return barangId; } public void setBarangId(int barangId) { this.barangId = barangId; } public String getNamaBarang() { return namaBarang; } public String getMerkBarang() { return merkBarang; } public void setNamaBarang(String namaBarang) { this.namaBarang = namaBarang; } public void setMerkBarang(String merkBarang) { this.merkBarang = merkBarang; } public String getHargaBarang() { return hargaBarang; } public void setHargaBarang(String hargaBarang) { this.hargaBarang = hargaBarang; } }

Bisa dilihat pada codingan di atas class Entity hampir sama bentuknya dengan object Model Java pada umumnya. Class Barang di atas mempunyai atribut, dan juga mempunyai getter dan setter. Bedanya pada class di atas, terdapat annotation @Entity yang diikuti dengan nama tabel. Yup karena pada dasarnya class Entity ini merepresentasikan tabel barang pada database yang akan digunakan untuk menyimpan data barang.

Kemudian atribut-atribut pada entity juga bisa kita define kegunaannya layaknya mendefine nama kolom pada sebuah tabel di database. Atribut barangId di atas kita define sebagai primary key dan atribut namaBarang, merkBarang, dan hargaBarang kita define sebagai nama kolom biasa.

Membuat Data Access Object (DAO) pada Room Database Android

Setelah itu, kita akan membuat interface DAO nya atau Data Access Object. Interface ini berisi daftar method-method yang akan kita pakai untuk mengakses tabel barang di database seperti method insert, read, update, delete, select dan semacamnya.

Buatlah sebuah file .java bernama BarangDAO dan masukkan kode seperti di bawah ini :

BarangDAO.java

package co.twoh.roomtutorial.data; import android.arch.persistence.room.Dao; import co.twoh.roomtutorial.model.Barang; /** * Created by Herdi_WORK on 21.01.18. */ @Dao public interface BarangDAO { // stay tune di next tutorial :D }

Bisa dilihat pada codingan di atas, interface DAO bentuknya seperti interface Java biasa hanya bedanya kita tambahkan annotation @Dao yang merupakan bawaan dari Room Database Library. Untuk isinya akan kita kosongkan terlebih dahulu dan akan dibahas pada tutorial selanjutnya :D.

Jika kita sudah membuat DAO nya. Maka terakhir kita akan membuat class Database Room itu sendiri.

Membuat Abstract Class Database pada Room Android

Class ini semacam gateway satu pintu yang merepresentasikan object Room Database itu sendiri dan berisi daftar dari DAO yang bisa kita akses. Sifatnya adalah abstract, dimana class ini hanya berisi header dari suatu method dan tidak ada body method nya. Kodingannya kira-kira seperti di bawah ini, dengan nama kelas nya adalah AppDatabase.java :

package co.twoh.roomtutorial.data.factory; import android.arch.persistence.room.Database; import android.arch.persistence.room.RoomDatabase; import co.twoh.roomtutorial.data.BarangDAO; import co.twoh.roomtutorial.model.Barang; /** * Created by Herdi_WORK on 21.01.18. */ @Database(entities = {Barang.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract BarangDAO barangDAO(); }

Di situ kita bisa lihat abstract class AppDatabase mempunyai annotation @Database yang juga bawaan dari Room Database itu sendiri. Class AppDatabase meng-extends class RoomDatabase, dan pada annotation @Database di atas kita bisa mendefinisikan database versionnya dan juga entity2 yang akan kita pakai. Karena entity di app ini hanya satu (Barang), maka kita define entities = {Barang.class} seperti di atas.

Isi dari class AppDatabase adalah method untuk mengakses interface BarangDAO() yang sudah kita buat sebelumnya.

Mengakses Room Database

Jika kita sudah membuat tiga komponen utama Room Database library, maka sekarang untuk cara pengaksesannya. Caranya lumayan sederhana, seperti contoh di bawah :

private AppDatabase db; db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "barangdb").build(); db.barangDAO().insertBarang(barang);

Kita hanya perlu meng-instantiate object AppDatabase dengan cara memanggil Room.databaseBuilder. Di sana kita akan memasukkan “barangdb” sebagai nama file database nya. Nama itu sifatnya constant sebagai identitas database, sehingga harus selalu menggunakan nama yang sama setiap kali kita ingin memanggil database tersebut.

Setelah kita mendapatkan object db, kita akan dapat akses ke barangDAO() dan dari situ kita tinggal memilih operasi apa saja yang ingin kita lakukan di database, seperti contoh di atas kita memanggil method insertBarang() pada barangDAO().

That’s all. Simple bukan, untuk tahap pertama ini kalian hanya perlu membuat tiga buah komponen Room Database library seperti di atas. Untuk bagaimana step by step membuat fungsionalitas CRUD nya, akan saya bahas di tutorial selanjutnya.

Semoga berguna, untuk source code-nya, kalian bisa download di GitHub saya. Jangan lupa untuk follow dan star juga ya. 😀

Jangan sungkan untuk bertanya apabila ada yang kurang mengerti, silahkan tulis lewat komentar di bawah. 😉

Video yang berhubungan

Postingan terbaru

LIHAT SEMUA