Room : Library SQLite yang persisten dari Google

Room sudah dikenalkan oleh google sejak google IO 2017. Implementasinya mirip seperti ORMlite, yang memudahkan untuk membuat, mengakses dan menjalankan fungsi pada database sqlite di android. Dengan kata lain room merupakan abtraksi layer dari sqlite.

Pada dasarnya terdapat 3 komponen di room yang memudahkan untuk menjalankan fungsi sqlite, yaitu :

  1. Database
  2. Entity
  3. DAO (data access object)

Entity, merepresentasikan data, relasi pada sebuah table. DAO, mendefinisikan sebuah fungsi yang menjalankan raw sql didalamnya. Keduanya menggunakan anotasi java dalam setiap pendefinisiannya.

Selain ketiga komponen tersebut, room memiliki anotasi yang sederhana dan memudahkan dalam menjalankan fungsi database CRUD. Dengan anotasi ini pula, query yang sulit dapat digunakan dengan mudah melalui DAO.

Menggunakan Room

  1. Tambahkan dependencies pada build.gradle:
implementation “android.arch.persistence.room:runtime:1.0.0”
annotationProcessor “android.arch.persistence.room:compiler:1.0.0”

selain itu build.gradle pada project :

allprojects {
    repositories {
        jcenter()
        google()
    }
}

2. Buatlah data model, dengan mendefinisikan entity nama table dan juga primary key

@Entity(tableName = "user")
public class User {

    @PrimaryKey(autoGenerate = true)
    private int uid;

    @ColumnInfo(name = "first_name")
    private String firstName;

    @ColumnInfo(name = "last_name")
    private String lastName;

    @ColumnInfo(name = "age")
    private int age;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

3. Buatlah interface berupa DAO terkait model tersebut menjalankan CRUD :

@Dao
public interface UserDao {

    @Query("SELECT * FROM user")
    List getAll();

    @Query("SELECT * FROM user where first_name LIKE  :firstName AND last_name LIKE :lastName")
    User findByName(String firstName, String lastName);

    @Query("SELECT COUNT(*) from user")
    int countUsers();

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);
}

4. Buatlah class database yang meng-extend dari RoomDatabase berupa anotasi database. Pada class database tersebut, menginisialisasikan nama database, versi, class model dan interface DAO yang digunakan.

@Database (entities = {User.class}, version = 1, exportSchema = false)
 public abstract class UserDatabase extends RoomDatabase {
 public abstract DaoAccess daoAccess() ;
 }

Selanjutnya kita sudah bisa menjalankan fungsi room seperti :

private static User addUser(final AppDatabase db, User user) {
    db.userDao().insertAll(user);
    return user;
}

private static void populateWithTestData(AppDatabase db) {
    User user = new User();
    user.setFirstName("Achmad");
    user.setLastName("Fachrie");
    user.setAge(30);
    addUser(db, user);
}

Catatan yang perlu diperhatikan adalah dalam setiap menjalankan fungsi database room, maka anda perlu menjalankan pada background, bukan pada UI, sehingga anda perlu menjalankan fungsi asynctask terlebih dahulu, lalu didalamnya anda bisa menggunakan fungsi room.

Mungkin Anda juga menyukai

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *