Belajar Membuat Entity, DAO dan Database Menggunakan Room Library


Assalamualaikum Warahmatullahi Wabarakatuh.

Kita akan melanjutkan serti tutorial dari CRUD SQLite menggunakan Room Database, pada tutorial sebelumnya kita sudah membahas mengenai apa itu Room Database,  komponen utama serta berbedaannya dengan SQLite Database. Selain itu juga kita telah Mengimport Library yang diperlukan di project android studio.


Sudah saya jelaskan sebelumnya, didalam Room Database terdapat 3 komponen utama yaitu, Entity, DAO (Data Access Object) dan Database, walaupun kita sudah membahasnya, tapi saya akan jelaskan lagi secara mendalam mengenai ketiga komponen tersebut.
  • Entity : digunakan untuk merepresentasikan sebuah objek di dunia nyata, diibaratkan seperti sebuah tabel yang didalamnya terdapat data-data, karena kita akan membuat tabel Mahasiswa, jadi data yang diperlukan seperti NIM (Primary Key), Nama, Jurusan, Tanggal Lahir, dsb.
  • DAO (Data Access Object) : yaitu sebuah class dengan method khusus yang digunakan untuk mengakses Database, seperti CRUD (Create, Read, Update dan Delete).
  • Database : adalah class yang berisi daftar DAO yang bisa dipakan, class ini juga digunakan untuk mengatur versi dari database.

Pada seri kedua dari tutorial CRUD Room Database ini kita akan belajar membuat Entity, DAO dan Database terlebih dahulu, Sebelum kita memulai tutorial ini, ada baiknya akalian mengikuti postingan dibawah ini terlebih dahulu:

Buka project Android Studio kalian sebelumnya, pertama kita akan membuat class Entity nya terlebih dahulu, pada class ini kita akan mendefinisikan atribut-atribut yang diperlukan untuk table Mahasiswa seperti NIM (primary key), Nama, Jurusan, Tanggal Lahir dan Jenis Kelamin.

Membuat Entity pada Room Database 

Buat class baru, berinama Mahasiswa.java, class ini yang akan kita jadikan sebagai Entity. Masukan source code beserta penjelasannya seperti berikut ini:
package com.wildan.crudroomdatabase.model;

//========== WILDAN TECHNO ART ==========//
//======= Cianjur Apps Developer ========//

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;

import java.io.Serializable;

@Entity(tableName = "tMahasiswa") //Membuat tabel baru dengan nama "mahasiswa"
public class Mahasiswa implements Serializable{

    //Membuat kolom NIM sebagai Primary Key
    @NonNull
    @PrimaryKey
    @ColumnInfo(name = "nim_mahasiswa")
    private
    String nim;

    //Membuat kolom Nama
    @ColumnInfo(name = "nama_mahasiswa")
    private
    String nama;

    //Membuat kolom Tanggal Lahir
    @ColumnInfo(name = "tanggal_lahir")
    private
    String tanggalLahir;

    //Membuat kolom Jurusan
    @ColumnInfo(name = "jurusan")
    private
    String jurusan;

    //Jenis Kelamin
    @ColumnInfo(name = "jenis_kelamin")
    private
    String jenisKelamin;

    //Method untuk mengambil data NIM
    @NonNull
    public String getNim() {
        return nim;
    }

    //Method untuk memasukan data NIM
    public void setNim(@NonNull String nim) {
        this.nim = nim;
    }

    //Method untuk mengambil data Nama
    public String getNama() {
        return nama;
    }

    //Method untuk memasukan data Nama
    public void setNama(String nama) {
        this.nama = nama;
    }

    //Method untuk mengambil data Tanggal Lahir
    public String getTanggalLahir() {
        return tanggalLahir;
    }

    //Method untuk memasukan data Tanggal Lahir
    public void setTanggalLahir(String tanggalLahir) {
        this.tanggalLahir = tanggalLahir;
    }

    //Method untuk mengambil data Jurusan
    public String getJurusan() {
        return jurusan;
    }

    //Method untuk memasukan data Jurusan
    public void setJurusan(String jurusan) {
        this.jurusan = jurusan;
    }

    //Method untuk mengambil data Jenis Kelamin
    public String getJenisKelamin() {
        return jenisKelamin;
    }

    //Method untuk memasukan data Jenis Kelamin
    public void setJenisKelamin(String jenisKelamin) {
        this.jenisKelamin = jenisKelamin;
    }
}
Coba kalian perhatikan, class tersebut mirip dengan class Objek Model Java pada umumnya, didalam class tersebut kita definisikan beberapa atribut seperti NIM, Nama, Tanggal Lahir, Jurusan dan Jenis Kelamin. Serta mehod Getter dan Setter yang digunakan untuk mengambil dan memasukan data.

Untuk membuat Entity kita perlu menggunakan @ (Annotation) untuk membuat tabel dan atributnya. pada class tersebut kita dapat membuat tabel dengan menggunakan Annotation @Entity, untuk merepresentasikan tabel Mahasiswa pada Database.

Lalu untuk membuat kolom, kita bisa menggunakan Annotation @ColumnInfo, berikutnya pada NIM kita definisikan sebagai @PrimaryKey, karena setiap mahasiswa NIMnya pasti berbeda-beda.

Untuk Primary Key didalam Room Database kita juga dapat membuat autoGenerate id seperti ini @PrimaryKey(autoGenerate = true) yang secara otomatis akan membuat id-nya sendiri

Pada atribut NIM kita definisikan dengan Annotation @NonNull, karena data yang dimasukan tidak boleh Null/Kososng, terakhir kita meng-extends Serializable, untuk mengubah data objek pada class tersebut menjadi Byte, karena nanti data tersebut akan disimpan dalam bentuk File.

Membuat DAO (Data Access Database) pada Room Database 

Berikutnya kita buat interface DAO atau Data Access Database, dengan nama MahasiswaDAO.java, interface ini berisi method-method khusus yang digunakan untuk mengakses database, seperti Insert, Read, Update, Delete, Select, atau semacamnya.
package com.wildan.crudroomdatabase.data;

//========== WILDAN TECHNO ART ==========//
//======= Cianjur Apps Developer ========//

import android.arch.persistence.room.Dao;

@Dao
public interface MahasiswaDAO {

    //Akan dibahas pada tutorial selanjutnya
}
Hampir sama seperti pada interface pada umunnya, yang membedakannya, pada interface tersebut kita manambahan Annotation @DAO dari Library Room Database. Interface tersebut kita biarkan kosong, karena akan kita bahas pada tutorial berikutnya.

Jika kalian sudah membuat kedua komponen tersebut, terakhir kita buat class Database Room itu sendiri.

Membuat Abstract Class pada Room

Buat class baru bernama AppDatabase.java. Class ini digunakan untuk membuat objek dari Room Database itu sendiri, didalamnya terdapat class-class DAO yang akan digunakan.
package com.wildan.crudroomdatabase.data.factory;

import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;

import com.wildan.crudroomdatabase.data.MahasiswaDAO;
import com.wildan.crudroomdatabase.model.Mahasiswa;

/*
 * Membuat Class Database
 * Entity yang digunakan adalah Mahasiswa.class
 * Version = 1
 */
@Database(entities = {Mahasiswa.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

    //Untuk mengakses Database menggunakan method abstract
    public abstract MahasiswaDAO mahasiswaDAO();
}
Pertama kita gunakan Annotation @Database untuk membuat class Database itu sendiri, lalu kita set Entity-entity yang akan digunakan, karena kita hanya membuat satu entity (Mahasiswa.java) lalu kita definisikan versionnya yaitu 1, jadi kita cukup menggunakan kode seperti ini : @Database(entities = {Mahasiswa.class}, version = 1).

Class tersebut meng-extends Room Database lalu didalammnya kita buat method abstract dari class MahasiswaDAO bernama mahasiswaDAO, method ini hanyalah method kosong yang tidak berisi, nantinya digunakan untuk mengakses Database.

Itu dia penjelasan mengenai Entity, DAO dan Database pada Room Datbase, jika kalian sudah membuat ketiga komponen tersebut, mari kita lanjutnkan pada tutorial berikutnya mengenai Cara Menggunakan Method Insert pada Room Database.

Sekian dari saya, mohon maaf bila ada kesalahan, jika ada yang ingin ditanyaka, silakan isi kolom komentar dibawah ini.

Wassalamualaikum Warahmatullahi Wabarakatuh.

Wildan M Athoillah
Wildan M Athoillah Blogger dan spesialis pembuat aplikasi android.