Sử dụng Room Persistence Library trong android
Trứớc khi bắt đầu sử dụng Room trong project android chúng ta hãy cùng tìm hiểu xem liệu Room là gì và các thành phần cơ bản của nó. Room là một Persistence Library được google giới thiệu trong sự kiện google I/O mới đây, nó là một abstract layer cung cấp cách thức truy câp thao tác với dữ liệu ...
Trứớc khi bắt đầu sử dụng Room trong project android chúng ta hãy cùng tìm hiểu xem liệu Room là gì và các thành phần cơ bản của nó. Room là một Persistence Library được google giới thiệu trong sự kiện google I/O mới đây, nó là một abstract layer cung cấp cách thức truy câp thao tác với dữ liệu trong cơ sở dữ liệu SQLite. Nếu các bạn đã từng làm việc với Spring MVC và Hibenate thì chắc hẳn các bạn sẽ thấy nó rất quen thuộc khi tiếp cận với Room. Với Room việc thao tác với DB trở nên thật sự dễ dàng, bạn sẽ không cần phải viết những câu lệnh rất dài để thao tác với cơ sở dữ liệu nữa.
Room có 3 thành phần chính: Database, Entity và DAO
- Database: Được sử dụng để tạo một database bằng việc kế thừa từ class RoomDatabase
- Entity: Tướng ứng với một hàng trong bảng cơ sở dữ liệu.
- DAO: đây là thành phần chính của Room, nó chịu trách nhiệm định nghĩa các hàm thao tác với cơ sở dữ liệu
Chúng ta sẽ cùng nhau tạo một project demo đơn giản để thấy được việc sử dụng Room trong dự án android sẽ như thế nào, demo sẽ gồm 1 màn hình duy nhất cho phép thêm mới một user và xem danh sách user.
- Thêm thư viện cần thiết
Để sử dụng Room trong project chúng ta mở file build.gradle module app và thêm đoạn code sau
/*Room*/ compile "android.arch.persistence.room:runtime:1.0.0-alpha5" annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha5"
Trong ví dụ này mình sẽ sử dụng kotlin trên bản android studio 2.3.1 nên cần cài thêm plugin
apply plugin: 'kotlin-android' dependencies { /*Kotlin*/ compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" }
- Tạo lớp thực thể
@Entity(tableName = "user") data class User(val firstName: String = "", val lastName: String = "") { @PrimaryKey(autoGenerate = true) val uid: Long = 0 }
- Tạo lớp DAO
@Dao interface UserDao { @Query("SELECT * FROM user") fun getAllUser(): Single<List<User>> @Insert fun insert(user: User) @Query("SELECT * FROM user WHERE firstName LIKE :first AND lastName LIKE :last LIMIT 1") User findByName(String first, String last); }
- Tạo Room database
Tạo class AppDatabase
@Database(entities = arrayOf(User::class), version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }
Setup database
class MyApp : Application() { companion object { var database: AppDatabase? = null } override fun onCreate() { super.onCreate() MyApp.database = Room.databaseBuilder(this, AppDatabase::class.java, "app-database").build() } }
Tham khảo: https://developer.android.com/topic/libraries/architecture/room.html https://kotlinlang.org/docs/tutorials/kotlin-android.html