Cara Menggunakan Library Room Android

Pada tutorial kali ini saya akan bahas cara menggunakan library room untuk aplikasi android.

Secara garis besar pembahasan kita kali ini adalah sebuah urusan pengolahan database di aplikasi android.

Apa itu Room?

Room adalah sebuah library android yang di kembangkan oleh google untuk mengatasi masalah penggolahan database sqlite pada android.

Ada banyak sekali library yang di kembangkan oleh pihak ketiga untuk mengatasi urusan kita dengan database sqlite.

Akan tetapi dari berbagaimacam library yang ada diluaran sana room adalah termasuk library yang saya rekomendasikan karena di tangani oleh google.

Kelebihanya adalah karena ditangani oleh orang google yang mana mereka itu di bayar untuk melakukan proses pengembangan library ini maka dengan itu library ini di kerjakan dengan serius.

Karena dikerjakan dengan serius library ini secara kualitas bagus, dan juga sangat cocok untuk android karena di kembangkan oleh google yang membuat ekosistem untuk android.

Kenapa pakai room?

Well, kenapa kita harus pakai library ini adalah karena beberapa hal berikut ini.

Yang pertama karena dikembangkan oleh google yang mana apa yang mereka kerjakan pasti sesuai dengan kubutuhan sistem operasi android.

Yang kedua adalah library ini memiliki tiga komponen yaitu runtime, compiler dan test.

Yang mana dengan begitu akan memudahkan kita jika bekerja dengan tim, atau jika kamu gunakan untuk unit testing.

Selanjutnya library room ini adalah salah satu bagian dari android jetpack yang mana jika kamu menggunakan Architecture Component maka akan sangat mudah untuk integrasinya.

Bagaimana Cara Menggunakan Room Library?

Sebelum kita masuk langsung coding, kita perlu memahami beberapa hal tentang room ini.

Room ini memiliki 3 dependecy untuk digunakan berikut ini penjelasanya :

  1. Room Runtime yang digunakan sebagai core dari library yang meliputi migration dan yang lain – lainya yang berhubungan dengan sqlite.
    implementation "android.arch.persistence.room:runtime:1.1.1"
  2. Room Compiler berfungsi untuk mengurusi pembuatan migration table, menggenerate code untuk prosess pengolahan data seperti, query, insert, update, dan delete.
    annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
  3. Room Testing berfungsi untuk digunakan sebagai database testing, cocok untuk kamu yang ingin melakukan TDD, BDD atau unit testing yang lainya.
    androidTestImplementation "android.arch.persistence.room:compiler:1.1.1"

Untuk kamu yang tidak melakukan unit testing bisa menggunakan runtime dan compiler saja.

Contoh Menggunakan Library Room

Library room memilki tiga komponen yang perlu di pahami sebelum menggunakanya, berikut ini adalah komponen – komponenya.

  1. Room Database, adalah basik dari operasi database yang akan dilakukan seperti membuat table migration, membuat versi database operasi dan CRUD.
  2. Entity, adalah sebuah model dari sebuah table database yang akan di gunakan.
  3. Dao, sebuah interface yang akan digunakan untuk boilerplate yang akan di buat oleh room compiler, jadi nanti operasi seperti CRUD ini berada pada interface DAO.

Mari kita sekarang sudahi bicara masalah teori dan masuk ke contoh bagaiman menggunakan library ini.

Sebelumnya pastikan dependency room sudah di import.

implementation "android.arch.persistence.room:runtime:1.1.1"
annotationProcessor "android.arch.persistence.room:compiler:1.1.1"

Sekarang buat class App dan extends class Application, yang mana ini nanti kita gunakan untuk membuat static instance dari room databasenya.

public class App extends Application{

    public static AppDatabase database;

    @Override
    public void onCreate() {
        super.onCreate();
        database = Room.databaseBuilder(this, AppDatabase.class, "product-db").build();
    }
}

Selanjutnya buat class AppDatabase yang mana ini kita gunakan untuk membuat nama database, membuat table migration, versi database dan untuk menggerate boilerplate untuk operasi CRUD.

@Database(entities = {Product.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase{
    public abstract ProductDao getProductDao();
}

Selanjutnya buat sebuah Entity class atau model untuk mengkases data dari table yang akan kita gunakan.

@Entity
public class Product {
    @PrimaryKey
    public long id;

    @ColumnInfo(name = "name")
    public String name;

    @ColumnInfo(name = "image")
    public String image;

    @ColumnInfo(name = "price")
    public int price;
}

Sekarang kita buat interface DAO yang mana ini digunakan sebagai tempat untuk menggenerate boilerplate dari query – query yang akan kita gunakan pada aplikasi kita, misalnya disini digunakan untuk operasi CRUD.

@Dao
public interface ProductDao {
    @Query("SELECT * FROM product")
    List<Product> getAll();

    @Query("SELECT * FROM product WHERE id = :id")
    Product getAll(long id);

    @Insert
    void create(Product product);

    @Update
    void update(Product product);

    @Delete
    void delete(Product product);
}

Sekarang kita bisa mengaksess list data seperti ini  :

@SuppressLint("StaticFieldLeak")
public void getProductList() {
    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... voids) {
            final List<Product> products = App.database.getProductDao().getAll();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    displayProductList(products);
                }
            });
            return null;
        }
    }.execute();
}

Dan untuk insert data ke dalam database seperti ini

final Product product = new Product();
product.id = System.currentTimeMillis();
product.name = inputName.getText().toString();
product.image = inputPicture.getText().toString();
product.price = Integer.parseInt(inputPrice.getText().toString());
new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... voids) {
        App.database.getProductDao().create(product);

        return null;
    }
}.execute();

Uuntuk update seperti ini :

new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... voids) {
        App.database.getProductDao().update(product);

        return null;
    }
}.execute();

Dan unruk delete seperti ini :

new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... voids) {
        App.database.getProductDao().delete(product);
        return null;
    }
}.execute();

Dari contoh – contoh kode diatas untuk operasi CRUD nya kita gunakan AsyncTask, yang mana untuk operasi database ini wajib di lakukan pada background thread.

Operasi dilakukan pada background thread adalah untuk mengoptimalkan kinerja dari aplikasi kita karena main thread hanya digunakan untuk urusan user interface.

Yang perlu diperhatikan adalah ketika ingin membuat table baru maka kita membuat class entity, dan interface dao, jangan lupa juga untuk di daftarkan pada AppDatabase untuk dibuatkan boilerplatenya oleh room compiler.

Kesimpulan

Menggunakan library room cukup direkomendasikan oleh saya, karena library ini di kembangkan oleh google yang mana secara kualitas cukup bagus.

Jika kamu akan mengimplementasikan Architecture Component maka kamu wajib menggunakan aplikasi ini karena room adalah bagian dari komponent Architecture Component.

Tiga hal yang perlu di pahami pada room ini ada, RoomDatabase, Entity dan DAO.

Dan jangan lupa untuk melakukan operasi database ini pada background thread, bisa menggunakan AsynTask atau RxJava.

Bonus

Untuk tutorial kali ini kamu bisa akses sumber kodenya pada link dibawah ini.

https://github.com/ar-android/RoomExample

Oh, ya kamu juga bisa ikuti kelas kursus online saya dengan materi membuat toko online pada aplikasi android silahkan daftar dibawah ini.

https://ahmadrosid.com/kursus-membuat-toko-online/

Terimakasih telah membaca tutorial dari saya, jang lupa untuk share ke temen – temen yang lainya ya.

Leave a Reply

Your email address will not be published. Required fields are marked *