Lompat ke konten
A alfach.com

Room : Library SQLite yang persisten dari Google

A alfach.com
2 menit baca
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:
Kode
implementation “android.arch.persistence.room:runtime:1.0.0”
annotationProcessor “android.arch.persistence.room:compiler:1.0.0”

selain itu build.gradle pada project :

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

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

Kode
@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 :

SQL
@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.

Kode
@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 :

Kode
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.

Bacaan terkait

Komentar (0)

Belum ada komentar. Jadilah yang pertama.

Tulis komentar

Komentar akan dimoderasi sebelum tampil.

Tidak akan dipublikasikan.