Getting started to Room Persistence Library
Room cung cấp một lớp trừu tượng trên SQLite để cho phép truy cập dữ liệu khi khai thác sức mạnh của SQLite. Thư viện giúp bạn tạo bộ nhớ cache dữ liệu ứng dụng của mình trên thiết bị đang chạy ứng dụng của bạn. Bộ nhớ cache này cho phép người dùng xem một bản sao thông tin chính xác trong ứng dụng ...
Room cung cấp một lớp trừu tượng trên SQLite để cho phép truy cập dữ liệu khi khai thác sức mạnh của SQLite. Thư viện giúp bạn tạo bộ nhớ cache dữ liệu ứng dụng của mình trên thiết bị đang chạy ứng dụng của bạn. Bộ nhớ cache này cho phép người dùng xem một bản sao thông tin chính xác trong ứng dụng của bạn bất kể người dùng có kết nối internet.
Add the Google Maven repository
Android Studio không cấu hình để truy cập kho này theo mặc định. Để thêm nó vào project của bạn, mở build.gradle cho dự án và thêm dòng bên dưới:
allprojects { repositories { jcenter() maven { url 'https://maven.google.com' } } }
Add Architecture Components
Mở build.gradle của module app và thêm dependencies:
implementation "android.arch.persistence.room:runtime:1.0.0 annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
Có 3 thành phần chính trong Room:
- Database: Bao gồm chủ sở hữu database và đóng vai trò điểm truy cập chính cho kết nối với dữ liệu liên quan. Class sử dụng annotation @Database phải thỏa mãn các điều kiện sau:
- Là một abstract class được extend từ RoomDatabase.
- Bao gồm list các entity được liên kết với database với annotation.
- Bao gồm một abstract method ko có tham số truyền vào và trả về class có annotation @Dao Khi chạy, bạn có thể có được một instance của database bằng cách gọi Room.databaseBuilder() hoặc Room.inMemoryDatabaseBuilder().
- Entity: Biểu diễn table bên trong cơ sở dữ liệu.
- DAO: Bao gồm các method được sử dụng để truy cập cơ sở dữ liệu. Diagram kiến trúc của Room
- Entity Class: User.java
@Entity public class User { @PrimaryKey private int uid; @ColumnInfo(name = "first_name") private String firstName; @ColumnInfo(name = "last_name") private String lastName; }
- DAO Class: UserDao.java
@Dao public interface UserDao { @Query("SELECT * FROM user") List<User> getAll(); @Query("SELECT * FROM user WHERE uid IN (:userIds)") List<User> loadAllByIds(int[] userIds); @Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1") User findByName(String first, String last); @Insert void insertAll(User... users); @Delete void delete(User user); }
- Database Class: AppDatabase.java
@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); }
Sau khi tạo ra những file trên, bạn có thể get một instance của database được tạo ra bằng dòng dưới đây
AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
Note: Bạn nên khởi tạo AppDatabase instance theo singleton pattern
Bạn có thể tìm hiểu thêm nâng cao hơn về Room ở https://developer.android.com/training/data-storage/room/defining-data.html